systick

来源:互联网 发布:淘宝找一件代发货源 编辑:程序博客网 时间:2024/05/27 09:45
2013年1月8号 星期三 
SysTick定时器:它是一个24位的倒计数定时器,注意,是倒计数!当计到0时它就会从RELOAD寄存器中自动重装载定时初值。只要不把CTRL寄存器中的ENABLE为清0,它就永不停息!SysTick定时器被捆绑在NVIC中,异常号15


SysTick定时器的用途:
1.产生操作系统的时钟节拍
2.便于不同处理器之间程序移植
3.作为一个闹铃用于测量时间 但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作


有四个寄存器控制SysTick定时器
STK_CSR, 0xE000E010 -- 控制及状态寄存器 
STK_LOAD, 0xE000E014 -- 重装载数值寄存器 
STK_VAL, 0xE000E018 -- 当前数值寄存器 
STK_CALRB, 0xE000E01C -- 校准数值寄存器
寄存器定义在哪里?答:在core_cm3.h中!


SysTick的时钟来源:
选择外部时钟源时(FCLK),则Systick时钟为HCLK /8
选择内核时钟源时(STCLK),则Systick时钟为HCLK    (72M)


SysTick编程:
SysTick为递减计数器,设定初值后计数到0时,SysTick计数器自动重装初值并计数,同时触发中断每次减1用的时间是1/72M,即计算1秒要72000000次。1ms就是72000次。


库函数所在的地方:
SysTick_CLKSourceConfig()   //SysTick时钟源选择
SysTick Config(uint32_ticks)//初始化systick为HCLK,并开启中断 uint32_ticks表示的两个中断之间的时间间隔
Systick中断服务函数:void SysTick Handler(void);


延时编程步骤:
1.计算出产生1us 需要多少个SysTick时钟周期 fac_us;
2.计算出RELOAD寄存器的值也就是产生相应延时所需要的时钟周期数RELOAD = fac_us * nus
3.开启计数
4.循环检测计数到0的标志位;
5.清空计数器,关闭定时器
0 0