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

小编实际操作中,用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);											//清除接收标志
		
	}

}


  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值