基于STM32F405的硬件IIC+DMA操作分享

早就听说STM32的硬件IIC不好用,我个人接触到的很多项目中也都是用模拟IIC来实现对应的操作,但是最近接触到的一个项目中的OLED是IIC接口,当然原本也是用的模拟IIC来实现的刷屏操作,因此效率真的是惨不忍睹。于是就萌生了改用硬件IIC的想法。

在改用硬件IIC的时候确实领略到了STM32硬件IIC的难啃,实际上最主要就是以下一个问题:

使用硬件STM32硬件IIC经常会遇到IIC驱动死掉的情况

注意这里是IIC驱动死掉,调用发送函数会返回失败,CPU是正常运行的。抓波形可以发现一开始有正常的IIC波形,但是马上就没有了。此时STM32的硬件IIC处于busy状态,导致其放弃了后续的IIC操作。我尝试下来只能通过对IIC外设复位来解决。

在调试好IIC外设后发现IIC的DMA也不是直接就能使用。主要问题在于最后的STOP信号丢失,抓波形发现主机最后没有发送STOP信号,该问题在我调用DMA发送函数发送成功后强制控制IIC的寄存器使其发送一个STOP信号后即可解决。

由于调试时间有限并没有研究太深入,欢迎大家来讨论。若有错误的地方也希望大家进行指正。

下面附上基于STM32F405的硬件IIC与DMA操作例程:

Github
Gitee

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WKJay_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值