在南京万历电子的EK-STM32F开发板上调试程序,使用I2C1读写外部24C02芯片,DEMO程序使用了ST的库STM32F10xFWLibFWLibexamplesI2CExample5,愿为读写24C08的程序,发现I2C读写在下列情况下无法实现:
主频设置在40M以下时,I2C无法正确读写, 设置程序为: /* PLLCLK = 8MHz * 5 = 40 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_5); 设置到72MHz时I2C也无法正确读写: RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); 程序无法读写24C02,但是其他功能正常,就是在I2C程序中无法推出,I2C状态判断无法通过;
如果设置成RCC_PLLMul_6,RCC_PLLMul_7,RCC_PLLMul_8,读写24C02正常。
I2C设置如下: #define I2C_Speed 400000 #define I2C1_SLAVE_ADDRESS7 0xA0 #define I2C_PageSize 4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_Init(GPIOB, &GPIO_InitStructure);
/* I2C configuration */ I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = I2C1_SLAVE_ADDRESS7; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = I2C_Speed; /* I2C Peripheral Enable */ I2C_Cmd(I2C1, ENABLE); /* Apply I2C configuration after enabling it */ I2C_Init(I2C1, &I2C_InitStructure);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;改用GPIO_Speed_10MHz和GPIO_Speed_2MHz都测试过了,现象相同。
此现象不知如何解释?请指教。如果是这样,那STM32F101系列只能到36MHz不是有问题了吗? |