我用的万利的板子来测试I2C读写eeprom的程序。程序是版面置顶提供的。用的是查询读写方式。
因为我想用在手持设备上,尽量缩小体积和省电。用尽可能低的频率。
当用外置晶振HSE,并且72Mhz做为时钟源没问题,能够正常读写。但是我改为用内置HSI做为时钟源的话,PLL disable,并且HCLK=SYSCLK/2,只用4Mhz为内核时钟,I2C就读写不了。老是返回6错误(TIME OUT). 但是我程序的UART,和定时器都能够正常工作。不管是HSE还是HSI。
不知道是哪里错误了。我尝试调整了好几种one_us_unit ,i2c_10clk_us的值了。还是不能正常工作。
程序上只改动了RCC_Configuration()部份,其他没动。
void RCC_Configuration(void) { /* RCC system reset(for debug purpose) */ RCC_DeInit();
RCC_HSEConfig(RCC_HSE_OFF); if(1) { /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 0 wait state */ FLASH_SetLatency(FLASH_Latency_0); /*HCLK = SYSCLK/2 */ RCC_HCLKConfig(RCC_SYSCLK_Div2);
/* ADCCLK = PCLK2/6 */ RCC_ADCCLKConfig(RCC_PCLK2_Div6); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK */ RCC_PCLK1Config(RCC_HCLK_Div1);
/* Disable PLL */ RCC_PLLCmd(DISABLE);
/* Select HSI as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
} } |