本帖最后由 z755924843 于 2014-1-3 13:32 编辑
第一次使用IIC ,看网上都说32的硬件IIC 有bug所以使用软件模拟IIC,STM32 作为主机,atmega8作为从机,主机模拟的程序是移植的原子的程序,
写操作没有问题,atmega8 都能接到正确的数据,但是读操作压根就读不到数据偶尔可以读到数据也是错误的。
下面是我的程序,希望坛子里的大神们给点思路。小弟在此谢过
void IIC_WriteOneByte(u8 val)
{
IIC_Start();
IIC_Send_Byte(0x56<<1); //发送从机地址0X56,写数据
IIC_Wait_Ack();
IIC_Send_Byte(0x81); //发送内部地址
IIC_Wait_Ack();
IIC_Send_Byte(val); //发送字节
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(10);
}
写函数没有问题,有问题的是下面读数据的函数。
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
u8 i;
IIC_Start();
IIC_Send_Byte(0x56<<1); //发送器件地址0XA0,写数据
IIC_Wait_Ack();
IIC_Send_Byte(0x55); //发送低地址
IIC_Wait_Ack();
delay_us(10);
IIC_Start();
IIC_Send_Byte((0x56<<1)+1); //进入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0); //但是读不到正确数
IIC_Stop();//产生一个停止条件
return temp;
}
能读到数据但是不正确。有没有人做过帮帮忙,看一下。
刚刚调试了一下发现在用在读m8的时候 m8已经把数据放入到TWDR中了 可是stm32 这边接收到却是全0
|