完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我最近使用IIC来读写EEPROM,每给一次写命令,会想EEPROM中存1000个左右的16位参数,程序如下:
图1 图2 图3 先简单说一下程序的执行流程,图1和图2两部分程序是连着的,在同一个写函数中,该函数每2ms执行一次,一次执行两个DMA写函数HAL_I2C_Master_Transmit_DMA(),I2C_BUFFERSIZE大小是4,DMA长度配置的是byte,用的是circular模式。 图3中是IIC中断服务函数,周期性的初始化IIC和DMA通道。 我的问题是: 我不停的给写命令(每次写完1000个参数后接着手动给下一次写命令),偶发(不是每次写1000参数都会碰到)在写某一个参数时会写失败。 我通过仿真器看了一下,发现是在第二次HAL_I2C_Master_Transmit_DMA处失败,进入到该函数发现是HAL_DMA_Start_IT返回的状态不正确,再进入HAL_DMA_Start_IT发现是IIC的发送DMA处于忙状态。 我不懂为什么是忙的状态,因为每次IIC传送完毕,我都会abortDMA,应该在执行完第一个HAL_I2C_Master_Transmit_DMA后DMA的状态会被初始化为ready才对啊,没搞懂DMA的执行流程,再加上这个问题不是每次都能出现,就更迷惑了,麻烦各位大神帮我看看,谢谢了 |
|
相关推荐
1个回答
|
|
根据你提供的信息,关于你使用STM32G474的IIC DMA的疑问,我试着给你提供一些解答:
1. 在你的代码中,你使用了DMA进行IIC读写操作,通过配置循环模式以连续进行读写。这是一个常见的用法,可以提高效率和减少CPU的负担。 2. 你的问题描述中提到,在连续写入大约1000个参数时,偶尔会出现写入某个参数时发生错误。这是一个比较复杂的问题,可能与硬件、软件或者电路连接有关。建议你检查以下几个方面: - 确保你的IIC总线连接正确,并且没有短路或者断开的问题。可以使用示波器或者逻辑分析仪检查IIC总线的信号波形。 - 检查电源供应稳定,并且IIC总线的电压符合设备的规格要求。电压不稳定可能会导致通讯错误。 - 检查你的DMA配置是否正确。确保DMA的长度设置为正确的字节数,并且循环模式开启。 - 检查你的写入操作是否正确。可以在写入时添加一些错误处理机制,比如校验机制,来判断是否发生了错误。 3. 另外,你提到在IIC中断服务函数中进行了IIC和DMA通道的周期性初始化。这个操作是否必要,取决于你的具体应用。在大部分情况下,初始化操作只需要在启动时进行一次即可,不需要在每次写入操作后都进行初始化。 希望以上的解答对你有帮助。如果问题仍然存在,建议你在ST社区或者相关的论坛上寻求更多的帮助和经验分享。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1659 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1571 浏览 1 评论
998 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
695 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1617 浏览 2 评论
1878浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
664浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
530浏览 3评论
548浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
517浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 17:28 , Processed in 0.943739 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号