STM32G473串口通信-USART/UART配置和清除串口寄存器状态的注意事项

USART和UART配置的区别

如果USART使用的是异步通信,那么UART与USART配置基本相同。

USART配置如下:

UART配置如下:

如果USART使用的是同步通信,那么UART配置就有差异。

  1. 首先通信双方都是使用USART的同步通信,一个主机,一个从机。

  2. USART同步通信使用的结构体就不一样

    USART使用同步通信的结构体为:

    USART异同通信使用的结构体

  3. 从结构体中就可以看出二者的差别,那么不同的地方怎么配置呢?这个问题我想就必须要看用户手册了,因为官方好像没有给出例程。



  4. 从官方用户手册的文件描述可以看出,配置为主机模式的步骤和说明

  5. 从官方用户手册的文件描述可以看出,配置为从机模式的步骤和说明

  1. 文档中说操作对应寄存器的位,但是官方的函数中没有提供对应的函数,我们可以这样做:
    这里以USART1为例,配置主机模式,从机模式类似就不做过多的说明。

    寄存器对应位的配置一定要看用户手册,否则容易出问题,比如CR3寄存器的HDSEL位就有如下要求:

    注意:我上面的配置不一定能够成功,我没有测试过。为什么没有测试,因为我只有一块这样的板。尴尬!

清除串口寄存器位的注意事项

清除串口状态寄存器ISR的位,还是之前的那句话"一定要看用户手册",当然如果是调用官方的库函数,当我没说。如果是自己编写的函数来清除对应的状态位,就一定要看用户手册。

比如我需要清除ISR寄存器的ORE位(下图中已经明确了,只能读),如果是按照经验可能会这样操作

但是当我们阅读用户手册对该寄存器对应位的描述时,就会发现问题所在,如下图。

根据用户手册中的描述清楚ISR寄存器的ORE位的操作为:

使用官方库函数进行清楚ISR对应位

下图就是官方的库函数,用以清除状态。从官方的库函数中也可以看出使用的ICR寄存器。

  • HANDLE:就是USART_HandleTypeDef结构体定义的husart1
  • FLAG:就是要清楚的状态位,官方的库函数的描述中有给出哪些状态可以被该函数清除。

从上面的也可以看出官方宏定义的与官方的用户手册寄存器是相关的(命名等),特别是对应寄存器的位。

当然看英文文档是非常痛苦的一件事情,但是痛就痛吧,无所畏惧。

相关推荐
无敌最俊朗-10 小时前
【电感专题2:电感的感抗、电路的阻抗、电流的滞后】
单片机·嵌入式硬件·元器件·电感
wuyk55515 小时前
嵌入式故障诊断-Bug002-局部大数组压栈高温必死机
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·嵌入式实时数据库
Zwawa18 小时前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
c语言·单片机·嵌入式
Dev_XH18 小时前
【成品设计】基于沁恒单片机的电动汽车充电站智慧调度系统
stm32·单片机·嵌入式硬件·物联网
shimly12345619 小时前
(done) 嵌入式硬件电路图 (5) 重要的元器件特性之二极管三极管
嵌入式硬件
Zw-awa21 小时前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
stm32
minglie121 小时前
esp32c3+atshell测试ov7670
单片机·嵌入式硬件
橘为己有44121 小时前
51单片机:流水灯
单片机·51单片机
蜀黍@猿21 小时前
ARM 汇编入门(十):标量浮点与 VFP 指令全解析
汇编·arm开发·stm32·mcu
不脱发的程序猿21 小时前
STM32和VS1053制作电子琴
stm32·单片机·嵌入式硬件·midi·vs1053