用单片机STM32F103ZET6做IIC通信,求例程
zhoucan bi:
求问:BQ27541的IIC和400KHZ的24C02的IIC有什么不同,为什么我只能读写24C02,不能读写BQ27541
zhoucan bi:
模拟IIC
void IIC27541_Start1(void){ SDA_OUT(); //sdaÏßÊä³ö IIC_SDA=1; IIC_SCL=1; delay_us(5); IIC_SDA=0;//START:when CLK is high,DATA change form high to low delay_us(5); IIC_SCL=0;//ǯסI2C×ÜÏߣ¬×¼±¸·¢ËÍ»ò½ÓÊÕÊý¾Ý delay_us(5);
} //²úÉúIICÍ£Ö¹ÐźÅvoid IIC27541_Stop1(void){ SDA_OUT();//sdaÏßÊä³ö IIC_SCL=0; IIC_SDA=0;//STOP:when CLK is high DATA change form low to high delay_us(5); IIC_SCL=1; delay_us(5); IIC_SDA=1;//·¢ËÍI2C×ÜÏß½áÊøÐźŠdelay_us(66); }
u8 IIC27541_Wait_Ack1(void){ u16 ucErrTime=0; SDA_IN(); //SDAÉèÖÃΪÊäÈë IIC_SDA=1;delay_us(1); IIC_SCL=1;delay_us(1); while(READ_SDA) { ucErrTime++; if(ucErrTime>5000) { IIC_Stop(); return 1; } } IIC_SCL=0;//ʱÖÓÊä³ö0 return 0; }
void IIC27541_Send_Byte1(u8 txd){ u8 t; SDA_OUT(); IIC_SCL=0;//ÀµÍʱÖÓ¿ªÊ¼Êý¾Ý´«Êä for(t=0;t<8;t++) { IIC_SDA=(txd&0x80)>>7; txd<<=1; delay_us(5); IIC_SCL=1; delay_us(5); IIC_SCL=0; delay_us(5); } } //¶Á1¸ö×Ö½Ú£¬ack=1ʱ£¬·¢ËÍACK£¬ack=0£¬·¢ËÍnACK u8 IIC27541_Read_Byte1(unsigned char ack){ unsigned char i,receive=0; SDA_IN();//SDAÉèÖÃΪÊäÈë for(i=0;i<8;i++ ) { IIC_SCL=0; delay_us(2); IIC_SCL=1; receive<<=1; if(READ_SDA)receive++; delay_us(1); } if (!ack) IIC_NAck();//·¢ËÍnACK else IIC_Ack(); //·¢ËÍACK return receive;}
zhoucan bi:
发送AA也无应答
Kun Tan1:
回复 zhoucan bi:
电源管理那个程序搞定了吗 最近我也在搞 IIC有问题 能否指导下
yuchuan xing:
你用io口模拟iic需要配置sclk为上啦输出,sda在写时为上拉输出,在读时为上拉输入。
底层的iic 读写byte和发送和接收响应是通用的,你需要根据bq27541的寄存器读写规范进行读写才能通信成功。
祝成功!
Kun Tan1:
回复 yuchuan xing:
我是在外部用电阻上拉的。
请问BQ27541读写规范是哪部分,我是按照手册的时序写的,不过读出来的数据不正确
Bo Yuan3:
回复 Kun Tan1:
请问大神有没有搞定~ 同求stm32 BQ27541程序