请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L562,DMA+空闲帧,串口接收

[复制链接]
shaomingya 提问时间:2022-10-24 11:43 / 未解决
我的程序中使用  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

1


再Debug到串口中断程序中(void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)),发现是没有满足下图中的判断条件(nb_remaining_rx_data < huart->RxXferSize)):


2.png

其中,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对应的代码屏蔽掉,办法依然有效。
    3-4.png

请问,
1:有没有软件方法解决这个问题?
2:对于(a)和(b)奇怪的解决办法,从单片机内部原理有没有理论上的依据?


感谢您关注我提的问题,期待您的解答!  



收藏 评论4 发布时间:2022-10-24 11:43

举报

4个回答
butterflyspring 回答时间:2022-10-25 15:51:18
你的应用里是不是还要其他中断? 你的手摸上RTC晶振,会导致RTC停止,所以RTC的中断就不会产生了。 可以停止其他中断或功能测试一下。
shaomingya 回答时间:2022-10-25 16:14:17
butterflyspring 发表于 2022-10-25 15:51
你的应用里是不是还要其他中断? 你的手摸上RTC晶振,会导致RTC停止,所以RTC的中断就不会产生了。 可以停 ...

RTC相关代码屏蔽之后,仍然会出现问题,而且用手触摸RTC晶振脚仍然可以解决问题。按键也是一样的。
butterflyspring 回答时间:2022-10-26 14:39:44
简单点,仅仅跑串口功能,看看会不会有问题。 如果没问题再考虑调整架构。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版