STM32F1 外部晶振8M,倍频后系统时钟16M,延时初始化问题

2019-07-21 01:17发布

STM32F1  外部晶振8M,倍频后系统时钟16M,延时初始化问题。参考原子哥的delay_init()函数
{

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);        //因为HCLK就是16M,所以没必要再8分频给systick吧?
        fac_us=SystemCoreClock/8000000;                                //为系统时钟的        这句8000000是怎么来的?




}

要通过IIC和MPU6050通信,需要精确都2us延时,大伙有做过相关的没?延时函数怎么初始化?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
warship
2019-07-21 15:42
原子的系统时钟是72M的,
72M/8000000=9是为了得到分频因子,
即9个周期为1us
看下面的注释:
//        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //此句与下句等效,BIT2为SYSTICK时钟选择,0为HCLK/8,1为HCLK
//        SysTick->CTRL &= ((uint32_t)0xFFFFFFFB); //置BIT2为0(复位值,所以此句可无),即选择外部时钟源HCLK/8  即9M(计数器每拍为1/9000000秒)
//        SysTick->CTRL |=1<<2;              //置BIT2为1,即选择外部时钟源HCLK  即72M(计数器每拍为8/9000000秒)   
//        fac_us=9;                              //对于72M的系统来说,fac_us=72000000/8000000=9 即9拍一个微秒
       
//        SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;           //开启SYSTICK中断
//        SysTick->LOAD=fac_us*1000-1;                       //装载值设定为9*1000-1=8999  即每ms中断一次        

一周热门 更多>