m0_57843239 2023-03-09 17:52 采纳率: 0%
浏览 130

在gd32里写i2c 设备初始化的时候代码一直卡死

在gd32里写i2c 设备初始化的时候代码一直卡在 while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)){}; 出不去,地址定义应该没有什么问题,能求求帮忙看看吗


void icm42607_init(void)
{
    /* wait until I2C bus is idle */
    while(i2c_flag_get(I2C0, I2C_FLAG_I2CBSY));
    i2c_start_on_bus(I2C0);
    /* wait until SBSEND bit is set */
    while(!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)){};
    /* send slave address to I2C bus */
    i2c_master_addressing(I2C0,ICM426_ADDR,I2C_TRANSMITTER);
    /* wait until ADDSEND bit is set */
    while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)){};
    /* clear the ADDSEND bit */
    i2c_flag_clear(I2C0,I2C_FLAG_ADDSEND);
    /* wait until the transmit data buffer is empty */
        while( SET != i2c_flag_get(I2C0, I2C_FLAG_TBE)){};
    i2c_data_transmit(I2C0,    ICM426_SOFTWARE_RESET);
    /* wait until BTC bit is set */
    while(!i2c_flag_get(I2C0, I2C_FLAG_BTC)){};
    i2c_stop_on_bus(I2C0);
    /* wait until the stop condition is finished */
    delay_1ms(15);
}
  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-03-09 18:31
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    您好,根据您提供的代码,代码卡在 while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)){}; 这一行的原因可能是没有正确配置 I2C 时钟。请确保已经正确配置了 I2C 时钟,使其能够正常工作。如果 I2C 总线的时钟不稳定,那么等待 ADDSEND 标志位就会导致代码一直阻塞。
    ·
    此外,您还可以尝试通过调试程序来找出具体的原因。您可以在代码中添加一些打印语句,输出 I2C 寄存器的值,以及等待标志位的状态等信息,来查看程序执行到哪里出现了问题。

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-10 18:48
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 3月9日

悬赏问题

  • ¥30 哈夫曼编码译码器打印树形项目
  • ¥20 求完整顺利登陆QQ邮箱的python代码
  • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL
  • ¥15 网络打印机Ip地址自动获取出现问题
  • ¥15 求局部放电案例库,用于预测局部放电类型
  • ¥100 QT Open62541
  • ¥15 stata合并季度数据和日度数据
  • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
  • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?
  • ¥15 用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色