串口协议概述
USART框图
HAL库配置串口
RCC时钟配置成外部晶振高速时钟
SYS中Debug配置成Serial Wire
时钟频率根据自己的需要设置一下
串口配置
串口配置逻辑
一、定义一个UART_HandleTypeDef结构体句柄
二、通过HAL_UART_MspInit函数实现串口外设的底层初始化(HAL_UART_MspInit本身是一个弱定义的形式,用户可根据自己的需要重新配置,若无配置则执行系统的初始化定义)
1。使能UART外设时钟
2、配置UART使用的引脚模式
3、如果要用中断,就配置中断
4、如果要用DMA,就配置DMA
三、通过前面定义的UART_HandleTypeDef结构体句柄,来配置串口的波特率、数据字长、停止位、奇偶校验位、硬件流控制。
四、通过调用HAL_UART_Init()函数,来将串口配置为异步模式。
接下来看看CubeMX配置的初始化代码
以上就是CubeMX为我们定义好的,我们依旧只需要写中断处理函数,来完成我们需要的功能。
这里有一个问题,就是注意相关的引脚配置,可能官方的UART引脚和你电路板上USB转串口的引脚没对应上,这个时候需要对应开发板原理图检查,然后把引脚配置正确,否则程序逻辑上没问题,然后DeBug起来真的是折磨
串口回显实验
定义好串口配置之后,我们只需要重定义中断处理函数即可
重定向C库函数printf到串口发送