初始化使用HSI作为时钟源问题

2019-07-19 20:20发布

本帖最后由 静风沐雨 于 2019-1-3 10:40 编辑

开发板复位 CLK_ICKCR_HSIRDY 一直是处在准备好的状态"1", 但是我实际使用中,使用原子的延时函数,发现误差挺大2ms的延时测试为2.12ms,
我在clk初始化后面加一个10us延时,延时函数就准了,2ms延时,测试2.00x ms。
SystemClockInit(CLK_SOURCE_HSI,CLK_PRESCALER_1); DelayInit(16); DelayUs(10u);

我想问下使用内部时钟函数的时候该怎么写比较好?我这种情况是不是因为时钟没稳定造成的?
时钟函数代码;CLK->SWR = CLK_SOURCE_HSI;CLK->CKDIVR = CLK_PRESCALER_1;       while(0u == ((CLK->ICKCR)& CLK_ICKCR_HSIRDY)){}CLK->SWCR |= CLK_SWCR_SWEN;
while(1)循环体中的内容{ GPIO_SetBits( GPIOF,  GPIO_Pin_7);  DelayUs(1000u);
  GPIO_ResetBits( GPIOF,  GPIO_Pin_7);  DelayUs(1000u);}

参照 QQ图片20190103102700.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
wang_ting
2019-07-19 22:28
void ConfigClock( void ){
  CLK_ICKR = ( 1 << CLK_HSIEN );            /* 使能内部高速RC OSC */
  while(( CLK_ICKR & ( 1 << CLK_HSIRDY )) == 0 );   
  
  CLK_CKDIVR = 0;                         /* 分频系数为0, = 16.000MHz */  
  CLK_PCKENR1 = ( 1 << CLK_TM1_ENABLE ) | ( 1 << CLK_TM2_ENABLE )
                | ( 1 << CLK_TM4_ENABLE );
  CLK_PCKENR2 = ( 1 << CLK_ADC_ENABLE );
  CLK_CSSR |= ( 1 << CLK_CSSD ) | ( 1 << CLK_CSSEN );
}

一周热门 更多>