-
delay_init() 函数(延时函数)
- 频率定义:单位时间内完成周期性变化次数。
-
STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL
-
①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
-
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
-
③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。WDG
-
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC
-
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。
倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
-
-
什么是HCLK?
-
HCLK :AHB总线时钟,由系统时钟SYSCLK 分频得到,一般不分频,等于系统时钟
-
//初始化延迟函数 //SYSTICK的时钟固定为HCLK时钟的1/8 //SYSCLK:系统时钟 void delay_init() { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8 fac_us=SystemCoreClock/8000000; //为系统时钟的1/8 fac_ms=(u16)fac_us*1000; //非OS下,代表每个ms需要的systick时钟数 }//初始化延迟函数 //当使用 OS 的时候,此函数会初始化 OS 的时钟节拍 //SYSTICK 的时钟固定为 HCLK 时钟的 1/8 void delay_init() { #if SYSTEM_SUPPORT_OS //如果需要支持 OS. u32 reload; #endif SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//选择外部时钟 HCLK/8 fac_us=SystemCoreClock/8000000; //为系统时钟的 1/8 #if SYSTEM_SUPPORT_OS //如果需要支持 OS. reload=SystemCoreClock/8000000; //每秒钟的计数次数 单位为 M reload*=1000000/delay_ostickspersec; //根据 delay_ostickspersec 设定溢出时间 //reload 为 24 位寄存器,最大值:16777216,在 168M 下,约合 0.7989s 左右 fac_ms=1000/delay_ostickspersec; //代表 OS 可以延时的最少单位 SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //开启 SYSTICK 中断 SysTick->LOAD=reload; //每 1/delay_ostickspersec 秒中断一次 SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启 SYSTICK #else fac_ms=(u16)fac_us*1000; //非 OS 下,代表每个 ms 需要的 systick 时钟数 #endi }
STM32:delay_init() 函数(延时函数)
最新推荐文章于 2025-05-16 09:25:48 发布
本文详细介绍了STM32的delay_init()函数,该函数用于实现延时操作。文章提到了STM32的5种时钟源,包括HSI、HSE、LSI、LSE和PLL,以及它们的特性。其中,PLL作为锁相环倍频输出,可选择不同的输入源并进行2~16倍的倍频,但输出频率不超过72MHz。HCLK作为AHB总线时钟,通常等于系统时钟SYSCLK。

799

被折叠的 条评论
为什么被折叠?



