STM32Fxx HAL库开发UART中断回调函数理解-中断回调函数流程-自己理解的

本文详细介绍了STM32HAL库中两种中断服务函数调用方式:直接在USART1_IRQHandler中编写功能和通过HAL_UART_RxCpltCallback间接调用。重点讲解了如何在各自的中断处理流程中实现所需功能。
摘要由CSDN通过智能技术生成

STM32HAL库中断服务函数调用过程有2种

第1种:可以直接在中断源对应的中断服务函数中编写我们想要的功能

具体是在void USART1_IRQHandler(void)函数写要执行的任务
在这里插入图片描述
正点原子是重新宏定义函数名,写法如下:
暂时忽略,等找到再贴图

第2种:可以间接调用HAL库的中断回调函数来实现我们想要的功能

具体是在void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)函数写要执行的任务

USARTx_IRQHandler()
                                                    //其实第1种就是在这里面写
 ┗━ HAL_UART_IRQHandler()
          ┗━ UART_Receive_IT()
                 {
                     if (--huart->RxXferCount == 0U)
                          {
                             /* Disable the UART Data Register not empty Interrupt */
                                __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);
                      .......
                      .......
                      HAL_UART_RxCpltCallback();    //第2中就是在这里面写
                       .......
                   }

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

还可以参考网友分享的《STM32HAL库中断服务函数调用过程》

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HAL库的串口中断回调函数可以通过以下方式实现: 1. 首先,在你的代码中引入相关的头文件: ```c #include "stm32fxxx_hal.h" ``` 2. 接下来,定义一个全局变量来保存接收到的数据: ```c #define MAX_DATA_LENGTH 100 uint8_t receivedData[MAX_DATA_LENGTH]; uint8_t dataLength = 0; ``` 3. 然后,实现串口中断回调函数。在这个函数中,你可以读取接收到的数据并进行处理。以下是一个示例: ```c void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart->Instance == USARTx) { // 读取接收到的数据 receivedData[dataLength++] = USARTx->DR; // 如果接收到的数据达到最大长度,则进行处理 if (dataLength >= MAX_DATA_LENGTH) { // 处理接收到的数据,例如打印或者处理其他逻辑 // ... // 清空接收缓冲区 dataLength = 0; memset(receivedData, 0, sizeof(receivedData)); } // 继续接收下一个字节 HAL_UART_Receive_IT(huart, &receivedData[dataLength], 1); } } ``` 在这个示例中,我们假设使用的是USARTx串口。在回调函数中,我们首先将接收到的数据存储到全局数组 `receivedData` 中,并递增 `dataLength` 变量。然后,我们检查是否达到了最大数据长度,如果是,则进行数据处理,并清空接收缓冲区。最后,我们通过调用 `HAL_UART_Receive_IT` 函数来继续接收下一个字节。 请注意,上述代码仅为示例,具体的实现可能会根据你的应用场景和需求而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ltqshs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值