
串口,即串行通信接口,指按位发送和接收的接口。。。
串口
一、数据通信基础概念
1、串行/并行通信

2、单工/半双工/全双工通信

3、同步/异步通信

4、波特率

5、常见的串行通信接口

二、串口(RS-232)
1、什么是串口

2、RS-232电平与COMS/TTL电平对比

3、设备间的RS232通信示意图

4、STM32串口与电脑USB口通信示意图

5、RS-232异步通信协议

三、STM32-USART
1、STM32的USART简介
- Universal synchronous asynchronous receiver transmitter,通用同步异步收发器
- Universal asynchronous receiver transmitter,通用异步收发器
- USART/UART都可以与外部设备进行全双工异步通信
- USART,我们常用的也是异步通信
2、STM32的USART主要特征
- 全双工异步通信
- 单线半双工通信
- 单独的发送器和接收器使能位
- 可配置使用DMA的多缓冲器通信
- 多个带标志的中断源
3、STM32F1/F4/F7的USART框图

4、STM32H7的USART框图

5、STM32F1/F4/F7/H7的USART框图简化版

6、设置USART波特率(F1)

波特比率寄存器(BRR)

使用寄存器设置波特率 - USART1为例

波特率设置通用公式推演(F1)

7、设置USART波特率(F4)

波特率寄存器(BRR)

8、设置USART波特率(F7)

波特率寄存器(BRR)

9、设置USART波特率(H7)

波特率寄存器(BRR)

10、USART寄存器介绍(F1)
控制寄存器1(CR1)

控制寄存器2(CR2)

控制寄存器3(CR3)

数据寄存器(DR)

状态寄存器(SR)

需要配置的时序总结

四、HAL 库外设初始化MSP回调机制

1、HAL库外设初始化MSP回调机制- USART为例

五、HAL 库中断回调机制

1、HAL库中断回调机制 - USART为例(F1)

UART中断回调函数:
HAL_UART_TxCpltCallback() /* 发送完成回调函数 */
HAL_UART_TxHalfCpltCallback() /* 半发送完成回调函数 */
HAL_UART_RxCpltCallback() /* 接收完成回调函数 */
HAL_UART_RxHalfCpltCallback() /* 半接收完成回调函数 */
HAL_UART_ErrorCallback() /* UART错误回调函数 */
HAL_UART_AbortCpltCallback() /* UART中止回调函数 */
HAL_UART_AbortTransmitCpltCallback() /* UART发送中止回调函数 */
HAL_UART_AbortReceiveCpltCallback() /* UART接收中止回调函数 */
六、USART/UART 异步通信配置步骤

| 功能 |
函数 |
| 配置串口工作参数 |
HAL_UART_Init() |
| 串口底层初始化 |
HAL_UART_MspInit() 配置GPIO、NVIC、CLOCK等 |
| 开启串口异步接收中断 |
HAL_UART_Receive_IT() |
| 设置优先级,使能中断 |
HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ() |
| 编写中断服务函数 |
USARTx_IRQHandler()、 UARTx_IRQHandler() |
| 串口数据发送 |
USART_DR, HAL_UART_Transmit() |
1、HAL库相关函数介绍
-
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
//关键结构体(F1):
typedef struct
{ uint32_t BaudRate; /* 波特率 */
uint32_t WordLength; /* 字长 */
uint32_t StopBits; /* 停止位 */
uint32_t Parity; /* 奇偶校验位 */
uint32_t Mode; /* UART 模式 */
uint32_t HwFlowCtl; /* 硬件流设置 */
uint32_t OverSampling; /* 过采样设置 */
}UART_InitTypeDef
-
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
- 作用:以中断的方式接收指定字节的数据
- 参 1 是 UART_HandleTypeDef 结构体类型指针变量
- 参 2 是指向接收数据缓冲区
- 参 3 是要接收的数据大小,以字节为单位
-
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- 作用:以阻塞的方式发送指定字节的数据
- 参 1 :UART_HandleTypeDef 结构体类型指针变量
- 参 2:指向要发送的数据地址
- 参 3:要发送的数据大小,以字节为单位
- 参 4:设置的超时时间,以ms单位
七、IO 引脚复用功能
1、何为复用?
- 通用:IO端口的输入或输出是由GPIO外设控制,我们称之为通用
- 复用: IO端口的输入或输出是由其它非GPIO外设控制,我们称之为复用
2、STM32F1的IO引脚复用

3、STM32F4/F7/H7的IO引脚复用

IO引脚复用映射示意图

GPIO 复用功能低位寄存器(AFRL)

GPIO 复用功能高位寄存器(AFRH)

八、串口接收过程

