打印
[其他ST产品]

ST32之USART|

[复制链接]
853|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
慢醇|  楼主 | 2021-3-27 23:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1. 串口通信接口背景知识
  1)并行通信
    ①传输原理:各个位同时传输   ②优点:传输速度快   ③缺点:占用引脚资源多
  2)串行通信
    ①传输原理:数据按位顺序传输   ②优点:占用资源少   ③缺点:速度相对缓慢
    串行通信方式分同步带时钟同步信号传输(SPI、IIC)、异步不带时钟同步信号(UART、单总线)

使用特权

评论回复
沙发
慢醇|  楼主 | 2021-3-27 23:17 | 只看该作者
常见的串行通信接口:

使用特权

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

使用特权

评论回复
地板
慢醇|  楼主 | 2021-3-27 23:21 | 只看该作者
2)串行通信过程

使用特权

评论回复
评论
慢醇 2021-3-27 23:23 回复TA
① 串口1的时钟来自于时钟PCLK1、串口2的时钟来自于PCLK2-4 ② 接收器和发送器共用同一个波特率发生器 
5
慢醇|  楼主 | 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。

使用特权

评论回复
6
慢醇|  楼主 | 2021-3-27 23:25 | 只看该作者
② USART_DR数据寄存器

使用特权

评论回复
7
慢醇|  楼主 | 2021-3-27 23:25 | 只看该作者
③ USART_BRR波特率寄存器

使用特权

评论回复
8
慢醇|  楼主 | 2021-3-27 23:26 | 只看该作者
波特率的计算方法:
   接收器和发送器的波特率在USARTDIV的整数和小数寄存器中的值应设置成相同。

使用特权

评论回复
9
慢醇|  楼主 | 2021-3-27 23:26 | 只看该作者
这里的fCK是给外设的时钟(PCLK1用于USART2、 3、 4、 5, PCLK2用于USART1)
USARTDIV是一个无符号的定点数。这12位的值设置在USART_BRR寄存器。
注: 在写入USART_BRR之后,波特率计数器会被波特率寄存器的新值替换。因此,不要在通信进
行中改变波特率寄存器的数值。

使用特权

评论回复
10
慢醇|  楼主 | 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的波特率。

使用特权

评论回复
11
慢醇|  楼主 | 2021-3-27 23:28 | 只看该作者
④ USART_CR1控制寄存器1 ⑤ USART_CR2控制寄存器2 ⑥ USART_CR3控制寄存器3

使用特权

评论回复
12
慢醇|  楼主 | 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();//清除中断状态标志位

使用特权

评论回复
13
慢醇|  楼主 | 2021-3-27 23:29 | 只看该作者
5.端口配置的一般步骤

使用特权

评论回复
14
慢醇|  楼主 | 2021-3-27 23:32 | 只看该作者
6.example:

使用特权

评论回复
15
慢醇|  楼主 | 2021-3-27 23:33 | 只看该作者

使用特权

评论回复
16
慢醇|  楼主 | 2021-3-27 23:35 | 只看该作者


使用特权

评论回复
17
慢醇|  楼主 | 2021-3-27 23:36 | 只看该作者

The end

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

125

主题

1241

帖子

5

粉丝