新闻  |   论坛  |   博客  |   在线研讨会
STM32串口通信
15695104076 | 2023-06-16 13:14:15    阅读:100   发布文章

第二天

我今天学习的是STM32的串口通信。

串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。它由起始位、数据位、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。起始位: 标志一个数据帧的开始,固定为低电平。数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行,8 位或 9 位数据。校验位:用于数据验证。停止位:用于数据帧间隔,可由0.5、 1、 1.5或2个高电平表示。

STM32的USART通用同步异步收发器,是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。UART只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。

串口有几个重要的参数。波特率,串口通信的速率;空闲,一般为高电平;起始位,标志一个数据帧的开始,固定为低电平。当数据开始发送时,产生一个下降沿;数据位,发送数据帧,1为高电平,0为低电平。低位先行。比如 发送数据帧0x0F 在数据帧里就是低位线性 即 1111 0000;校验位,用于数据验证,根据数据位的计算得来。有奇校验,偶校验和无校验;停止位,用于数据的间隔,固定为高电平。数据帧发送完成后,产生一个上升沿。串口发送的数据一般都是以数据帧的形式进行传输,每个数据帧都由起始位,数据位,停止位组成, 且停止位可变。

USART是STM32内部集成的硬件外设,可以根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可以自动接收RX引脚的数据帧时序,拼接成一个字节数据,存放在数据寄存器里。当配置好USART的电路之后,直接读取数据寄存器,就可以自动发送数据和接收数据了。串口发送数据实际上就是对发送数据寄存器TDR进行写操作。1. 当串口发送数据时,会检测发送移位寄存器是不是有数据正在移位,如果没有移位,那么这个数据就会立刻转移到发送移位寄存器里。准备发送。2. 当数据移动到移位寄存器时,会产生一个TXE发送寄存器空标志位,该位描述如下。当TXE被置1,那么就可以在TDR写入下一个数据了。3. 发送移位寄存器在发送器控制的控制下,向右移位,一位一位的把数据传输到TX引脚。4. 数据移位完成后,新的数据就会再次从TDR转移到发送移位寄存器里来,依次重复1-3的过程。通过读取TXE标志位来判断是否发送下一个数据。串口接收则是首先数据从RX引脚通向接收移位寄存器,在接收控制的控制下,一位一位的读取RX的电平,把第一位放在最高位,然后右移,移位八次之后就可以接收一个字节了。当一个字节数据移位完成之后,这一个字节的数据就会整体的移到接收数据寄存器RDR里来。在转移时会置RXNE接收标志位,即RDR寄存器非空,下方为该位的描述。当被置1后,就说明数据可以被读出。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
RT-Thread线程同步
2023-06-16 13:49:45
RT-Thread中断管理
2023-06-16 13:17:38
STM32I2C协议
2023-06-16 13:15:53
推荐文章
最近访客