STM32 SysTick定时器
2013-12-21 21:07
239 查看
1、Cortex-M3 SysTick定时器
Cortex-M3处理器内部包含了一个简单的定时器SysTick。它是一个24位的倒计数定时器,当计到0时,将从Reload寄存器中自动重新装载定时初值,只要不把它在SysTick Control & Status R中的使能位清除,就永不停息。因为所有的CM3芯片都带有这个定时器,软件在不同CM3器件间的移植工作就得以化简。SysTick定时器能产生中断,CM3为它专门开出一个异常类型,异常号为15。有4个与SysTick相关的寄存器,它们都位于NVIC空间,如下图(细节请参考《Cortex-M3NVIC》一章):
SysTick Control & Status R(系统时钟控制与状态寄存器)
SysTick Reload Value R(系统时钟重装值寄存器)
SysTick Current Value R(系统时钟当前值寄存器)
SysTick Calibration Value R(系统时钟校准值寄存器)
校准值寄存器使系统即使在不同的CM3产品上运行,也能产生恒定的SysTick中断频率。
2、STM32中使用SysTick实现延时
下面在STM32中使用SysTick实现延时功能,它的好处是既不占用中断,也不系统定时器。库函数中SysTick->CTRL、SysTick->LOAD、SysTick->VAL分别对应以上三个寄存器。
u32 fac_us; u32 fac_ms; // From the Clock Tree, we can know the SysTick's clock is 1/8 of HCLK if the STCLK selected. // And SysTick's clock equals with HCLK if FCLK selected. void Delay_Init() { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);// Could add this line or not, because the default Clock is STCLK fac_us = SystemCoreClock / 8000000; // the value of SystemCoreClock is 72MHz fac_ms = fac_us * 1000; } // nus <= (2^24) / fac_us, (nus <= 1,864,135.111us) void Delay_us(u32 nus) { u32 temp; SysTick->LOAD = nus * fac_us; SysTick->VAL = 0x0; SysTick->CTRL = SysTick_CTRL_ENABLE_Msk; do { temp = SysTick->CTRL; } while (temp & 0x1 && !(temp & (1 << 16))); SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->VAL = 0x0; } // nms <= (2^24) / fac_ms, (nms <= 1,864.135s) void Delay_ms(u32 nms) { u32 temp; SysTick->LOAD = nms * fac_ms; SysTick->VAL = 0x0; SysTick->CTRL = SysTick_CTRL_ENABLE_Msk; do { temp = SysTick->CTRL; } while (temp & 0x1 && !(temp & (1 << 16))); SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->VAL = 0x0; } int main() { Delay_Init(); LED0 = 1; Delay_ms(1000); LED0 = 0; }
相关文章推荐
- 关于STM32的systick定时器的详细说明
- stm32的Systick定时器
- STM32菜鸟成长记录---系统滴答定时器(systick)应用
- STM32菜鸟成长记录---系统滴答定时器(systick)应用1
- STM32 Systick定时器
- STM32 SysTick定时器常见问题及延时函数的实现
- R1 STM32的系统定时器SysTick笔记
- 关于STM32的systick定时器的详细说明
- stm32笔记:Systick系统滴答定时器
- 关于STM32的systick定时器的详细说明
- STM32的时钟(二):SysTick定时器实现Delay()函数
- STM32学习及应用笔记一:SysTick定时器学习及应用
- stm32之SysTick定时器
- STM32的系统滴答定时器(Systick)
- STM32之SysTick(系统滴答定时器)
- Stm32 Systick定时器
- stm32在rt-thread上的SysTick(系统定时器)
- STM32之SysTick嘀嗒定时器
- STM32的系统滴答定时器(Systick) 彻底研究解读
- stm32笔记:Systick系统滴答定时器(认识4)