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

关于STM32G474 IIC DMA使用的疑问

[复制链接]
仲裁者 提问时间:2021-11-18 09:20 / 未解决

我最近使用IIC来读写EEPROM,每给一次写命令,会想EEPROM中存1000个左右的16位参数,程序如下:

1.PNG

图1

2.PNG

图2

3.PNG

图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 评论0 发布时间:2021-11-18 09:20

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版