[AT32F403/403A] 能否帮忙看下i2c初始化这里是否正确

[复制链接]
 楼主| andygirl 发表于 2021-12-3 16:19 | 显示全部楼层 |阅读模式
  1. void I2Cx_Init(I2C_Type* I2Cx)
  2. {
  3.                 GPIO_InitType GPIO_InitStructure;
  4.                 NVIC_InitType NVIC_InitStructure;  
  5.                 I2C_InitType  I2C_InitStructure;

  6.                 /* I2C_SCL_GPIO_CLK and I2C_SDA_GPIO_CLK Periph clock enable */
  7.                 RCC_APB2PeriphClockCmd(I2C_SCL_GPIO_CLK | I2C_SDA_GPIO_CLK, ENABLE);

  8.                 /* I2C Periph clock enable */
  9.                 RCC_APB1PeriphClockCmd(I2C_CLK, ENABLE);

  10.                 /* Enable the DMA clock */
  11.                 RCC_AHBPeriphClockCmd(I2Cx_DMA_CLK, ENABLE);
  12.                        
  13.                 /* GPIO configuration */  
  14.                 /* Configure I2C pins: SCL */
  15.                 GPIO_InitStructure.GPIO_Pins = I2C_SCL_PIN;
  16.                 GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
  17.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
  18.                 GPIO_Init(I2C_SCL_GPIO_PORT, &GPIO_InitStructure);

  19.                 /* Configure I2C pins: SDA */
  20.                 GPIO_InitStructure.GPIO_Pins = I2C_SDA_PIN;
  21.                 GPIO_Init(I2C_SDA_GPIO_PORT, &GPIO_InitStructure);

  22.                 /* Configure and enable I2C DMA TX Channel interrupt */
  23.                 NVIC_InitStructure.NVIC_IRQChannel = I2Cx_DMA_TX_IRQn;
  24.                 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2Cx_DMA_TX_PREPRIO;
  25.                 NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2Cx_DMA_TX_SUBPRIO;
  26.                 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  27.                 NVIC_Init(&NVIC_InitStructure);

  28.                 /* Configure and enable I2C DMA RX Channel interrupt */
  29.                 NVIC_InitStructure.NVIC_IRQChannel = I2Cx_DMA_RX_IRQn;
  30.                 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2Cx_DMA_RX_PREPRIO;
  31.                 NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2Cx_DMA_RX_SUBPRIO;
  32.                 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  33.                 NVIC_Init(&NVIC_InitStructure);  

  34.                 NVIC_InitStructure.NVIC_IRQChannel = I2Cx_EV_IRQn;
  35.                 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2Cx_EV_PREPRIO;
  36.                 NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2Cx_EV_SUBPRIO;
  37.                 NVIC_Init(&NVIC_InitStructure);

  38.                 NVIC_InitStructure.NVIC_IRQChannel = I2Cx_ER_IRQn;
  39.                 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2Cx_ER_PREPRIO;
  40.                 NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2Cx_ER_SUBPRIO;
  41.                 NVIC_Init(&NVIC_InitStructure);
  42.                
  43.                 /* I2C configuration */
  44.                 I2C_InitStructure.I2C_Mode = I2C_Mode_I2CDevice;
  45.                 I2C_InitStructure.I2C_FmDutyCycle = I2C_FmDutyCycle_2_1;
  46.                 I2C_InitStructure.I2C_OwnAddr1 = I2C_OWN_ADDRESS7;
  47.                 I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
  48.                 I2C_InitStructure.I2C_AddrMode = I2C_AddrMode_7bit;
  49.                 I2C_InitStructure.I2C_BitRate = I2C_SPEED;
  50.                 /* Apply I2C configuration after enabling it */
  51.                 I2C_Init(I2Cx, &I2C_InitStructure);

  52.                 /* I2C Peripheral Enable */
  53.                 I2C_Cmd(I2Cx, ENABLE);

  54.                 I2C_INTConfig(I2Cx,I2C_INT_EVT | I2C_INT_BUF | I2C_INT_ERR,ENABLE);
  55. }
想学习下I2C部分,一直有问题,请各位有时间,帮忙看看初始化部分是否有问题。

应为是临时搭的电路,i2c飞线了,不知道有没有影响。
F403a


084425 发表于 2021-12-3 21:41 | 显示全部楼层
看起来没问题
 楼主| andygirl 发表于 2021-12-8 16:06 | 显示全部楼层
那就是别的地方有问题了~
566038 发表于 2021-12-9 14:19 | 显示全部楼层
用逻辑分析仪看看你的iic数据是否正常。
 楼主| andygirl 发表于 2021-12-9 15:32 | 显示全部楼层
566038 发表于 2021-12-9 14:19
用逻辑分析仪看看你的iic数据是否正常。

恩,我想其他办法试了,逻辑分析仪,不知道被谁拿走,没还我,我只剩下几个钩子了
566038 发表于 2021-12-10 09:34 | 显示全部楼层
andygirl 发表于 2021-12-9 15:32
恩,我想其他办法试了,逻辑分析仪,不知道被谁拿走,没还我,我只剩下几个钩子了 ...

2ch示波器,同时测SCL和SDA,人肉看看IIC数据对不对。
 楼主| andygirl 发表于 2021-12-11 16:58 | 显示全部楼层
566038 发表于 2021-12-10 09:34
2ch示波器,同时测SCL和SDA,人肉看看IIC数据对不对。

可能时钟有点不对,时钟线上加了一小电容,就成了~
10Pf
lajfda001 发表于 2021-12-13 12:04 | 显示全部楼层
整体而言,不错的,没有什么错误的地方。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

94

主题

535

帖子

1

粉丝
快速回复 返回顶部 返回列表