您的位置:首页 > 其它

stm32笔记:Systick系统滴答定时器

2016-04-11 00:00 399 查看
摘要: STM32f10X 的Systick系统滴答定时器的使用

Systick :系统心跳定时器,提供系统节拍
裸机程序中可作为独立的延时定时器

一:用途

1.产生操作系统的时钟节拍

2.便于不同处理器之间程序移植

SysTick定时器被捆绑在NVIC中,异常号15

3.作为一个闹铃测量时间用于测量时间,

但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作

二:时钟树

以AHB时钟或者AHB/8作为运行时钟。



三:寄存器

它有四个寄存器
STK_CSR, 0xE000E010 -- 控制寄存器

STK_LOAD, 0xE000E014 -- 重载寄存器

STK_VAL, 0xE000E018 -- 当前值寄存器

STK_CALRB, 0xE000E01C -- 校准值寄存器

stm32的时钟源

选择外部时钟源时,则Systick时钟为HCLK /8

选择内核时钟源时,则Systick时钟为HCLK

延时原理

systick定时器是24位的递减计数器,设定初值并使能它后,脉冲计数值被保存到当前值寄存器(STK_VAL)

它会每个系统时钟周期计数器减1,计数到0 时,触发中断,将从RELOAD 寄存器中自动重装载定时初值到STK_VAL。

只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息.

四:代码

AHB时钟1/72 000 000 ,

初始化:初始化已经把嘀嗒定时器打开了,为了可控,代码中关闭了定时器。

SysTick->CTRL &= SysTick_CTRL_ENABLE_Msk;主程序调用打开嘀嗒。

void SysTick_Init(void)
{
/* SystemFrequency / 1000    1ms中断一次
* SystemFrequency / 100000	 10us中断一次
* SystemFrequency / 1000000 1us中断一次
*/
//	if (SysTick_Config(SystemFrequency / 100000))	// ST3.0.0库版本
if (SysTick_Config(SystemCoreClock / 100000))	// ST3.5.0库版本
{
/* Capture error */
while (1);
}
// 关闭滴答定时器
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
[code=cpp]	     // 打开闭滴答定时器
//SysTick->CTRL &=   SysTick_CTRL_ENABLE_Msk;


}[/code]
中断:

stm32f10x_it.c中的接口代码

void SysTick_Handler(void)
{
TimingDelay_Decrement();
}

void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
裸机中嘀嗒并不是一直开启的,延时可以这样做。
void Delay_us(__IO u32 nTime)
{
TimingDelay = nTime;

// 使能滴答定时器
SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;

while(TimingDelay != 0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stm32 Systick