hal库HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)使用例子
时间: 2025-06-29 14:18:34 浏览: 23
### 关于 `HAL_UART_Receive_IT` 函数的使用示例
#### 初始化配置
为了正确设置UART中断接收功能,需先完成必要的初始化工作。这包括调用特定接口函数来设定硬件参数并启用相应的中断服务。
```c
// USART2 Initialization Function
static void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
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;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
Error_Handler();
}
}
```
接着要确保NVIC(嵌套向量中断控制器)被适当配置以便处理来自USART2的中断请求:
```c
/* Enable and set USART2 Interrupt */
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn);
```
以上代码片段展示了如何通过调用`MX_USART2_UART_Init()`来进行基本的串口初始化,并设置了优先级以及启用了USART2的中断[^3]。
#### 开始异步接收数据
一旦完成了上述准备工作,则可以在应用程序的主要循环之前启动基于中断的数据接收过程。这里展示了一个简单的例子,其中定义了一个缓冲区用于存储接收到的信息,并指定了每次期望接收的最大字节数为1:
```c
#define RX_BUFFER_SIZE 64
uint8_t rx_buffer[RX_BUFFER_SIZE];
int main(void){
/* ...其他初始化... */
// 启动非阻塞模式下的单字符接收操作
HAL_UART_Receive_IT(&huart2, (uint8_t*)rx_buffer, 1);
while (1){
// 主程序逻辑...
}
}
```
此部分说明了怎样利用`HAL_UART_Receive_IT()`方法开始监听传入的消息流,同时指定目标地址作为回调时传递给用户的实际位置。
#### 处理接收完成事件
当一帧完整的数据包到达后会触发一次ISR(Interrupt Service Routine),此时应实现对应的回调函数以进一步解析这些新获取到的内容。下面给出了一种可能的方式去捕获该时刻发生的动作:
```c
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART2){
// 当前仅考虑从USART2来的消息
// 执行任何所需的任务,比如回显已接受的数据
HAL_UART_Transmit(&huart2, rx_buffer, 1, HAL_MAX_DELAY);
// 继续等待下一个字符的到来
HAL_UART_Receive_IT(&huart2, (uint8_t*)rx_buffer, 1);
}
}
```
这段代码解释了每当成功接收到一个字符之后应当采取哪些措施;特别是重新激活相同的接收流程使得系统能够持续响应后续到来的新输入[^2]。
阅读全文
相关推荐



















