GD32E503硬件I2C问题

[复制链接]
4382|4
手机看帖
扫描二维码
随时随地手机跟帖
berryguoooo|  楼主 | 2021-10-9 09:47 | 显示全部楼层 |阅读模式
求大佬们帮忙看看刚开始搞编程,最近在学习GD32E503-Start的开发板,按照官方提供的固件库使用指南操作在使用硬件I2C的时候发现ADDSEND位一直不置1,导致程序一直卡在 while(!i2c_flag_get(i2c_periph,I2C_FLAG_ADDSEND));
检查硬件连接也没啥问题,把程序下进去之后,疯狂按复位,发现有那么几次ADDSEND被置1了,真的搞不清楚什么情况,求各位帮忙看看,代码是按照官方提供的例程写的,使用的是I2C1,PB10,PB11引脚
void lmp_reg_write(uint32_t i2c_periph, uint32_t lmp_reg, uint8_t datatransmit)
{
                while(i2c_flag_get(i2c_periph,I2C_FLAG_I2CBSY));
                i2c_start_on_bus(i2c_periph);
                while(!i2c_flag_get(i2c_periph,I2C_FLAG_SBSEND));
                i2c_master_addressing(i2c_periph,LMP_ADDR_WRITE,I2C_TRANSMITTER);
                  while(!i2c_flag_get(i2c_periph,I2C_FLAG_ADDSEND));
                i2c_flag_clear(i2c_periph,I2C_FLAG_ADDSEND);
                while(!i2c_flag_get(i2c_periph,I2C_FLAG_TBE));
                i2c_data_transmit(i2c_periph,lmp_reg);
                while(!i2c_flag_get(i2c_periph,I2C_FLAG_TBE));
                i2c_data_transmit(i2c_periph,datatransmit);
                while(!i2c_flag_get(i2c_periph,I2C_FLAG_BTC));
                i2c_stop_on_bus(i2c_periph);
                while(I2C_CTL0(i2c_periph)&0x0200);
}


供电我是直接用usb线到电脑上,连的gd-link那个usb口,也方便烧录。

使用特权

评论回复

相关帖子

berryguoooo|  楼主 | 2021-10-9 11:12 | 显示全部楼层
找到原因了,用万用表测各路电源输出,由于是用几块开发板搭建的电路,发现GD32开发板的地和芯片调理电路的地电压不一致将地接出短接,问题解决,程序没问题

使用特权

评论回复
地瓜patch| | 2021-10-9 16:16 | 显示全部楼层
楼主牛,所有电路板都要共地的,这样有相同的参考点

使用特权

评论回复
地瓜patch| | 2021-10-9 16:17 | 显示全部楼层
一般iic的数据线还要接上拉电阻

使用特权

评论回复
jacket123| | 2022-10-20 16:17 | 显示全部楼层

GD32E503硬件I2C问题

作者你好,我也遇到了同样的问题,能给个联系方式交流一下吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝