百为STM32开发板教程之七——SysTick定时器
实验目的:用SysTick定时器进行定时
关于SysTick定时器,相关资料可以查阅 百为stm32开发板光盘\用户手册\The Insider's Guide to Stm32.pdf ——2.4.3 系统定时器
或参考百为stm32开发板光盘\stm32电子书\Cortex-M3 技术参考手册.pdf——8.2.2 NVIC 寄存器描述——系统时钟节拍(SysTick)控制与状态寄存器
STM32的Cortex核心内部包含有一个24 位的递减计数器,含有自动装载和计数结束中断功能。
SysTick定时器有三个寄存器。分别是SysTick控制和状态寄存器,SysTick重装载值寄存器和SysTick当前值寄存器。
当前的计数值和重载值需要用计数周期来进行初始化。在控制和状态寄存器中包含了一个ENABLE位来开启定时器运行和一个TICKINT的位来启用它的中断。
SysTick控制和状态寄存器,地址为0xE000E010:
其中SysTick定时器的时钟源是可选择的,通过设置SysTick控制和状态寄存器的CLKSOURCE位,
可以设置SysTick的时钟源为系统时钟(CLKSOURCE =1),或为系统时钟的八分之一(CLKSOURCE =0)
SysTick重装载值寄存器,地址为0xE000E014:
SysTick重装载值寄存器位[23:0] RELOAD表示当计数器到达0时需要重装载到“当前值寄存器”的值。
SysTick当前值寄存器,地址0xE000E018:
了解了SysTick寄存器之后,下面就可以使用SysTick了,使用SysTick主要有三个步骤:
1、设置重装载值
2、打开SysTick计数使能
3、打开SysTick中断使能
2.0固件库相关代码:
/* 设置重装载值 */ SysTick_SetReload(9000); /* 使能SysTick计数 */ SysTick_CounterCmd(SysTick_Counter_Enable); /* 使能SysTick中断 */ SysTick_ITConfig(ENABLE);
3.5固件库相关代码:
if (SysTick_Config(SystemCoreClock / 1000)) //这里相关于上面2.0固件库的3个步骤了
{
/* Capture error */
while (1);
}
这时每1ms就会产生SysTick中断一次,在SysTick的中断服务程序SysTickHandler()里调用我们的延时计数程序即可
如:
/* stm32f10x_it.c */
void SysTickHandler(void)
{
TimingDelay_Decrement();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* main.c */
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime; while(TimingDelay != 0);
}
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
然后我们就可以通过调用Delay()进行毫秒级延时了。
|