新手入门
- 积分
- 17
- 金钱
- 17
- 注册时间
- 2019-4-28
- 在线时间
- 4 小时
|
1金钱
本帖最后由 wsad121 于 2019-9-9 19:10 编辑
时钟都设置8M为了降低功耗
我对应修改了:
1、 delay_init(8); //初始化入口参数 时钟是168M
2、重新配置了delay.c如下(没有用8分频):
//初始化延迟函数
//当使用OS的时候,此函数会初始化OS的时钟节拍
//SYSTICK的时钟固定为AHB时钟的1/8
//SYSCLK:系统时钟频率8M
void delay_init(u8 SYSCLK)
{
#if SYSTEM_SUPPORT_OS //如果需要支持OS.
u32 reload;
#endif
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
fac_us=SYSCLK; //不论是否使用OS,fac_us都需要使用
#if SYSTEM_SUPPORT_OS //如果需要支持OS.
reload=SYSCLK; //每秒钟的计数次数 单位为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
}
但是延时跑起来us不准,我不知道应该修改哪里。如果用8分频,那么就计1个数太少,用8分频出来的延时也不对,请问我应该修改哪里?是不是只能用定时器方式?
|
|