转到此文件的文档。
UART HAL驱动模块
UART HAL驱动模块提供了一套完整的API,可用于使用UART外设初始化和控制UART。
UART特性
- 全双工异步通信
- 可编程波特率
- 可配置数据位长度(8或9位)
- 可配置停止位(0.5、1、1.5或2位)
- 可配置奇偶校验
- 可配置硬件流控制(RTS/CTS)
- 可配置多处理器模式
- 可配置LIN模式
- 可配置DMA传输
UART初始化
要使用UART外设,需要按以下步骤初始化:
- 声明UART_HandleTypeDef句柄结构
- 调用HAL_UART_Init()初始化UART外设
- 使用HAL_UART_Transmit()或HAL_UART_Receive()进行数据传输
UART通信
UART支持以下通信模式:
- 阻塞模式:使用HAL_UART_Transmit()和HAL_UART_Receive()
- 中断模式:使用HAL_UART_Transmit_IT()和HAL_UART_Receive_IT()
- DMA模式:使用HAL_UART_Transmit_DMA()和HAL_UART_Receive_DMA()
UART回调函数
UART模块提供以下回调函数:
- HAL_UART_TxCpltCallback() - 发送完成回调
- HAL_UART_RxCpltCallback() - 接收完成回调
- HAL_UART_ErrorCallback() - 错误回调
UART错误处理
UART模块可以检测以下错误:
- 奇偶校验错误
- 帧错误
- 噪声错误
- 溢出错误
- 超时错误
发生错误时,会调用HAL_UART_ErrorCallback()回调函数。
使用示例
示例1:阻塞模式发送
UART_HandleTypeDef huart2;
uint8_t data[] = "Hello World!";
// 初始化UART
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
// 初始化错误
}
// 发送数据
HAL_UART_Transmit(&huart2, data, sizeof(data), 1000);
示例2:中断模式接收
#define RXBUFFERSIZE 10
uint8_t rxBuffer[RXBUFFERSIZE];
// 在中断模式下接收数据
HAL_UART_Receive_IT(&huart2, rxBuffer, RXBUFFERSIZE);
// 接收完成回调
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
// 处理接收到的数据
}
示例3:DMA模式接收
#define RXBUFFERSIZE 100
uint8_t rxBuffer[RXBUFFERSIZE];
// 在DMA模式下接收数据
HAL_UART_Receive_DMA(&huart2, rxBuffer, RXBUFFERSIZE);
// 暂停DMA传输
HAL_UART_DMAPause(&huart2);
// 恢复DMA传输
HAL_UART_DMAResume(&huart2);
// 停止DMA传输
HAL_UART_DMAStop(&huart2);
配置选项
可以通过以下方式配置UART:
硬件流控制
// 使能CTS硬件流控制
__HAL_UART_HWCONTROL_CTS_ENABLE(&huart2);
// 禁用CTS硬件流控制
__HAL_UART_HWCONTROL_CTS_DISABLE(&huart2);
// 使能RTS硬件流控制
__HAL_UART_HWCONTROL_RTS_ENABLE(&huart2);
// 禁用RTS硬件流控制
__HAL_UART_HWCONTROL_RTS_DISABLE(&huart2);
多处理器模式
// 进入静音模式
HAL_MultiProcessor_EnterMuteMode(&huart2);
// 使能静音模式
HAL_MultiProcessor_EnableMuteMode(&huart2);
// 禁用静音模式
HAL_MultiProcessor_DisableMuteMode(&huart2);
LIN模式
// 初始化LIN模式
HAL_LIN_Init(&huart2, UART_LINBREAKDETECTLENGTH_10B);
// 发送LIN间隔符
HAL_LIN_SendBreak(&huart2);
常见问题
UART不工作
检查以下内容:
- 确认UART时钟已使能
- 确认GPIO配置正确(TX为复用输出,RX为输入)
- 确认波特率匹配
- 确认数据位、停止位和奇偶校验设置匹配
接收数据错误
可能的原因:
发送失败
可能的原因:
- UART未使能
- 发送缓冲区为空
- 超时设置过短
- 硬件故障
API参考
有关完整的API列表,请参阅UART HAL头文件。
修订历史
- v1.0.0 - 初始版本
- v1.1.0 - 添加DMA支持
- v1.2.0 - 添加多处理器模式
- v1.3.0 - 添加LIN模式支持
注意事项
- UART外设必须在系统时钟使能后使用
- GPIO引脚必须正确配置为复用功能
- 使用DMA时,缓冲区必须保证对齐
- 中断模式下,必须使能对应中断