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

[复制链接]
 楼主| li460135301 发表于 2022-4-3 01:33 | 显示全部楼层 |阅读模式
芯片是TSSOP20封装,采用内部晶振。想测试IIC通信,用I2C1.但是无法通信,I2C引脚是PA9,PA10。采用中断方式。有人能帮忙看一下吗?非常感谢!
看手册,PA9,PA10作为IIC,MUX_NUM应该未MUX4。这个应该没错吧!

这个是定义

  1. #define I2C_TIMEOUT                      0xFFFFFFFF
  2.                                          
  3. #define I2Cx_SPEED                       100000
  4. #define I2Cx_ADDRESS                     2

  5. #define I2Cx_PORT                        I2C1
  6. #define I2Cx_CLK                         CRM_I2C1_PERIPH_CLOCK

  7. #define I2Cx_SCL_PIN                     GPIO_PINS_9            
  8. #define I2Cx_SCL_PIN_SOURCE              GPIO_PINS_SOURCE9
  9. #define I2Cx_SCL_PIN_MUX_NUM             GPIO_MUX_4
  10. #define I2Cx_SCL_GPIO_PORT               GPIOA      
  11. #define I2Cx_SCL_GPIO_CLK                CRM_GPIOA_PERIPH_CLOCK

  12. #define I2Cx_SDA_PIN                     GPIO_PINS_10
  13. #define I2Cx_SDA_PIN_SOURCE              GPIO_PINS_SOURCE10
  14. #define I2Cx_SDA_PIN_MUX_NUM             GPIO_MUX_4
  15. #define I2Cx_SDA_GPIO_PORT               GPIOA                  
  16. #define I2Cx_SDA_GPIO_CLK                CRM_GPIOA_PERIPH_CLOCK
  17.   
  18. #define BUF_SIZE                         8
初始化如下:

  1. void i2c_lowlevel_init(i2c_handle_type* hi2c)
  2. {
  3.   gpio_init_type gpio_initstructure;
  4.   
  5.   if(hi2c->i2cx == I2Cx_PORT)
  6.   {  
  7.     /* i2c periph clock enable */
  8.     crm_periph_clock_enable(I2Cx_CLK, TRUE);   
  9.     crm_periph_clock_enable(I2Cx_SCL_GPIO_CLK, TRUE);
  10.     crm_periph_clock_enable(I2Cx_SDA_GPIO_CLK, TRUE);
  11.    
  12.     /* gpio configuration */  
  13.     gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_OPEN_DRAIN;  
  14.     gpio_initstructure.gpio_pull           = GPIO_PULL_UP;  
  15.     gpio_initstructure.gpio_mode           = GPIO_MODE_MUX;  
  16.     gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;
  17.   
  18.     /* configure i2c pins: scl */   
  19.     gpio_initstructure.gpio_pins = I2Cx_SCL_PIN;
  20.     gpio_init(I2Cx_SCL_GPIO_PORT, &gpio_initstructure);
  21.     gpio_pin_mux_config(I2Cx_SCL_GPIO_PORT, I2Cx_SCL_PIN_SOURCE, I2Cx_SCL_PIN_MUX_NUM);

  22.     /* configure i2c pins: sda */     
  23.     gpio_initstructure.gpio_pins = I2Cx_SDA_PIN;
  24.     gpio_init(I2Cx_SDA_GPIO_PORT, &gpio_initstructure);
  25.     gpio_pin_mux_config(I2Cx_SDA_GPIO_PORT, I2Cx_SDA_PIN_SOURCE, I2Cx_SDA_PIN_MUX_NUM);
  26.    
  27.     /* configure and enable i2c interrupt */     
  28.     nvic_irq_enable(I2C1_EVT_IRQn, 0, 0);
  29.     nvic_irq_enable(I2C1_ERR_IRQn, 0, 0);   
  30.    
  31.     i2c_init(hi2c->i2cx, I2C_FSMODE_DUTY_2_1, I2Cx_SPEED);
  32.    
  33.                 i2c_own_address1_set(hi2c->i2cx, I2C_ADDRESS_MODE_7BIT, I2Cx_ADDRESS);
  34.   }
  35. }
工程代码附件如下


AT32F421FP7_IIC.rar

4.08 MB, 下载次数: 10

sparrow054 发表于 2022-4-6 14:07 | 显示全部楼层
没看出来啊
muyichuan2012 发表于 2022-4-6 19:44 | 显示全部楼层
你好,对于421 I2C而言,由于是开漏,外部需要上拉电阻。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:风沙星辰,永远相伴......

7

主题

18

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部