[其他ST产品] ST32之USART|

[复制链接]
 楼主| 慢醇 发表于 2021-3-27 23:15 | 显示全部楼层 |阅读模式
1. 串口通信接口背景知识
  1)并行通信
    ①传输原理:各个位同时传输   ②优点:传输速度快   ③缺点:占用引脚资源多
  2)串行通信
    ①传输原理:数据按位顺序传输   ②优点:占用资源少   ③缺点:速度相对缓慢
    串行通信方式分同步带时钟同步信号传输(SPI、IIC)、异步不带时钟同步信号(UART、单总线)
 楼主| 慢醇 发表于 2021-3-27 23:17 | 显示全部楼层
常见的串行通信接口: 84093605f4c9616a1c.png

评论

大容量的STM32F10x系列,包含3个USART(通用同步收发器)和2个UART(通用异步收发器) 注:USART可以当作UART用,反之不可  发表于 2021-3-27 23:18
 楼主| 慢醇 发表于 2021-3-27 23:19 | 显示全部楼层
2. ST32串行通信基础
  1)UART异步通信特点:① 全双工异步通信  ② 分数波特率发生器系统,提供精确的波特率,发送接收共用的可编程波特率,最高可达4.5Mbits/s   ③ 可编程数据长度(8或9位)④ 可配置的停止位(支持1或2停止位)⑤ 可配置使用DMA多缓冲器通信  ⑥ 单独的发送接收器使能位  ⑦ 检测标志位:Ⅰ、接收缓冲器  Ⅱ、发送缓冲器Ⅲ、传输结束标志  ⑧ 多个带标志的中断源。触发中断  ⑨ 其它:校验控制,四个错误检测标志
 楼主| 慢醇 发表于 2021-3-27 23:21 | 显示全部楼层
2)串行通信过程 80584605f4d2924077.png

评论

① 串口1的时钟来自于时钟PCLK1、串口2的时钟来自于PCLK2-4 ② 接收器和发送器共用同一个波特率发生器  发表于 2021-3-27 23:23
 楼主| 慢醇 发表于 2021-3-27 23:24 | 显示全部楼层
3. 串口通信常用寄存器和函数
  1)① USART_SR状态寄存器
           RXNE(读数据寄存器非空),当该位被置 1 的时候,就是提示已经有数据被接收到了,并
且可以读出来了。这时候我们要做的就是尽快去读取 USART_DR,通过读 USART_DR 可以将
该位清零,也可以向该位写 0,直接清除。
TC(发送完成),当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。如
果设置了这个位的中断,则会产生中断。该位也有两种清零方式: 1)读 USART_SR,写
USART_DR。 2)直接向该位写 0。
 楼主| 慢醇 发表于 2021-3-27 23:25 | 显示全部楼层
② USART_DR数据寄存器 31653605f4e50774ee.png
 楼主| 慢醇 发表于 2021-3-27 23:25 | 显示全部楼层
③ USART_BRR波特率寄存器 19377605f4e6375c31.png
 楼主| 慢醇 发表于 2021-3-27 23:26 | 显示全部楼层
波特率的计算方法:
   接收器和发送器的波特率在USARTDIV的整数和小数寄存器中的值应设置成相同。
15295605f4e7e2bc93.png
 楼主| 慢醇 发表于 2021-3-27 23:26 | 显示全部楼层
这里的fCK是给外设的时钟(PCLK1用于USART2、 3、 4、 5, PCLK2用于USART1)
USARTDIV是一个无符号的定点数。这12位的值设置在USART_BRR寄存器。
注: 在写入USART_BRR之后,波特率计数器会被波特率寄存器的新值替换。因此,不要在通信进
行中改变波特率寄存器的数值。
 楼主| 慢醇 发表于 2021-3-27 23:27 | 显示全部楼层
example:假设我们的串口1要设置115200的波特率,而PCLK2的时钟为72M。这样我们根据上面的公式有:USARTDIV=72000000/(115200*16)=39.0625
    那么得到:
       DIV_Fraction=16*0.0625=1=0X01;
       DIV_Mantissa=39=0X27;
这样,我们就得到了USART_BRR的值为0X0271。只要设置BRR寄存器值为0X0271就可以得到115200的波特率。
 楼主| 慢醇 发表于 2021-3-27 23:28 | 显示全部楼层
④ USART_CR1控制寄存器1 ⑤ USART_CR2控制寄存器2 ⑥ USART_CR3控制寄存器3
 楼主| 慢醇 发表于 2021-3-27 23:29 | 显示全部楼层
4.串口操作相关库函数
   void USART_Init();//串口初始化:波特率,数据字长,奇偶校验,硬件流控制及收发使能
   void USART_Cmd();//使能串口
   void USART_ITConfig();//使能相关中断

   void USART_SendData();//发送数据到串口,DR寄存器
   uint16_tUSART_ReceiveData();//接收数据,从DR读取接收到的数据

  FlagStatus_USART_GetFlagStatus();//获取状态标志位
  void USART_ClearFlag();//清除状态标志位
  ITStatus USART_GetITStatus();//获取中断状态标志位
  void USART_ClearITPendingBit();//清除中断状态标志位
 楼主| 慢醇 发表于 2021-3-27 23:29 | 显示全部楼层
5.端口配置的一般步骤 9295605f4f66323ff.png
 楼主| 慢醇 发表于 2021-3-27 23:32 | 显示全部楼层
6.example: 55388605f4f88890f4.png
 楼主| 慢醇 发表于 2021-3-27 23:33 | 显示全部楼层
 楼主| 慢醇 发表于 2021-3-27 23:35 | 显示全部楼层
 楼主| 慢醇 发表于 2021-3-27 23:36 | 显示全部楼层

The end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

1381

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部