MX串口配置方法见:CubeIDE 利用自带HAL库 串口收发
一、代码自动生成以后的项目及代码结构:

main.c中,调用了串口初始化

串口初始化函数赋值了串口的参数

相当于底层的初始化,配置引脚、并开启中断。
至此串口1配置完毕
二、库文件stm32f1xx_hal_uart.c内的秘密
2.1 初始化
1.usart.c中,MX_USART1_UART_Init 调用了库的HAL_UART_Init,将结构体传递进该函数中
2.HAL_UART_Init干了些什么事?
if (huart->gState == HAL_UART_STATE_RESET)
{
huart->Lock = HAL_UNLOCKED;
HAL_UART_MspInit(huart);
}
huart->gState = HAL_UART_STATE_BUSY;
__HAL_UART_DISABLE(huart); /* Disable the peripheral */
UART_SetConfig(huart);/* Set the UART Communication parameters */
/* In asynchronous mode, the following bits must be kept cleared:
- LINEN and CLKEN bits in the USART_CR2 register,
- SCEN, HDSEL and IREN bits in the USART_CR3 register.*/
CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
__HAL_UART_ENABLE(huart); /* Enable the peripheral */
huart->ErrorCode = HAL_UART_ERROR_NONE;
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
调用MspInit-->修改状态忙-->配置寄存器-->清楚标志位
2.2 先理解HAL_UART_Receive函数
uint32_t tickstart = 0U;
if (huart->RxState == HAL_UART_STATE_READY) /* Chec

本文深入解析STM32串口配置流程,包括HAL库中串口初始化、数据接收与发送机制。重点阐述HAL_UART_Receive与HAL_UART_Receive_IT函数的区别,以及中断接收和直接接收的工作原理。

1万+

被折叠的 条评论
为什么被折叠?



