打印
[AT32F403/403A]

能否帮忙看下i2c初始化这里是否正确

[复制链接]
1808|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
andygirl|  楼主 | 2021-12-3 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void I2Cx_Init(I2C_Type* I2Cx)
{
                GPIO_InitType GPIO_InitStructure;
                NVIC_InitType NVIC_InitStructure;  
                I2C_InitType  I2C_InitStructure;

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

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

                /* Enable the DMA clock */
                RCC_AHBPeriphClockCmd(I2Cx_DMA_CLK, ENABLE);
                       
                /* GPIO configuration */  
                /* Configure I2C pins: SCL */
                GPIO_InitStructure.GPIO_Pins = I2C_SCL_PIN;
                GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
                GPIO_Init(I2C_SCL_GPIO_PORT, &GPIO_InitStructure);

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

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

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

                NVIC_InitStructure.NVIC_IRQChannel = I2Cx_EV_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2Cx_EV_PREPRIO;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2Cx_EV_SUBPRIO;
                NVIC_Init(&NVIC_InitStructure);

                NVIC_InitStructure.NVIC_IRQChannel = I2Cx_ER_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2Cx_ER_PREPRIO;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2Cx_ER_SUBPRIO;
                NVIC_Init(&NVIC_InitStructure);
               
                /* I2C configuration */
                I2C_InitStructure.I2C_Mode = I2C_Mode_I2CDevice;
                I2C_InitStructure.I2C_FmDutyCycle = I2C_FmDutyCycle_2_1;
                I2C_InitStructure.I2C_OwnAddr1 = I2C_OWN_ADDRESS7;
                I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
                I2C_InitStructure.I2C_AddrMode = I2C_AddrMode_7bit;
                I2C_InitStructure.I2C_BitRate = I2C_SPEED;
                /* Apply I2C configuration after enabling it */
                I2C_Init(I2Cx, &I2C_InitStructure);

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

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

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


使用特权

评论回复
沙发
084425| | 2021-12-3 21:41 | 只看该作者
看起来没问题

使用特权

评论回复
板凳
andygirl|  楼主 | 2021-12-8 16:06 | 只看该作者
那就是别的地方有问题了~

使用特权

评论回复
地板
566038| | 2021-12-9 14:19 | 只看该作者
用逻辑分析仪看看你的iic数据是否正常。

使用特权

评论回复
5
andygirl|  楼主 | 2021-12-9 15:32 | 只看该作者
566038 发表于 2021-12-9 14:19
用逻辑分析仪看看你的iic数据是否正常。

恩,我想其他办法试了,逻辑分析仪,不知道被谁拿走,没还我,我只剩下几个钩子了

使用特权

评论回复
6
566038| | 2021-12-10 09:34 | 只看该作者
andygirl 发表于 2021-12-9 15:32
恩,我想其他办法试了,逻辑分析仪,不知道被谁拿走,没还我,我只剩下几个钩子了 ...

2ch示波器,同时测SCL和SDA,人肉看看IIC数据对不对。

使用特权

评论回复
7
andygirl|  楼主 | 2021-12-11 16:58 | 只看该作者
566038 发表于 2021-12-10 09:34
2ch示波器,同时测SCL和SDA,人肉看看IIC数据对不对。

可能时钟有点不对,时钟线上加了一小电容,就成了~
10Pf

使用特权

评论回复
8
lajfda001| | 2021-12-13 12:04 | 只看该作者
整体而言,不错的,没有什么错误的地方。

使用特权

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

本版积分规则

94

主题

535

帖子

1

粉丝