STM32 HAL库串口回调函数配置失效(HAL

您所在的位置:网站首页 uart中断函数不触发 STM32 HAL库串口回调函数配置失效(HAL

STM32 HAL库串口回调函数配置失效(HAL

2023-09-20 10:11| 来源: 网络整理| 查看: 265

小编实际操作中,用HAL_UART_RxCpltCallback函数配置接收串口数据,在测试过程中用手碰了单片机引脚之后无法再接收到数据,终于找到了解决办法,就是自己使能接收中断和自己定义中断回调函数;

使能中断

    __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);                //空闲中断使能     __HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);                //接收中断使能

中断回调函数

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);     }

}

本程序包含自己定制的AT指令上图片

源码链接:https://github.com/NoSmallWhite/WL-open-projects

文件名:demo-adc-vet6-20200708-1732 自定义AT指令字取出任意字符串

二、更新记录1:

1、接收大量数据“ORE”位报故障,“ORE:过载错误 (Overrun error)  ”

 2、解决办法:添加串口故障回调函数,有故障就清零标志

/****************************************************************************************** *** 函数名称: HAL_UART_ErrorCallback *** 输入参数: 无 *** 返 回 值: 无 *** 说 明:故障回调-查看故障状态 *** 调度时间:无 *** 编者 时间 版本 *** XXXZ XXXX/XX/XX V0.1 ******************************************************************************************/ void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { if(huart->Instance == UART4) //判断串口错误回调函数,串口是否为IAP串口函数 { if(__HAL_UART_GET_FLAG(UART_IAP, UART_FLAG_ORE) != RESET) //串口过载错误,清零标志并且重新打开串口接收中断 { __HAL_UART_CLEAR_OREFLAG(UART_IAP); } __HAL_UART_ENABLE_IT(UART_IAP,UART_IT_RXNE); //接收中断使能,自己可以判断接收标志,第一种中断方式 __HAL_UART_CLEAR_FLAG(UART_IAP,UART_FLAG_RXNE); //清除接收标志 } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3