HAL库中串口中断开启

下面给出一个清晰的示例,帮助你理解这两个函数的实际应用:


方式一:直接使用底层中断宏(__HAL_UART_ENABLE_IT

这种方式更为基础灵活,需要你手动编写中断处理函数:

步骤一:初始化UART后启用RXNE中断

复制代码
// UART初始化之后开启RXNE中断
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);

// 开启NVIC中断(USART1)
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);

步骤二:实现USART中断处理函数,手动接收数据

复制代码
uint8_t received_byte;

void USART1_IRQHandler(void)
{
    if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE)) 
    {
        received_byte = (uint8_t)(huart1.Instance->DR & 0xFF);  // 读取数据
        // 你可以在这里处理 received_byte,例如存入缓冲区或标记标志位
    }
}

说明

这种方法适合于单字节灵活接收的场景,每当收到一个字节,就会进入中断。


方式二:使用HAL库函数HAL_UART_Receive_IT

这种方式更高级一些,适合于接收一组数据:

步骤一:启动中断接收指定长度的数据(如接收5字节)

复制代码
uint8_t dataRcvd[5];

HAL_UART_Receive_IT(&huart1, dataRcvd, 5); // 一次接收5个字节

步骤二:实现HAL库的回调函数(自动触发)

复制代码
// HAL_UART_Receive_IT接收完成自动调用该函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART1)
    {
        // 已经成功接收5个字节
        // 此时dataRcvd缓冲区中已经存放了收到的5个字节数据
        // 可以在这里处理数据
        
        // 若想继续接收下一次数据,需重新调用:
        HAL_UART_Receive_IT(&huart1, dataRcvd, 5);
    }
}

步骤三:实现USART中断函数(必须,调用HAL库IRQHandler)

复制代码
void USART1_IRQHandler(void)
{
    HAL_UART_IRQHandler(&huart1); // 必须调用,触发回调函数
}

说明

这种方法适合固定长度数据的接收,例如特定协议的数据包传输。


两种方式适用场景对比:

方法 使用场景 适用情况
__HAL_UART_ENABLE_IT (手动底层方式) 单字节实时处理,字节流灵活接收 实时性高,灵活度高,适合自定义协议
HAL_UART_Receive_IT (HAL封装方式) 接收固定长度数据(如数据帧、报文) 编程方便,处理批量数据更简单

你可以根据你的实际需求选择更合适的一种方式来应用中断接收功能。

相关推荐
sramdram9 小时前
高速低功耗stt-mram工业级存储方案
嵌入式硬件·mram·stt-mram·低功耗stt-mram
嘶哈哈哈11 小时前
雷迅 CAN Babel 新品测评:一个小巧的 CAN/UART 双功能 USB 调试适配器
单片机·嵌入式硬件
Zevalin爱灰灰12 小时前
模拟信号链电路——感应触摸电路
单片机·嵌入式硬件
测试专家12 小时前
PCI-1553B板卡在 Windows Server 2016 服务器安装流程详解
服务器·windows·单片机
国科安芯12 小时前
还是4位?ASC8T245S 与 ASC4T245S 的双向电平转换选型实战
单片机·嵌入式硬件·物联网·fpga开发·机器人·云计算
Freak嵌入式13 小时前
RP2040 内核电源调节器:软件可调电压 + 三种模式,低功耗设计的利器
人工智能·单片机·嵌入式硬件·机器人·开源
ACP广源盛1392462567314 小时前
YLB3118 存储桥接芯片完整机会点@ACP#联动曙光 8000
大数据·人工智能·分布式·单片机·嵌入式硬件
蝎蟹居14 小时前
GBT 4706.1-2024逐句解读系列(31) 第7.21.1条款:说明书怎么写符合标准要求
人工智能·单片机·嵌入式硬件·物联网·安全
hongmai66688814 小时前
乐鑫ESP32-C61-WROOM-1模组:Wi-Fi 6与蓝牙LE双模的RISC-V新选择
单片机·嵌入式硬件·risc-v
电气_空空14 小时前
基于 LabVIEW的数据采集与信号处理系统的设计
嵌入式硬件·毕业设计·信号处理·labview