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

STM32F407串口问题

[复制链接]
我来给你松松土 提问时间:2023-8-30 16:57 / 未解决

使用DMA+IDLE HAL库方式接收串口不等长数据 接收到的所有数据均正常 但是收到15个字节的数据后 一执行清除IDLE标志位 (__HAL_UART_CLEAR_IDLEFLAG(&huart1); )就进入HardFault_Handler错误中断,但是收到<15个字节的数据都是正常的,我每次使用dma方式接收都是50个字节(HAL_UART_Receive_DMA(&huart1, (uint8_t *)&userUart.userUart1.ReciveBuff, 50);)

我查了些资料 通过R13寄存器里面存的地址找出来最后一条执行的程序 是__HAL_UART_CLEAR_IDLEFLAG(&huart1); 执行完这一条后就进入错误中断了

image.png

image.png
收藏 评论5 发布时间:2023-8-30 16:57

举报

5个回答
废鱼 回答时间:2023-8-31 09:53:42

理论上分析,可能是接收的数据长度超出导致,检查一下userUart.userUart1.ReciveBuff的定义,是不是大于50。

butterflyspring 回答时间:2023-8-30 19:38:38
__HAL_UART_CLEAR_IDLEFLAG(&huart1);      这一句不需要执行了呀,这个在IDLE的中断里库函数已经执行过了。


我来给你松松土 回答时间:2023-8-31 08:34:23

butterflyspring 发表于 2023-8-30 19:38
__HAL_UART_CLEAR_IDLEFLAG(&amp;huart1);      这一句不需要执行了呀,这个在IDLE的中断里库函数已经执行过了 ...

我把__HAL_UART_CLEAR_IDLEFLAG(&huart1);清除标志位去掉 还是不可以 接收13个字节正常 接收15个字节直接进入错误中断了

我来给你松松土 回答时间:2023-8-31 08:40:38

我来给你松松土 发表于 2023-8-31 08:34
我把__HAL_UART_CLEAR_IDLEFLAG(&amp;huart1);清除标志位去掉 还是不可以 接收13个字节正常 接收15个字节 ...

[md]我同时开启了六个串口的DMA 每一个DMA接收都是50个字节 我发现我六个串口每一个DMA接收是40的时候整个程序就正常了 正常跑了两边程序又这样进错误中断了 我再改小dma每次接收的字节也没用额

butterflyspring 回答时间:2023-8-31 09:43:19
建议调查问题时化繁为简,先保留一个串口试试。
另外,注意内存是否越界了。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版