1、delay_init(u8 SYSCLK);
- //初始化延迟函数
- //当使用OS的时候,此函数会初始化OS的时钟节拍
- //SYSTICK的时钟固定为AHB时钟的1/8
- //SYSCLK:系统时钟频率
- void delay_init(u8 SYSCLK)
- {
- #if SYSTEM_SUPPORT_OS //如果需要支持OS.
- u32 reload;
- #endif
- SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
- fac_us=SYSCLK/8; //不论是否使用OS,fac_us都需要使用
- #if SYSTEM_SUPPORT_OS //如果需要支持OS.
- reload=SYSCLK/8; //每秒钟的计数次数 单位为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时钟数
- #endif
- }
|