li460135301 发表于 2022-4-3 01:33

用AT32F421F8P7做I2C通信,采用PA9,10通信失败

芯片是TSSOP20封装,采用内部晶振。想测试IIC通信,用I2C1.但是无法通信,I2C引脚是PA9,PA10。采用中断方式。有人能帮忙看一下吗?非常感谢!
看手册,PA9,PA10作为IIC,MUX_NUM应该未MUX4。这个应该没错吧!

这个是定义

#define I2C_TIMEOUT                      0xFFFFFFFF
                                       
#define I2Cx_SPEED                     100000
#define I2Cx_ADDRESS                     2

#define I2Cx_PORT                        I2C1
#define I2Cx_CLK                         CRM_I2C1_PERIPH_CLOCK

#define I2Cx_SCL_PIN                     GPIO_PINS_9            
#define I2Cx_SCL_PIN_SOURCE            GPIO_PINS_SOURCE9
#define I2Cx_SCL_PIN_MUX_NUM             GPIO_MUX_4
#define I2Cx_SCL_GPIO_PORT               GPIOA      
#define I2Cx_SCL_GPIO_CLK                CRM_GPIOA_PERIPH_CLOCK

#define I2Cx_SDA_PIN                     GPIO_PINS_10
#define I2Cx_SDA_PIN_SOURCE            GPIO_PINS_SOURCE10
#define I2Cx_SDA_PIN_MUX_NUM             GPIO_MUX_4
#define I2Cx_SDA_GPIO_PORT               GPIOA                  
#define I2Cx_SDA_GPIO_CLK                CRM_GPIOA_PERIPH_CLOCK

#define BUF_SIZE                         8初始化如下:

void i2c_lowlevel_init(i2c_handle_type* hi2c)
{
gpio_init_type gpio_initstructure;

if(hi2c->i2cx == I2Cx_PORT)
{
    /* i2c periph clock enable */
    crm_periph_clock_enable(I2Cx_CLK, TRUE);   
    crm_periph_clock_enable(I2Cx_SCL_GPIO_CLK, TRUE);
    crm_periph_clock_enable(I2Cx_SDA_GPIO_CLK, TRUE);
   
    /* gpio configuration */
    gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_OPEN_DRAIN;
    gpio_initstructure.gpio_pull         = GPIO_PULL_UP;
    gpio_initstructure.gpio_mode         = GPIO_MODE_MUX;
    gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;

    /* configure i2c pins: scl */   
    gpio_initstructure.gpio_pins = I2Cx_SCL_PIN;
    gpio_init(I2Cx_SCL_GPIO_PORT, &gpio_initstructure);
    gpio_pin_mux_config(I2Cx_SCL_GPIO_PORT, I2Cx_SCL_PIN_SOURCE, I2Cx_SCL_PIN_MUX_NUM);

    /* configure i2c pins: sda */   
    gpio_initstructure.gpio_pins = I2Cx_SDA_PIN;
    gpio_init(I2Cx_SDA_GPIO_PORT, &gpio_initstructure);
    gpio_pin_mux_config(I2Cx_SDA_GPIO_PORT, I2Cx_SDA_PIN_SOURCE, I2Cx_SDA_PIN_MUX_NUM);
   
    /* configure and enable i2c interrupt */   
    nvic_irq_enable(I2C1_EVT_IRQn, 0, 0);
    nvic_irq_enable(I2C1_ERR_IRQn, 0, 0);   
   
    i2c_init(hi2c->i2cx, I2C_FSMODE_DUTY_2_1, I2Cx_SPEED);
   
                i2c_own_address1_set(hi2c->i2cx, I2C_ADDRESS_MODE_7BIT, I2Cx_ADDRESS);
}
}工程代码附件如下


sparrow054 发表于 2022-4-6 14:07

没看出来啊

muyichuan2012 发表于 2022-4-6 19:44

你好,对于421 I2C而言,由于是开漏,外部需要上拉电阻。
页: [1]
查看完整版本: 用AT32F421F8P7做I2C通信,采用PA9,10通信失败