我用万利的板子(STM32F103),和我自己做的板子(STM32F101C6T6)!测试 I2C 读写铁电FM24CL64。
只要硬件连上 FM24,程序执行完 RCC 时钟初始化后,STM32 的 I2C 就一直处在 BUSY 状态下!只有 1,2次没有BUSY!
可是我仅仅就打开了I2C1 的时钟,别的都没做! 怀疑是FM24的问题,我换过,还是老样子! SDA和 SCL都 10K 上拉到VCC了!
但是只要 断开 FM24的连接,STM32 I2C 啥也不接 就不 BUSY了!
谁知道是啥问题呀?
RCC配置如下:
void RCC_Conf(void) { ErrorStatus HSEStartUpStatus; RCC_DeInit(); /* RCC system reset(for debug purpose) */ RCC_HSEConfig(RCC_HSE_ON); //设置系统时钟为HSE /* Enable HSE */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* Wait till HSE is ready */
if(HSEStartUpStatus == SUCCESS) { FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //enable flash Prefetch Buffer FLASH_SetLatency(FLASH_Latency_0); //set flash wait latency according to system clock RCC_HCLKConfig(RCC_SYSCLK_Div1); //set AHB Clock prescaler RCC_PCLK2Config(RCC_HCLK_Div1); //set APB hi speed Clock prescaler RCC_PCLK1Config(RCC_HCLK_Div1); //set APB lo speed Clock prescaler //RCC_ADCCLKConfig(RCC_PCLK2_Div2); //set ADC Clock prescaler RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); //select system clock source
while(RCC_GetSYSCLKSource() != 0x04) //wait system clock OK { } }
/* Enable peripheral clocks --------------------------------------------------*/ //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* Enable DMA1 clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_I2C1 | RCC_APB1Periph_USART2 | RCC_APB1Periph_TIM2 , ENABLE); /* Enable ADC1 and GPIOC clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 |RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE); /* Enable ADC1 and GPIOC clock */
}
|