ms和us级延时函数的实现
2020 Sept. 8th
用sysTick实现延时
寄存器说明参考火哥(膜拜)的这篇博客:第18章 SysTick—系统定时器
- 用中断输出:
//调用core_cmX.h 里的这个函数,来配置SysTick外设
SysTick_Config(72000);
#if 0 //下面是 SysTick_Config 函数的定义
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /*入口参数检测*/
SysTick->LOAD = ticks - 1; //把输入的参数写到LOAD寄存器里去
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /*中断优先级配置*/
SysTick->VAL = 0; //计数值归零
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | /*设置时钟源*/
SysTick_CTRL_TICKINT_Msk | /*使能中断标志位*/
SysTick_CTRL_ENABLE_Msk; /*使能计数器*/
return (0);
}
#endif //SysTick_Config函数的定义
//这个函数达到的效果是 每1s 输出 f(CLKSOURCE)/ticks 个中断,
//即每隔 ticks/f(CLKSOURCE) s 输出一个中断。
//eg: 当 f(CLKSOURCE)=72MHz 时 (即 f(AHB)=72MHz 为时钟源时),
// 写入 ticks=72000 ,则每 1ms 输出一个中断
//ms级和us级只是ticks的写入值不同
- 不用中断输出: </