STM32——串口通信
- 一、硬件部分
- 1、RS232标准
- 2、USB转串口(TTL)
- 3、原生的串口到串口(TTL->TTL)
- 二、串口通信协议
- 三、STM32串口通信功能框图
- 1、引脚
- 2、USART通信相关寄存器(最好过一遍,或者在试验之后回过来看一下,了解一下其工作机制)
- 3、波特率
一、硬件部分
RS232通信和TTL的区别只有一点,那就是在于硬件机制(电平),如果需要做RS232和TTL的转换,那就需要借助转换芯片来完成。
TTL | RS232 |
---|---|
0-5V | -15 - 15V |
高电平置1,低电平置0 | 高电平置0,低电平置1 |
1、RS232标准
2、USB转串口(TTL)
3、原生的串口到串口(TTL->TTL)
二、串口通信协议
起始位:由一个逻辑0的数据位表示
停止位:由0.5、1、1.5或2个逻辑1的数据位表示,通常选用1个位
有效数据:起始位后面紧接着就是有效数据,有效数据的长度常被约定为5、6、7、8或9位
校验位:校验位是可选的,为数据提供抗干扰性。
校验的方法主要有:
1、奇校验(odd):有效数据和校验位中“1”的个数为奇数
2、偶校验(even):有效数据和校验位中“1”的个数为偶数
3、0校验(space):不管有效数据内容是什么,校验位总是0
4、1校验(mark):同上,校验位总是1
5、无校验(noparity):数据包中不包含校验位
三、STM32串口通信功能框图
使用单片机外设之前,要先看看USART(通用同步异步收发器)的功能框图:
图片来源:STM32中文参考手册 25-3章节
我们将上面的功能框图划分成四个部分:
1、引脚
通过上图我们可以看到一共有8个引脚:
引脚 | 功能 |
---|---|
TX | 数据发送 |
RX | 数据接收 |
SCLK | 时钟,仅同步通信时使用 |
nRTS | 请求发送(Request To Send) |
nCTS | 允许发送(Clear To Send) |
SW_RX、IRDA_OUT、IRDA_IN | 红外相关配置 |
在这里需要注意的是:USART1-3是支持同步通信的,但是其挂载的总线不同,如果要从USART1换成USART2,那么其时钟也要修改
对于一款芯片的引脚功能,可以通过STM32F10X数据手册——Pinouts and pin description查询
ST每个系列的芯片都有一个数据手册,里面有引脚的详细功能,对于部分引脚来说,都是多个功能复用的,在写程序的时候享用到哪个功能,就在初始化时对它进行相应的配置,即通用功能配置和相应功能的初始化配置。
2、USART通信相关寄存器(最好过一遍,或者在试验之后回过来看一下,了解一下其工作机制)
如下图所示,USART_DR寄存器是9位有效的,包含一个发送数据寄存器TDR和一个接收数据寄存器RDR,是一个地址对应的两个物理内存。对应的是USART的全双工、半双工通信机制。
图片来源:STM32中文参考手册 25.6.2章节
我们先来看一下串口数据格式:
具体用多少位,是由USART_CR1寄存器决定的:
这里的n表示不确定,是由另外的寄存器来配置的,控制停止位的寄存器是USART_CR2:
校验位是由USART_CR1寄存器控制
当校验位出错时,就会产生校验错误,这时USART_SR的PE位就会置1:
3、波特率