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

HAL库串口空闲中断接收到一定数量就不进入中断了。

[复制链接]
fmyzzz 提问时间:2023-4-25 10:38 / 未解决

目前在搞一个zigbee的项目,设置模块的时候用的串口发送api命令然后串口空闲中断等待模块回复的信息,做完之后昨天进行了个测试,在循环中连续发送100次,等待回复100次,在每一次测试的时候都到43次的时候开始进不去中断了,根据命令算出大概是收到了1008字节,然后我重新开启空闲中断,开启状态是没问题的但还是不能进中断,也没有进串口错误回调。下面是代码部分求各位大佬帮忙看看,谢谢!!!

ide 是cubeide hal库版本是1.17.2 芯片是L4RCTx

下列代码是初始化和中断回调中调用的。

HAL_UART_AbortReceive(&huart1);

state = HAL_UARTEx_ReceiveToIdle_DMA(&huart1,frame.retbuf,0xFFFF);

printf("UART state = %d\r\n",state);

这是测试代码,XBEE_PowOnInit 中会返回本次通讯是否成功。

image.png

运行一百次之后,每次测试都是在第43次开始进不去中断了。

收藏 评论4 发布时间:2023-4-25 10:38

举报

4个回答
xmshao 回答时间:2023-4-25 11:27:51
如果你基于HAL库函数组织的代码,你要注意下UART接收中断里 当识别到DMA完成中断且是非循环模式时,它
会将当前DMA关闭掉。这点你要注意,它是按照它的演示逻辑来的。我们可能要具体调整下中断处理函数适合
我们的需求,你稍微研究下库函数代码,相信你会处理好。
fmyzzz 回答时间:2023-4-25 11:58:19

xmshao 发表于 2023-4-25 11:27
如果你基于HAL库函数组织的代码,你要注意下UART接收中断里 当识别到DMA完成中断且是非循环模式时,它
会将 ...

嗯,这个问题我注意到了,所以我把DMA中断关闭了。而且就算没关闭,我在回调函数里面重新调用了串口空闲DMA接收,应该也没问题

废鱼 回答时间:2023-4-26 10:13:17

楼主,您看一发生异常时,DMA中断数据大小,是不是因为数据接收不完整导致的。顺便看一下内存中的数据,是否有收到新的数据。

xmshao 回答时间:2023-5-9 09:42:43

fmyzzz 发表于 2023-4-25 11:58
嗯,这个问题我注意到了,所以我把DMA中断关闭了。而且就算没关闭,我在回调函数里面重新调用了串口 ...

[md]OK,

你那个43次有特色,好好研究下代码为什么到这个次数出问题。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版