UART(Universal Asynchronous Receiver/Transmitter)全称叫作通用异步串行接收发送器。
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)全称叫作通用同步异步串行接收发送器。
它们之间的区别是USART比UART多了同步功能,通常来说,我们在大多数情况下使用异步通信功能,所以它们两者没有区别。有些书籍、代码有时使用UART这个名词,有时使用USART名词,读者在一般情况下可以认为两者是同一个概念。本书统称USART或者串口。
串口最重要的参数是波特率,每秒钟传送的码元符号的个数。因此波特率越大,则数据传输速度越快。常见的波特率有9600、19200、38400、115200等。
任何USART通信均需要两个引脚:接收数据输入引脚(RX)和发送数据输出引脚(TX)。
USART数据格式一般分为启动位、数据帧、可能的奇偶校验位、停止位,如图4.31所示。
图4.31 USART数据格式
启动位:发送方想要发送串口数据时,必须先发送启动位。
数据帧:发送的数据内容,数据的位。有8位数据字长和9位数据字长两种。
可能的奇偶校验位:在串口通信中一种简单的检错方式,没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。
停止位:停止位不仅仅表示传输的结束,并且提供计算机校正时钟同步的机会。
通常情况下,我们默认选择的USART数据格式为:8位数据字长、无奇偶校验位、1位停止位。
STM32F407有6个USART,本文将选用USART3作为代码测试串口。实现功能:计算机可以通过串口工具发送“SLight_led1E”点亮开发板的LED1;发送“SClose_led1E”熄灭开发板的LED1。
这个实验需要读者使用串口工具把开发板和计算机连接起来,开发板的RX连接串口工具的TX、开发板的TX连接串口工具的RX,GND接GND,VCC不用接。开发板的USART3的RX和TX引脚是GPIOB_10和GPIOB_11,如图4.32所示。如果实验过程中发现开发板没有接收到串口数据,可以尝试把RX、TX两个线交换一下。
图4.32 串口连接计算机
此外读者还需要一个串口调试软件,可以使用本书提供的“附录A\软件\串口工具\sscom5.13.1.exe”,也可以自己在网上下载其他串口调试软件。运行sscom5.13.1.exe,如图4.33所示。
图4.33 sscom5.13.1.exe串口软件
“波特率”下拉菜单中选择9600,单击“打开串口”按钮,在输入框输入SLight_led1E,单击“发送”按钮,可以观察到开发板的LED1点亮;输入SClose_ledE,单击“发送”按钮,可以观察到开发板的LED1熄灭。说明实验成功。
使用STM32标准库,我们只需要简单的几段代码即可实现USART的控制。代码编写思路:初始化USART3、编写中断处理函数、编写USART发送函数。
打开Chapter4\04_usart\mdk\UAST3.uvprojx工程文件。USART3初始化、中断处理函数等相关在Chapter4\04_usart\USER\usart3\usart3.c文件中。
USART3初始化包含:
(1)GPIO口初始化,需要将USART3对应的引脚复用成USART功能。
(2)USART3控制器初始化,以及主要设置。
(3)中断优先级设置。
代码如下:
USART中断处理函数主要是接收中断,当USART3完整接收一个数据后,将触发响应的中断,读者需要在中断处理函数中把数据放到自己的缓冲区,并做相应的处理。
我们约定计算机发送的串口数据的格式为SXXXXXE,其中:
S是命令的头部,用来告诉开发板这是一条命令的起始。
XXXXX是命令的具体内容,我们只实现SLight_led1E和SClose_led E。
E是命令的结束符,告诉开发板命令已经发送完整,可以开始处理。
代码如下:
本节主要讲解了串口的相关概念,并在开发板上使用USART3实现一个简单的计算机控制开发板的功能。读者可以在此基础上扩展出更多的功能,也可以使用其他USART实现相同的功能。