[求助] 关于STM32F051 固件库IIC中IIC的时钟设置

dwlovehome   2014-10-17 15:26 楼主
现在想用F0里面固件库的IIC。但是在里面发现了一个问题,就是不会计算IIC的时钟设置,官方有计算的工具,
在工具里有1行不明白该怎么写。。我的片子是stm32f051。晶振是8MHZ的,然后倍频到48MHZ。那么在计算工具里的这一行我是写8000还是48000
iic时钟
。还有我看到有些例程里面还有这么1句。是不是 我用系统的SystemInit();这一句就不用下面这一句话了?
RCC_I2CCLKConfig(RCC_I2C1CLK_HSI);//HSI 8MHz
我自己的初始化时钟是不是要加上上面那句?
  1. void InitialSysClock(void)
  2. {
  3.         /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/   
  4.         /* RCC system reset(for debug purpose) */
  5.         RCC_DeInit();         //设置RCC寄存器重新设置为默认值

  6.         /* Enable HSE */
  7.         RCC_HSEConfig(RCC_HSE_ON); //打开外部高速时钟晶振

  8.         /* Wait till HSE is ready */
  9.         HSEStartUpStatus = RCC_WaitForHSEStartUp();          //等待外部高速时钟晶振工作

  10.         if (HSEStartUpStatus == SUCCESS)  //外部就绪
  11.         {
  12.                 /* Enable Prefetch Buffer */
  13.                 FLASH_PrefetchBufferCmd(ENABLE);

  14.                 /* Flash 1 wait state */
  15.                 FLASH_SetLatency(FLASH_Latency_1);

  16.                 /*************************************************************************/
  17.                 /*   HSE=8MHz,HCLK=48MHz,PCLK2=48MHz                         */
  18.                 /*************************************************************************/

  19.                 /* HCLK = SYSCLK */
  20.                 RCC_HCLKConfig(RCC_SYSCLK_Div1);          //设置AHB时钟不分频
  21.                 /* PCLK= HCLK */
  22.                 RCC_PCLKConfig(RCC_HCLK_Div1);                //设置APB时钟不分频
  23.                

  24.                 RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4);        //设置ADC时钟2分频 12Mhz

  25.                 /* PLLCLK = 4MHz * 12 = 48 MHz */
  26.                 RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
  27.                


  28.                 /* Enable PLL */
  29.                 RCC_PLLCmd(ENABLE);         //使能PLL
  30.                 /* Wait till PLL is ready */
  31.                 while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {
  32.                 }
  33.                 /* Select PLL as system clock source */
  34.                 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  35.                 /* Wait till PLL is used as system clock source */
  36.                 while (RCC_GetSYSCLKSource() != 0x08) {
  37.                 }
  38.         }
  39. //M0只有1个中断优先级
  40. }


回复评论 (3)

8000
点赞  2014-10-18 16:24

嗯,已经完全明白了,谢谢了~
点赞  2014-10-18 23:04
谢谢分享
点赞  2019-4-13 10:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复