xieyahua 发表于 2014-6-29 14:04:51

关于STM32F103ZE的I2C问题咨询

 刚接触STM32处理器。在调试STM32F103ZE的I2C时,遇到了问题,请教一下各位高手。
我使用的是的I2C2,初始化程序如下:
void I2C2_Configuration(void)
{
        I2C_InitTypeDef I2C_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
 
        /* Configure I2C2 pins: SCL-PB10 and SDA-PB11 */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
          GPIO_Init(GPIOB, &GPIO_InitStructure);       
 
        NVIC_InitStructure.NVIC_IRQChannel = BSP_INT_ID_I2C2_EV; //中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =  0;  //强占优先级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//次优先级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //通道中断使能
        NVIC_Init(&NVIC_InitStructure);//初始化中断
 
        NVIC_InitStructure.NVIC_IRQChannel = BSP_INT_ID_I2C2_ER; //中断通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =  0;  //强占优先级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//次优先级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //通道中断使能
        NVIC_Init(&NVIC_InitStructure);//初始化中断
 
        I2C_DeInit(I2C2);
 
        I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
        I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
        I2C_InitStructure.I2C_OwnAddress1 = 0x65;
        I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
        I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
        I2C_InitStructure.I2C_ClockSpeed = 100000;
 
        I2C_Cmd(I2C2,ENABLE);//打开模块功能
 
        I2C_Init(I2C2,&I2C_InitStructure);
 
        I2C_ITConfig(I2C2,I2C_IT_BUF | I2C_IT_EVT | I2C_IT_ERR,ENABLE);       
}
    通过示波器观察SCL和SDA的波形,CPU复位后,SCL和SDA都保持高电平,一旦我运行I2C_GenerateSTART(I2C2,ENABLE)后,SDA变成了低电平,并且一直保持低电平,SCL一直为高,但就是不进入I2C事件中断(应当起始条件发送后,SB置,产生中断)。等再次复位CPU后,SCL和SDA又都为高电平。
    运行I2C_GenerateSTART(I2C2,ENABLE)后,各寄存器值如下:
I2C2->CR1=0x0501
I2C2->CR2=0x0724
I2C2->SR1=0x0000
I2C2->SR2=0x0002

   不知道大家有没有遇到跟我类似的问题,请帮忙看一下问题出在哪里。

yvonn 发表于 2014-6-29 22:26:25

RE:关于STM32F103ZE的I2C问题咨询

虽然没有用过F1的芯片,但玩过F4/F0,知道应该和F4的设置差不多,自己感觉,I2C的设置,可以参考官方历程,还是相当有参考价值的。根据I2C的协议,起始信号,就是 SCL和SDA先同为高,然后SDA拉低,产生START 信号。不知道自己再讲什么,因为没有看懂你再讲什么
:lol

feel-376797 发表于 2014-6-30 06:32:11

RE:关于STM32F103ZE的I2C问题咨询

只开启I2C模块没写数据怎么中断.

wangbao619 发表于 2014-6-30 09:15:27

RE:关于STM32F103ZE的I2C问题咨询

建议参考官方例程,以前写过,就是参考的官方例程。

有缘于你 发表于 2014-6-30 14:25:13

RE:关于STM32F103ZE的I2C问题咨询

先发送9个时钟试试

aaa999kk 发表于 2014-6-30 15:43:01

RE:关于STM32F103ZE的I2C问题咨询

类似的教程可以找些参考的东西

feiante-155820 发表于 2014-6-30 16:20:48

RE:关于STM32F103ZE的I2C问题咨询

参考下官方的例子吧,我的I2C一般是用模拟的

深秋独影 发表于 2014-6-30 17:39:52

RE:关于STM32F103ZE的I2C问题咨询

不连接从机,看看sda和sck的波形对么,是不是从机拉低了sda
页: [1]
查看完整版本: 关于STM32F103ZE的I2C问题咨询