[STM32单片机]之systick定时器学习
systick的两大作用:
1、可以产生精确的延时
2、可以提供给操作系统一个单独的心跳(时钟)节拍
通常实现Delay(N)函数的方法为:
for(i=0;i<=x;i++); //x对应于N毫秒的循环值
对于STM32系列微处理器来说,执行一条指令只有几十个ns,进行for循环时,要实现N毫秒的x值非常大,而且由于系统牝鹿的宽广很难计算除延时N毫秒的精确值。针对STM32微处理器需要重新设计一个新的方法去实现该功能以实现在程序中使用Delay(N)。
cortex-M3的内核中包含一个systick时钟。systick为一个24位递减计数器systick设定初值并使能后每经过1个系统时钟周期,计数器就减一/计数器到0时systick计数器自动重装初值并继续计数同时内部的countflag标志会置位触发中断(如果中断使能)。
外部晶振为8Mhz,9倍频,系统时钟为72MHZ,systick的最高频率为9MHz(最大为HCLK/8),在这个条件下把所以systick校验值设置成9000将systick时钟设置为9MHz就能产生1ms的时基值,即systick产生1ms的中断。
systicl寄存器内容:
CTRL systick控制和状态寄存器
LOAD systick重装载值寄存器
VAL systick当前值寄存器
CALIB systick校准值寄存器


使用HAL库进行初始化编程;
初始化设置步骤如下
1、调用systick_CounterCmd()失能systick计数器
2、调用systick_ITCconfig()失能systick中断
3、调用systick_CLKSourceConfig()设置systick时钟源
4、调用systick_SetReload() 设置systickc重装载值。
5、调用systick_ITConfig()使能systick中断
6、调用systick_CounterCmd()开启systick计数器
例程:
void SysTick_Config(void) { /*disable systick counter */ SysTick_CounterCmd(SysTick_Counter_Disable); /*disable systick interrupt */ SysTick_ITConfig(Disable); /*Counter HCLK clock as SysTick clok source */ SysTick_CLKSourceComfig(SysTick_CLKSource_HCLK_Div8);//SysTick 时钟源为 AHB 时钟除以 8; /*SysTick interrupt each 1000Hz with HCLK equal to 72Mhz */ SysTick_SetReload(9000); /*Enable the SysTick interrupt*/ SysTick_ITConfig(ENABLE) ; }

浙公网安备 33010602011771号