完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是用I2C和串口都用到了DMA,结果通道冲突了,然后我就加了互斥锁,且在串口或I2C外设使用DMA时就把所有用到这个DMA通道的外设都关闭了DMA功能,然后单独打开当前外设的DMA功能来使用。我是硬件I2C + DMA + 中断这么用的。
现在的问题是能用,串口和I2C都能用,就是用着用着会卡死,开了看门狗的,而且是不同任务的调用,且获取互斥锁是阻塞式的。我不知道是中断出问题了,还是因为频繁的切换DMA配置出问题了,因为每次调用都要更改DMA配置(内存地址、数据量、外设内存地址)。 |
|
相关推荐
2个回答
|
|
楼主我看了一下,串口2和I2C1是公用的,只能这样分时操作。建议选择其中一个用中断的方式操作吧。这样避免冲突。
|
|
|
|
出现卡死的问题可能是由于以下几个原因导致的:
1. DMA配置错误:确保每次更改DMA配置时,都正确设置了内存地址、数据量以及外设内存地址。检查你的代码,确保这些参数在每次调用时都被正确配置。 2. 中断问题:确保DMA传输完成后的中断处理函数中的代码正确。你可以检查中断处理函数中是否正确释放了互斥锁,以及是否进行了必要的错误处理。 3. 互斥锁问题:检查互斥锁的使用方式是否正确。在单独打开当前外设的DMA功能之前,确保已经成功获取了互斥锁,并在使用完之后释放了互斥锁。确保对互斥锁的获取和释放是在正确的位置进行的。 另外,你还可以尝试减少频繁切换DMA配置的次数。如果可能的话,尝试在一次函数调用中完成所有必要的DMA传输,以减少切换的次数。 最好的方法是通过调试和排除法来确定问题的具体原因。你可以使用调试器来检查程序在卡死时所处的位置,并验证和确认DMA传输和互斥锁的使用是否正确。可以通过逐步注释或添加调试输出来验证和定位问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1786 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1622 浏览 1 评论
1089 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
730 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1942浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
739浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
576浏览 3评论
598浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
560浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 15:22 , Processed in 1.095589 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号