纠正原子STM32例程中IIC的一处错误

2019-10-16 07:34发布

最近做一个STM32项目时移植了原子STM32例程中的模拟IIC驱动程序,调试时发现错误经简单排查发现一处错误,先分享出来避免其他人遇到同样问题,也希望原子更正程序源码(因为我目前所有开发板都有这出错误)

原子源代码

首先看读数据的

1、椭圆框内有一个等待ACK应答  IF语句结束后又一个等待ACK应答  当定义器件大于AT24C16时 就会连续执行两个等待ACK造成 读数失败。
2、方框内 当器件小于等于AT24C16 执行IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   我觉得这个0XA0+((WriteAddr/256)<<1)完全没必要,我们来分析下  当器件小于等于AT24C16 时 地址范围是0-0xff 那么WriteAddr/256=0   0<<1=0 在加上0xa0还是0xa0 那么执行这个是什么作用的,而且这里是发送的器件地址,一般硬件确定了地址就确定了,及时想做地址可变的也不应该跟数据地址做关联,而是应该跟硬件上的A0 A1 A2 通过IO读取地址做关联,对此表示十分疑惑,所以 直接IIC_Send_Byte(0XA0); 可以了 ,
3、读字节
内同样有IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));  问题同2.

另外通过删除IF内的ACK后AT
24C512工作正常,再此也算帮原子测试AT24C512了。

更多内容回复后可查看
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。