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.

bq24195设置寄存器问题

Other Parts Discussed in Thread: BQ24195

我在项目中用到了BQ24195,通过STM32单片机的I2C读写寄存器,现在发现我可以正常的读寄存器的值,但我如果设置寄存器时,设置相关寄存器后读取的话显示是0,过一段时间后显示为默认值,无论CE脚设置是高电平或低电平。

  • 亲;你是如何设置寄存器的?

  • 你好!

    我的部分代码如下:

    CE_POWER = 0;
    delay_ms(2000);

    slave_addr = 0x6B;reg_addr = 0x1;data_addr = 0x2b;

    i2c_write_sreg(slave_addr,reg_addr,data_addr);
    delay_ms(500);

    reg_data = i2c_read_sreg(slave_addr, reg_addr) ;printf("0x%02x ",reg_data);
    delay_ms(500);


    unsigned char i2c_read_sreg(unsigned char slave_addr, unsigned char reg_addr)
    {
    int i;
    unsigned char t;
    unsigned char reg_data;
    i2c_start(); 
    t = (slave_addr << 1) | 0; 
    i2c_write_byte(t);
    i2c_write_byte(reg_addr);

    i2c_start();
    t = (slave_addr << 1) | 1; 
    i2c_write_byte(t);
    //i2c_write_byte(reg_addr);
    reg_data = i2c_nread_byte();
    i2c_stop();
    return reg_data;
    }

    void i2c_write_sreg (unsigned char slave_addr, unsigned char reg_addr, unsigned char reg_data) 

    {
    int i;
    unsigned char t;
    i2c_start(); 
    t = (slave_addr << 1) | 0;
    i2c_write_byte(t);
    i2c_write_byte(reg_addr);
    //i2c_write_byte(slave_addr);
    i2c_write_byte(reg_data);
    i2c_stop();
    return;
    }

  • 你好!

    我的部分代码如下:

    CE_POWER = 0;
    delay_ms(2000);

    slave_addr = 0x6B;reg_addr = 0x1;data_addr = 0x2b;

    i2c_write_sreg(slave_addr,reg_addr,data_addr);
    delay_ms(500);

    reg_data = i2c_read_sreg(slave_addr, reg_addr) ;printf("0x%02x ",reg_data);
    delay_ms(500);


    unsigned char i2c_read_sreg(unsigned char slave_addr, unsigned char reg_addr) 

    int i; 
    unsigned char t; 
    unsigned char reg_data; 
    i2c_start(); 
    t = (slave_addr << 1) | 0; 
    i2c_write_byte(t); 
    i2c_write_byte(reg_addr);

    i2c_start();
    t = (slave_addr << 1) | 1; 
    i2c_write_byte(t); 
    //i2c_write_byte(reg_addr);
    reg_data = i2c_nread_byte();
    i2c_stop();
    return reg_data;


    void i2c_write_sreg (unsigned char slave_addr, unsigned char reg_addr, unsigned char reg_data) 


    int i; 
    unsigned char t; 
    i2c_start(); 
    t = (slave_addr << 1) | 0;
    i2c_write_byte(t); 
    i2c_write_byte(reg_addr); 
    //i2c_write_byte(slave_addr);
    i2c_write_byte(reg_data); 
    i2c_stop();
    return;
    }

  • 看你的程序步骤没错啊,现在调通了吗?我也遇到这个问题,读写不了寄存器,能发你的例程我看看吗?274344073@qq.com