[STM32F4] STM32 HAL库串口回调函数配置失效

[复制链接]
893|17
 楼主| yutingwei 发表于 2022-11-17 13:59 | 显示全部楼层 |阅读模式
STM32 HAL库串口回调函数配置失效(HAL_UART_RxCpltCallback)小编实际操作中,用HAL_UART_RxCpltCallback函数配置接收串口数据,在测试过程中用手碰了单片机引脚之后无法再接收到数据,终于找到了解决办法,就是自己使能接收中断和自己定义中断回调函数;
使能中断
    __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);                //空闲中断使能    __HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);                //接收中断使能

 楼主| yutingwei 发表于 2022-11-17 14:04 | 显示全部楼层
中断回调函数

void user_uart1IT_ReceiveCallback(void)
{
    static uint8_t* pBuff    =    uart1_data.uart1_rxbuff;
    static uint8_t size_cnt=0;
    uint8_t receive_dat;
   
    if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET)        //uart rx flag
    {
        receive_dat = (uint16_t) READ_REG(huart1.Instance->DR);
        *(pBuff++) = receive_dat;
        size_cnt++;
        __HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_RXNE);
    }
   
    if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) != RESET)        //uart idle flag
    {
        uart1_state.bits.interrupt_idle = ON;                                            //set flag
        uart1_data.uart1_count = size_cnt;
        receive_dat = (uint16_t) READ_REG(huart1.Instance->DR);        //clear reg
        size_cnt=0;
        pBuff    =    uart1_data.uart1_rxbuff;
        __HAL_UART_CLEAR_IDLEFLAG(&huart1);
    }

}
 楼主| yutingwei 发表于 2022-11-17 14:06 | 显示全部楼层
本程序包含自己定制的AT指令上图片
352816375cf7897d83.png
 楼主| yutingwei 发表于 2022-11-17 14:10 | 显示全部楼层
源码链接:https://github.com/NoSmallWhite/WL-open-projects

文件名:demo-adc-vet6-20200708-1732 自定义AT指令字取出任意字符串
 楼主| yutingwei 发表于 2022-11-17 14:12 | 显示全部楼层
接收大量数据“ORE”位报故障,“ORE:过载错误 (Overrun error)  ”
504746375d0b650021.png
 楼主| yutingwei 发表于 2022-11-17 14:12 | 显示全部楼层
解决办法:添加串口故障回调函数,有故障就清零标志
 楼主| yutingwei 发表于 2022-11-17 14:14 | 显示全部楼层
  1. /******************************************************************************************
  2. *** 函数名称: HAL_UART_ErrorCallback
  3. *** 输入参数: 无
  4. *** 返 回 值: 无
  5. *** 说    明:故障回调-查看故障状态
  6. *** 调度时间:无
  7. ***        编者                                                                                时间                                                                                版本
  8. ***        XXXZ                                                                                XXXX/XX/XX                                                        V0.1
  9. ******************************************************************************************/
  10. void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)  
  11. {
  12.         if(huart->Instance == UART4)                                                                                                                                                                        //判断串口错误回调函数,串口是否为IAP串口函数
  13.         {
  14.                 if(__HAL_UART_GET_FLAG(UART_IAP, UART_FLAG_ORE) != RESET)                                                //串口过载错误,清零标志并且重新打开串口接收中断
  15.                 {
  16.                         __HAL_UART_CLEAR_OREFLAG(UART_IAP);
  17.                 }
  18.                 __HAL_UART_ENABLE_IT(UART_IAP,UART_IT_RXNE);                                                                                                //接收中断使能,自己可以判断接收标志,第一种中断方式
  19.                 __HAL_UART_CLEAR_FLAG(UART_IAP,UART_FLAG_RXNE);                                                                                        //清除接收标志
  20.                
  21.         }
  22. }

 楼主| yutingwei 发表于 2022-11-17 14:15 | 显示全部楼层
OKAKAKO 发表于 2024-6-25 15:44 | 显示全部楼层
有可能是碰触静电导致内部出问题了
帛灿灿 发表于 2024-12-1 07:11 | 显示全部楼层

JUnit(用于 Java)、SUnit(用于 Smalltalk)和 CppUnit(用于 C++)等框架提供了丰富的功能集
Bblythe 发表于 2024-12-1 08:14 | 显示全部楼层

通过输入和输出电流环“逃逸”到外面环境中
周半梅 发表于 2024-12-1 10:10 | 显示全部楼层

一种了解状态变化的简单方法
Pulitzer 发表于 2024-12-1 11:13 | 显示全部楼层

输入环路通过近似直流的电流对输入电容充电
童雨竹 发表于 2024-12-1 13:09 | 显示全部楼层

待向GPIO(通用I/O端口)的输入从0变为1时,程序可以一定的间隔来检查GPIO的状态
Wordsworth 发表于 2024-12-1 14:12 | 显示全部楼层

接收到的RF(射频)能量越大
Clyde011 发表于 2024-12-1 15:15 | 显示全部楼层

错误的比较大的Ⅵ乘积结果
公羊子丹 发表于 2024-12-1 16:08 | 显示全部楼层

定时器输出引脚的设定
万图 发表于 2024-12-1 17:11 | 显示全部楼层

关系到它们的频率响应
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

514

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部