HAL_UART_RxCpltCallback()使用实例
时间: 2023-12-12 09:05:21 浏览: 466
call back function 示例程序
HAL_UART_RxCpltCallback()是一个回调函数,用于当UART接收到数据后调用。该函数是由HAL库提供的,在使用HAL库进行STM32开发时可以直接调用。下面是一个使用HAL_UART_RxCpltCallback()的示例代码:
```c
/* 定义USART_HandleTypeDef */
USART_HandleTypeDef huart;
/* 配置UART */
void UART_Config(void)
{
/* 初始化USART_HandleTypeDef */
huart.Instance = USART1;
huart.Init.BaudRate = 115200;
huart.Init.WordLength = UART_WORDLENGTH_8B;
huart.Init.StopBits = UART_STOPBITS_1;
huart.Init.Parity = UART_PARITY_NONE;
huart.Init.Mode = UART_MODE_TX_RX;
huart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart);
/* 使UART接收中断开启 */
__HAL_UART_ENABLE_IT(&huart, UART_IT_RXNE);
}
/* 定义UART接收数据缓冲区 */
uint8_t UART_RxBuffer[10];
/* 定义UART接收中断标志 */
volatile uint8_t UART_RxFlag = 0;
/* UART接收完成回调函数 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* 判断是否是当前配置的UART */
if (huart->Instance == USART1)
{
/* 将接收到的数据存入缓冲区 */
UART_RxBuffer[0] = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF);
/* 设置接收标志 */
UART_RxFlag = 1;
}
}
/* 主函数 */
int main(void)
{
/* 配置UART */
UART_Config();
/* 循环接收数据 */
while (1)
{
/* 判断是否接收到数据 */
if (UART_RxFlag == 1)
{
/* 处理接收到的数据 */
// ......
/* 清除接收标志 */
UART_RxFlag = 0;
}
}
}
```
在以上代码中,我们首先在UART配置函数中开启了UART接收中断,并定义了一个接收数据的缓冲区和接收中断标志。当UART接收到数据时,HAL库会自动调用回调函数`HAL_UART_RxCpltCallback()`,并将`USART_HandleTypeDef`结构体指针作为参数传入函数。我们可以在回调函数中判断是否是当前配置的UART,然后将接收数据存入缓冲区并设置接收标志,在主函数中处理接收到的数据并清除接收标志。
阅读全文