打印

请教一下GD32F450的硬件I2C的配置问题

[复制链接]
917|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
WESTARK|  楼主 | 2020-7-14 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    rcu_periph_clock_enable(RCU_GPIOF);
    /* enable BOARD_I2C APB1 clock */
    rcu_periph_clock_enable(RCU_I2C1);
            /* connect PB7 to I2C1_SDA */
       
                        //I2C1-SCL-PF1
    gpio_af_set(GPIOF, GPIO_AF_4, GPIO_PIN_1);
    gpio_mode_set(GPIOF, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_1);
    gpio_output_options_set(GPIOF, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
       
                        //I2C1-SDA-PF0
    gpio_af_set(GPIOF, GPIO_AF_4, GPIO_PIN_0);
    gpio_mode_set(GPIOF, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_0);
    gpio_output_options_set(GPIOF, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
       
    i2c_clock_config(I2C1, 100000, I2C_DTCY_2);
    /* I2C address configure */
    i2c_mode_addr_config(I2C1, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, I2C1_SLAVE_ADDRESS7);
    /* enable I2C1 */
    i2c_enable(I2C1);
    /* enable acknowledge */
    i2c_ack_config(I2C1, I2C_ACK_ENABLE);       
这是我硬件I2C的配置,然后读I2C的时候一直卡在        while(i2c_flag_get(I2C1, I2C_FLAG_I2CBSY));
I2C的总线繁忙这里。
但是我把这两个管教配置成模拟的管脚时能够读到I2C里面的值。
请教下我的硬件I2C配置有误吗?

使用特权

评论回复
沙发
sonicll| | 2020-7-14 11:26 | 只看该作者
SCL和SDA接上拉电阻了吗,还有可能是你接的设备没有正常工作,把总线拉低了,导致一直busy

使用特权

评论回复
板凳
WESTARK|  楼主 | 2020-7-14 18:24 | 只看该作者
sonicll 发表于 2020-7-14 11:26
SCL和SDA接上拉电阻了吗,还有可能是你接的设备没有正常工作,把总线拉低了,导致一直busy ...

这些我都配置好了,我把管脚模拟成I2C的管脚就可以实现读写I2C,但用硬件I2C的去读写的时候,总线就会BUSY

使用特权

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

本版积分规则

3

主题

11

帖子

0

粉丝