helllo,小伙伴们,大家好。这里是左左右。这期视频我们讲串口屏。录这期视频之前我一直在纠结这套学习板是选择OLED屏还是串口屏。最终还是选择了串口屏。我给大家对比一下两者的区别,顺便说说串口屏有什么优势。先说OLED屏,优点是简单,易上手,目前大多数教程都是用的这种屏。
它的缺点是功能单一,只有显示功能,而串口屏呢,优点是不止有显示功能,还有触摸功能,而且串口屏有模拟器,就是在没有串口屏实物的情况下也是可以调试的。还有就是串口屏有良好的人机交互能力,不管是自己diy一些小玩意。还是工作中的实战项目,人机交互是很重要的。大家可以想象一下,你的手机没有触摸功能得多难受。
串口屏和OLED屏的区别就是,老年机和智能机的区别。串口屏的缺点是上手有难度,但不大。前面说了那么多优点就是希望大家能学下去,真正掌握串口屏。串口屏使用的通信协议就是USART串口通信。这也就是前面一期视频为什么要讲USART串口通信的原因?这期视频我们要实现。通过串口屏上的按钮来控制学习板上LED灯的亮灭。
就是在串口屏中按钮按下时。向单片机发送一个固定的字符串。当单片机接收到这个字符串就反转LED灯的电平,从而实现LED灯的亮灭。带着这一原理开始我们下面的讲解。
首先,我们打开串口屏官方自带的这款软件。安装包在我的资料包中。关于资料包的获取方式在第一期的视频中有过讲解,这里就不赘述了。首先,我们要新建一个工程。点击文件下拉菜单中的新建。然后,起个文件名,点击保存。接着,选择对应串口屏的型号,点击ok,选择设备显示方向为横屏。这里用到的字符编码是gb2312。
gb2312是字符编码名称,属简体中文编码的一种。和ASC码类似。接着,在工具箱中单击按钮这个图标。这里的按下事件就表示按钮按下时执行的动作。这里的prints就是向单片机发送数据。prints后面第一个参数代表要发送的数据。第二个参数代表要发送数据长度。填入0就表示自动识别长度,一般我们都填0。
点击编译。这里报错了,显示字库ID无效。我们就新建一个字库。点击工具下拉菜单中的字库制作。这里我们选择思源黑体,字库名称填一个自己能分辨的名称就可以了。点击生成字库,然后保存。立即加入字库这里选择是,我们把按钮改个名称,输入按钮,点击回车。点击调试,这里跳出来的就是串口屏的模拟器。
这里的模拟器返回数据就是按钮按下时,串口屏向外发送的数据。31在asc码表中是字符'1'对应的十六进制数。点击S将模拟器返回数据改为字符串类型。是不是输出就是字符'1'了?这里已经完成带有按钮功能的串口屏制作了。

接下来打开cubedie来实现单片机stm32的相关功能。我们将之前写好的按键控制LED小灯复制一个出来。将他项目名称改一下。这个项目还不能直接用。要将.ioc的文件名改成和项目名称一样。然后,把这两个debug文件删掉。这个项目就可以直接使用了。接着,打开这个.ioc文件,将PA9和PA10这两个引脚分别设置成usart1_tx和usart1_rx。
接着,将USART1设置为异步模式。这个大写A开头的单词就是USART中的A,代表异步模式。由于我们很少用到同步模式,常用的就是UART串口通信,将波特率设置为9600,数据长度为8位二进制数。这里的数据长度包含奇偶校验位。奇偶校验位设置为空,停止位是一个二进制数。

好的,我们点击保存,进入main.c文件。我们定义一个char类型的数组,用来存储串口屏发送过来的数据。数组成员个数为1,初始化为空。我们把之前写好的代码屏蔽掉。这里用hal_uart_receive用来接收串口屏发过来的数据。这个函数的第一个参数要求是指针类型的。所以,前面要加一个取地址符。

huart1是uart1的句柄。句柄你可以理解为是一个内存块。它包含了UART1的所有配置参数(如波特率、数据位长度、停止位等)。指针就是指向这个数据块的,第二个参数就是代表接收串口屏发送过来的变量名。这里我们用刚才定义好的receive_data。第三个参数代表要接收字符串的长度。
前面定义的receive_data字符串长度为1,所以填入1。第四个参数代表接收等待的时间。我们填入的hal_max_delay代表接收不到就一直停在这里等。
接下来写个判断,当接收到的字符第0位是字符'1'时。代表按键被按下,我们反转PA15引脚的电平信号。之后我们将字符串的第0位置0,这里只要不是字符'1,就行。点击编译发现有一个警告,按下Ctrl单击找到定义这个函数的地方。可以看得出第二个参数的数据类型是uint8_t的指针。
uint8_t是指无符号整数类,占用空间为8个bit。我们知道char类型也是占用8个bit。我们把receive强转为uint8_t的指针类型就行了。我们要知道stm32输出的是3.3V的高电平和0V的低电平。分别代表1和0,而电脑usb口输出的差分信号,具体什么是差分信号?
感兴趣的小伙伴们,可以去查查,这个不是我们本期视频的重点。那么,要想通过stm32与电脑上的串口屏模拟器进行通信。就要将高低电平信号转换为差分信号,这里就要引入usb转ttl这个模块了。我们的学习板是内置这个模块的,使用学习板的小伙伴们只需要安装ch340这个驱动就可以了,使用最小系统板的小伙伴们要准备usb转ttl这个模块。
并下载安装对应的驱动。接下来我们将电脑通过usb数据线和单片机连在一起。我将学习板和最小系统板的接线图放在这里供大家连线。接着,我们右击电脑这里的开始选择设备管理器。在端口这里找到ch340对应com3,回到串口屏模拟器,选择用户MCU输入。波特率选择9600,串口号选择刚才的COM3,你们根据自己的电脑选择对应的串口号,点击开始。
这时我们点击按钮是不是就实现了LED小灯的亮灭了?这里我们只使用了USART通信里的一根线,也就是串口屏向stm32发送数据。另外,一条stm32向串口屏发送数据的线还没使用呢?该如何使用呢?我们回到cubeide编写代码将stm32接收到的数据'1'再发回到串口屏。点击运行。
是不是发现串口屏发送出去的数据又被单片机发送回来了?这样就实现了USART的双向通信了。接下来我们将做好的串口屏界面下载到实物。然后,与学习板相连。是不是也能实现我们想要的功能?
好的,今天的视频就到这里。您的点赞,收藏和关注是我更新下去的最大动力。我们下期见。