systick 为什么选择SysTick_CLKSource_HCLK和SysTick_CLKSource_HCLK_Div8, 延时都是1秒
时间: 2023-07-31 22:10:12 浏览: 131
SysTick是STM32的一个定时器模块,可以用于延时。在STM32中,SysTick使用的时钟源可以是HCLK或HCLK/8。选择不同的时钟源,会影响SysTick的计数速度和延时时间。
当选择SysTick的时钟源为HCLK时,SysTick计数器的时钟频率等于HCLK的频率,即SysTick计数器每秒钟递增的次数等于HCLK的频率。因此,如果要延时1秒,就需要将SysTick的计数值设置为HCLK的频率减1。
当选择SysTick的时钟源为HCLK/8时,SysTick计数器的时钟频率等于HCLK/8的频率,即SysTick计数器每秒钟递增的次数等于HCLK/8的频率。因此,如果要延时1秒,就需要将SysTick的计数值设置为HCLK/8的频率减1。
从上面可以看出,选择不同的时钟源,需要设置不同的计数值才能延时相同的时间。如果选择HCLK/8作为时钟源,可以把SysTick计数器的计数范围缩小8倍,从而减少了计数器的位数,这样可以减少对内存的占用,因此在一些情况下选择HCLK/8作为SysTick的时钟源可以更加灵活和高效。
相关问题
void delay_init(u8 SYSCLK) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//选择48M时钟 HCLK/8 // SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//选择8M时钟 HCLK fac_us=SYSCLK/8; //为系统时钟的1/8 fac_ms=(int16_t)fac_us*1000;//每个ms需要的systick时钟数 }
这段代码是用来初始化延时函数的。其中,`SYSCLK` 是系统时钟频率,通过该参数计算出每个微秒需要的 SysTick 时钟数 `fac_us`,以及每个毫秒需要的 SysTick 时钟数 `fac_ms`。在该函数中,通过设置 SysTick 时钟源为 HCLK/8,选择了 48MHz 的时钟源。这个函数的作用是为后面的延时函数提供时钟源。
SysTick_CLKSource_HCLK_Div8
SysTick_CLKSource_HCLK_Div8是STM32微控制器中的一个系统定时器(SysTick)的时钟源选项。SysTick定时器是一个24位的递减计数器,用于提供精确的时间基准和延时功能。
在STM32微控制器中,SysTick定时器的时钟源可以选择为HCLK(系统时钟)或者HCLK/8。其中,HCLK是微控制器的主时钟,它的频率由外部晶振或者内部时钟源提供。
当选择SysTick_CLKSource_HCLK_Div8作为时钟源时,SysTick定时器的时钟频率将为HCLK/8。这意味着SysTick定时器的计数速度将变慢,每个计数周期需要8个系统时钟周期。
通过选择不同的时钟源,可以根据具体需求来调整SysTick定时器的计数速度和精度。选择HCLK/8作为时钟源可以降低SysTick定时器的计数速度,适用于一些低功耗应用场景或者需要较长延时的情况。
阅读全文