微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI电源管理交流 > 公司将量产BQ27541/BQ27411的项目,急求C语言IIC程序,用STM32的单片机

公司将量产BQ27541/BQ27411的项目,急求C语言IIC程序,用STM32的单片机

时间:10-02 整理:3721RD 点击:

用单片机STM32F103ZET6做IIC通信,求例程

求问:BQ27541的IIC和400KHZ的24C02的IIC有什么不同,为什么我只能读写24C02,不能读写BQ27541

模拟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;
}

发送AA也无应答

电源管理那个程序搞定了吗  最近我也在搞  IIC有问题  能否指导下

你用io口模拟iic需要配置sclk为上啦输出,sda在写时为上拉输出,在读时为上拉输入。

底层的iic 读写byte和发送和接收响应是通用的,你需要根据bq27541的寄存器读写规范进行读写才能通信成功。

祝成功!

我是在外部用电阻上拉的。

请问BQ27541读写规范是哪部分,我是按照手册的时序写的,不过读出来的数据不正确

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top