因工程需要,需要将stm32f103上的模拟IIC移植到stm32f415上,对比了下不同,发现只有主频提高了,别的都一样。可移植后读数一直不正确。
第一次调试这种模拟通信电路,于是将其放在while循环里,观看其数字波形。通过原始直接的读数方法判断通信过程中的电平变化。
经比对发现写字节时波形和延时正常,但读数时总会出现ff;开始用的原子哥的程序,然后找了个同事用过的对比,发现在读数据时
u8 IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;
SDA_IN();//SDA设置为输入
for(i=0;i<8;i++ )
{
IIC_SCL0;
delay_us(2);
IIC_SCL1;
receive<<=1;
delay_us(2);
if(READ_SDA)receive++;
delay_us(1);
}
// if (!ack)
// IIC_NAck();//发送nACK
// else
// IIC_Ack(); //发送ACK
return receive;
}
在if(READ_SDA)receive++; 前应加入红色延时函数,就是当始终稳定一下在读数;
一个小小的问题可能就会将项目时间推后,如同本次的延时,细节很重要。感谢网上贡献资源的大侠们~