zymwjm 发表于 2018-9-4 16:45:42

用硬件i2c调试 求助

void i2c1config(void)
{
       

       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
        I2C_InitTypeDef I2C_InitStructure;
       
        GPIO_InitTypeDef GPIO_InitStruct;
       
        GPIO_InitStruct.GPIO_Mode= GPIO_Mode_AF;
        GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
        GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz;
       
       
        GPIO_Init(GPIOB,&GPIO_InitStruct);

        GPIO_PinAFConfig(GPIOB,GPIO_Pin_8,GPIO_AF_I2C1);
        GPIO_PinAFConfig(GPIOB,GPIO_Pin_9,GPIO_AF_I2C1);
       

       
        I2C_InitStructure.I2C_Ack                                                                               =   I2C_Ack_Enable;
        I2C_InitStructure.I2C_AcknowledgedAddress    =   I2C_AcknowledgedAddress_7bit;
        I2C_InitStructure.I2C_ClockSpeed             =   400000;
        I2C_InitStructure.I2C_DutyCycle                                                       =   I2C_DutyCycle_2;
        I2C_InitStructure.I2C_Mode                   =   I2C_Mode_I2C;
        I2C_InitStructure.I2C_OwnAddress1                                               =   0xd0;
       
       
        I2C_Init(I2C1,&I2C_InitStructure);
        I2C_Cmd(I2C1, ENABLE);

}


//****************main*******************

I2C_AcknowledgeConfig(I2C1,ENABLE);
I2C_GenerateSTART(I2C1,ENABLE);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));//在这里死了

请帮忙看下 是不是我的配置问题还可能是什么问题造成的死在while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT))




jjbboox 发表于 2018-9-4 17:07:12

用cubemx吧,标准库硬件I2C很难正确驱动起来的。
标准库还是用软件I2C吧。

huangyanga 发表于 2018-9-4 20:15:51

用的什么主控呀,怎么会有40Mhz的IO频率的

feixiang20 发表于 2018-9-4 23:23:33

循环错误或者卡死的可能性只有代码写错和硬件连接问题

jyl518-283289 发表于 2018-9-5 08:14:48


建议官方更新一版标准库硬件I2C驱动

发表于 2018-9-5 08:34:52

楼主,先用示波器看一下I2C总线是否有数据传输。

        while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));
       
        I2C_GenerateSTART(I2C2, ENABLE);
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT)); //EV5
       
        I2C_Send7bitAddress(I2C2, EEAddress, I2C_Direction_Transmitter);
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); //EV6
       
        I2C_SendData(I2C2, Addr);
        while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BTF) == RESET);//EV8
       
        I2C_GenerateSTART(I2C2, ENABLE);
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT)); //EV5
       
        I2C_Send7bitAddress(I2C2, EEAddress, I2C_Direction_Receiver);
        while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));//EV6

zymwjm 发表于 2018-9-5 12:06:15

jjbboox 发表于 2018-9-4 17:07
用cubemx吧,标准库硬件I2C很难正确驱动起来的。
标准库还是用软件I2C吧。

软件模拟写过了 现在就想试试这个硬件

zymwjm 发表于 2018-9-5 12:06:33

huangyanga 发表于 2018-9-4 20:15
用的什么主控呀,怎么会有40Mhz的IO频率的

stm32l1系列

zymwjm 发表于 2018-9-5 12:07:20

feixiang20 发表于 2018-9-4 23:23
循环错误或者卡死的可能性只有代码写错和硬件连接问题

请问下怎么排除查找问题我现在就是排查不出来 求指教

zymwjm 发表于 2018-9-5 12:07:57

jyl518-283289 发表于 2018-9-5 08:14
建议官方更新一版标准库硬件I2C驱动

不太会弄 直接去官网下载吗
页: [1] 2
查看完整版本: 用硬件i2c调试 求助