[STM32L4] STM32L432 int64 计算会导致 DMA 传输中断??

[复制链接]
625|16
xiaofei558008 发表于 2025-11-27 11:27 | 显示全部楼层 |阅读模式
事情这样:

ADC regular 模式转换4个通道,DMA 搬运到RAM,DMA circle 模式下,连续传输 4通道 x 64 次;开启 DMA 的 half_transmit 中断和 complete 中断;
两个中断的数据处理函数是一个,内部含有64位加减乘除;
另外main 函数死循环里  USART1 + DMA一直往外发数据,每隔1ms 执行一次;

每当64位数据开始运算的时候 USART的 DMA 传输就会中断,当然这个时候是在 ADC 的 DMA中断里执行;
。。。64位运算导致超时了?

豌豆爹 发表于 2025-11-27 15:13 | 显示全部楼层
64位运算可能比较耗时,导致ADC的DMA中断处理函数执行时间过长,从而阻塞了其他中断的处理。在STM32中,中断处理是优先级驱动的,如果某个中断处理时间过长,可能会影响其他中断的响应。
classroom 发表于 2025-11-27 16:13 | 显示全部楼层
MA传输和中断处理可能存在资源竞争,比如内存总线或DMA控制器的冲突。但通常DMA传输是独立于CPU的,所以可能不是直接冲突,而是中断处理占用了太多时间,导致USART的DMA传输无法及时完成或触发中断。
cr315 发表于 2025-11-27 17:14 | 显示全部楼层
检查定时器是否被64位运算延迟。
duo点 发表于 2025-11-27 18:14 | 显示全部楼层
检查ADC的DMA中断和USART的DMA中断的优先级。如果ADC的中断优先级更高,那么当ADC中断处理时间过长时,可能会延迟USART的中断处理。
elephant00 发表于 2025-11-27 15:15 | 显示全部楼层
64位运算在STM32L432上可能效率较低,尤其是除法操作,可能导致中断处理时间过长
flycamelaaa 发表于 2025-11-27 19:16 | 显示全部楼层
测量中断处理时间,如果超过系统允许的中断延迟,则需要优化代码。
jcky001 发表于 2025-11-27 20:16 | 显示全部楼层
检查64位运算的代码,看是否有优化空间。例如,使用移位代替乘除,或者使用硬件加速。或者将运算拆分成更小的部分,减少每次中断的处理量。
onlycook 发表于 2025-11-27 21:17 | 显示全部楼层
如果USART的DMA传输需要更高的实时性,可以调整中断优先级,确保其优先级高于ADC的DMA中断,这样即使ADC中断处理时间较长,USART的中断仍能及时处理。
powerantone 发表于 2025-11-27 20:18 | 显示全部楼层
用DMA双缓冲或乒乓缓冲
probedog 发表于 2025-11-27 15:58 | 显示全部楼层
将64位运算移到主循环
stormwind123 发表于 2025-11-27 16:46 | 显示全部楼层
检查USART的DMA配置是否正确,比如传输大小、地址是否正确,是否有错误导致传输中断。
七毛钱 发表于 2025-11-27 19:36 | 显示全部楼层
检查系统时钟和定时器有没有因为64位运算而导致的时钟漂移或定时器中断延迟
内政奇才 发表于 2025-11-27 15:38 | 显示全部楼层
中断处理时间过长?
海滨消消 发表于 2025-11-27 21:48 | 显示全部楼层
中断优先级配置不当?
豌豆爹 发表于 2025-11-27 21:16 | 显示全部楼层
移出运算到主循环,在ADC DMA中断中仅做数据搬运和标志设置,将64位运算移至主循环通过标志触发。
麻花油条 发表于 2025-11-27 22:56 | 显示全部楼层
在CubeMX中为USART DMA分配更高优先级
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

1000

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部
0