GD32L233通过I2C驱动sensirionSCD4X传感器

在使用GD32L233KBT6通过sensirion官方驱动调试SCD4X二氧化碳传感器时,遇到软件模拟IIC通信正常,硬件IIC无法读写的问题,折腾了好久终于调试通过!记录如下:

1.遇到的问题

基于上一篇《GD32L233通过I2C总线驱动AHT20温湿度传感器》的硬件I2C代码,无法正常驱动SCD4X,现象是地址发完后就触发了STOP信号,导致无法正常读写。

2.原因

先看原来的iic_write代码:

uint8_t aht20_interface_iic_write_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
{
   
    uint16_t count=len;

     // 配置为发送模式
    i2c_master_addressing(I2C1, addr, I2C_MASTER_TRANSMIT);
    /* wait until I2C bus is idle */
    while(i2c_flag_get(I2C1, I2C_FLAG_I2CBSY));
    // 配置要发送的字节数
    i2c_transfer_byte_number_config(I2C1, count);
    // 生成开始条件
    i2c_start_on_bus(I2C1);

     /* wait until the transmit data buffer is empty */
    I2C_STAT(I2C1) |= I2C_STAT_TBE;
    while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));

    // 发送数据
    while(count--) {
   
        
        i2c_data_transmit(I2C1, *buf++);
        // 等待可以发送数据
        while(i2c_flag_get(I2C1, I2C_FLAG_TBE) == RESET) {
   
        }
    }
    // 等待传输完成
    while(i2c_flag_get(I2C1, I2C_FLAG_TC) == RESET) {
   
    }
    // 生成停止条件
    i2c_stop_on_bus(I2C1);
      /* wait until stop condition generate */
    while(!i2c_flag_get(I2C1, I2C_FLAG_STPDET));
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值