纠正原子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了。

更多内容回复后可查看
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
Pro_Xiao
1楼-- · 2019-10-17 00:39
"当器件小于等于AT24C16 时 地址范围是0-0xff"这句怎么理解的?小于等于AT24C16时候寻址空间为0~2047啊,地址范围怎么是0~0xff的?
zzsj1990
2楼-- · 2019-10-17 02:05
 精彩回答 2  元偷偷看……
zzsj1990
3楼-- · 2019-10-17 02:50
请教你一个问题。

IIC_Send_Byte(ReadAddr%256);   //发送低地址


为什么发送低地址,要用求余啊!!!想不明白。

能给简单说一下吗,谢谢。

641573672
4楼-- · 2019-10-17 07:23
好。。。。。。
空心杯
5楼-- · 2019-10-17 07:37
zzsj1990 发表于 2016-8-21 16:35
请教你一个问题。

IIC_Send_Byte(ReadAddr%256);   //发送低地址

2的8次方正好是256,而低8位最大只能有255,所以对256取余就等于只取第八位,相当于
Addr&0x0f
mjwang
6楼-- · 2019-10-17 09:22

一周热门 更多>