SysTIck是STM32中特有的体系时钟SysTIck有两个功用:1.可以发生准确延时;2.可以提供给体系一个独自的时钟节拍。一般延时程序:
DELAY(N)
{ for( i=0 ; i《=x ; i++ ) ;
}
关于STM32系列的微处理器中,履行一条指令只需求几十ns,进行for循环时,要完成N毫秒延时,那么x的含义十分大,并且因为体系频率的广大,很难计算出延时N毫秒的准确值,那么在一些高速电路中,是不允许的,简单出现问题,很难查找出来。尤其在液晶驱动中,延时要求十分准确。针对STM32的处理器中,需求从头规划一个办法完成该功用,来替代DELAY(N)延时;
cortex-m3中包括了一个SysTIck时钟,SysTIck是一个24位的递减计数器,设定初值并使能后,每通过1个体系时钟周期,该计数器减1,计数到零时,systick主动重装初值,并持续计数,一起内部的COUNTFLAG标志位会置1,触发中止(中止假如使能);
外部晶振是8MHz,9倍频,体系时钟为72MHz,systick的最大值为9MHz(最大值为HCLK/8),在这个条件下,假如将计数器的效验值设置为9000,将systick设置为9MHz,可以发生1ms的时基值,即systick发生1ms的中止,
systick时钟共包括4个寄存器:
1.CTRL COUNTFLAG CLKSOURCE TICOUNT ENABLE
2.LOAD
3.VAL
4.CALIB
使用ST库函数设置Systick的办法
1.调用SysTick_CountCmd() 失能SysTick计数器
2.调用SysTick_ITConfig() 失能SysTick中止
3.调用SysTick_CLKSourceConfig() 装备SysTick的时钟源
4.调用SysTick_SetReload() 设置SysTick 的效验值
5.调用SysTick_ITConfig() 使能SysTick中止
6.调用SysTick_CountCmd() 使能SysTick计数器
void SysTick_Config() //装备好,并将计数器使能
{
SysTick_CountCmd(SysTick_CountCmd_DISABLE);
SysTick_ITConfig(DISABLE);
SysTick_CLKSourceConfig( SysTick_CLKSourceConfig_EXTERN);
SysTick_SetReload(SysTick_SetReload_9000);
SysTick_ITConfig(ENABLE);
SysTick_CountCmd(SysTick_CountCmd_ENABLE);
}
延时函数:
void Delay_MS(u16 diy)
{
Delay=diy;
while(Delay);
}
extern vu16 Delay;
void SysTickHandle() /systick中止服务程序/
{
Delay–;
}
假如延时较长,那么该延时程序必定程度上仍是在耗CPU的资源。