
STM32F103使用HALL库接收多串口(3个)数据时,当数据接收比较频繁时会引起HAL_UART_RxCpltCallback多次被调用,当中断结束退出时触发Hardfault错误,此时R14为0xFFFFFFF1。串口接收回调函数如下,接收多串口数据并存入多缓冲区 ///////////////////////////////// UART ////////////////////////////////// void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART1){ ST_UART1.RecBuf[ST_UART1.WritePointer]=UART1_RecData[0]; ST_UART1.WritePointer++; if(ST_UART1.WritePointer == BUFERLENGTH){ ST_UART1.WritePointer=0; } if(HAL_UART_Receive_IT(&huart1, UART1_RecData, 1)==HAL_BUSY){ UART1_RestartRecIT=1; } } if(huart->Instance == USART2){ ST_UART2.RecBuf[ST_UART2.WritePointer]=UART2_RecData[0]; ST_UART2.WritePointer++; if(ST_UART2.WritePointer == BUFERLENGTH){ ST_UART2.WritePointer=0; } if(HAL_UART_Receive_IT(&huart2, UART2_RecData, 1)==HAL_BUSY){ UART2_RestartRecIT=1; } } if(huart->Instance == USART3){ ST_UART3.RecBuf[ST_UART3.WritePointer]=UART3_RecData[0]; ST_UART3.WritePointer++; if(ST_UART3.WritePointer == BUFERLENGTH){ ST_UART3.WritePointer=0; } if(HAL_UART_Receive_IT(&huart3, UART3_RecData, 1)==HAL_BUSY){ UART3_RestartRecIT=1; } } } 按照正常集成库的设计,各串口都有独立的串口中断响应函数,所以不会存在该问题。但是HAL库回调函数的处理机制会导致不同串口接收时重复调用。这个问题怎么解决?HAL_UART_RxCpltCallback里边如何正确的处理接收才能避免该问题? |
换USART+DMA方式吧 |
STM32L433VCT6 LCD复用引脚如何分配?(同一个引脚同一个复用功能里还有三类引脚)
串口DMA + 空闲中断收发 ?
如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据,需要相关例程,感谢各位大佬拯救一下我啊!????
ism330dhcxtr的I2c没有应答
STM32L433 单片机在串口配置为IRDA模式后,IRDA是否可以在STOP Mode1下唤醒
两个TIM调用HAL_TIM_PeriodElapsedCallback发生冲突
为何Tim2自动装载定时的首次中断时间总是设定时间的2倍?
stm32f103的uac模式对usb接收的数据实时处理
L9663用法
STM32H5的I3C模块,target rx和tx时,硬件都存在bug