最近做一个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后AT24C512工作正常,再此也算帮原子测试AT24C512了。
更多内容回复后可查看
怎么我论坛上下载的还是没有修改的
一周热门 更多>