
我的程序中使用 HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); 轮询接收外部WIFI模组发来的数据,当WIFI发来的数据量较大时,有很大机率出现这个函数就再也接收不到模组发来的数据了,采用JLINK Debug发现,当这个函数接收不到数据时,发现huart->RxState = 0x00000022(HAL_UART_STATE_BUSY_RX),如图所示: 1 ![]() 再Debug到串口中断程序中(void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)),发现是没有满足下图中的判断条件(nb_remaining_rx_data < huart->RxXferSize)): ![]() 其中,huart->RxXferSize 好像是 HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) 的Size参数,当这个Size越小,出现问题的概率越大。 在调试过程中,发现了解决这个问题的两个奇怪的办法: (a) 单片机GPIO-PC13外接了一个按键,当一直按着这个按键,且WIFI模组有数据发来时,HAL_UARTEx_ReceiveToIdle_DMA(...)这个函数又能正常接收数据了,按键松开,多测试一会,还会出现问题,但是仍然可以采用这个办法解决,按键电路很简单,电路图如下: 为避免与按键程序有关,我屏蔽掉按键初始化及对应的执行函数,仍然可以解决问题; (b)用手触摸RTC晶振输入/输出位置,也会解决这个问题,同按键解决办法一样,也是一次性的,把RTC对应的代码屏蔽掉,办法依然有效。 ![]() 请问, 1:有没有软件方法解决这个问题? 2:对于(a)和(b)奇怪的解决办法,从单片机内部原理有没有理论上的依据? 感谢您关注我提的问题,期待您的解答! |
STM32H7+SAI+DMA双缓冲配置失败.
利用stm32f412 的SPI 的DMA 模式读取外部ADC数据如何提高效率
FW_H7 V1.12.1-HAL库DMA双缓冲配置
stm32f746g-disco开发板的串口通讯连接方式
STM32G030K6Tx使用ADC+DMA进行6通道ADC采集,DMA传输错位问题。
求助:I2S通过DMA搬运后通过USB上传上位机,转为.wav文件后声音嘈杂,音质很差,基本听不出人声
单片机板跟上位机进行串口发收数据时,每次上位机下发指令,出现问题都是在第一条指令后,有时在单片机回发完数据后偷发0x00,怎么解?
STM32F405RGT6 ADC2+TIM4触发+DMA(DMA2_Stream2_CH1)+DMA中断会死机(取消中断后完全正常)
多DMA数据流问题
STM32L503 功耗请教
RTC相关代码屏蔽之后,仍然会出现问题,而且用手触摸RTC晶振脚仍然可以解决问题。按键也是一样的。