金牌会员
 
- 积分
- 1010
- 金钱
- 1010
- 注册时间
- 2016-11-8
- 在线时间
- 233 小时
|
5金钱
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,ÔÚ72MÏÂ,Ô¼ºÏ1.86s×óÓÒ
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ʱÖÓÊý
#endif
}
延时初始化函数中标红的这两句,
fac_us=SystemCoreClock/8000000;
为什么要除以8000000?
我理解的是SystemCoreClock的值是72MHz,一个systick的时钟周期不该是72M/9M=8么
|
|