| 
 
| 在南京万历电子的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不是有问题了吗?
 | 
 |