This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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



用单片机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;
    }

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

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

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

    祝成功!

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

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

  • 请问大神有没有搞定~ 同求stm32  BQ27541程序