STM32F103之systick定时器
systick滴答定时器是M3内核共有的,有了systick定时器后,方便于程序的移植。
一、首先打开STM32中文参考手册
systick定时器是24位递减定时器,其共有四个寄存器可 操作,如下图:
1.控制及状态寄存器
第0位:为使能定时器位,0为不开启定时器,1为定时器开启,默认为0
第1位:是否产生中断,0为不产生中断,1为产生中断,默认为0
第2位:时钟源选择位,0为外部时钟,1为内核时钟,默认为0
第16位:数据状态位,若定时器倒数为0时,该为置1,否则为0,默认为0
2.重装载寄存器
0:23位:当倒数计数为0时,该位被重新装载为设定的最大值
3.当前数值寄存器
可以读取到当前定时器的数值,若写该寄存器,则会把控制寄存器的16位置0
4.校准寄存器
。。。这个没有用过,不知道干啥的,好像用不到,因为现在的晶振都非常的准确了,也不怎么用来校准了。
库函数中的对应定义:
二、库函数中的初始化操作
SysTick->LOAD 重载寄存器,存放需要设置的寄存器初始值、
SysTick->VAL 当前数值计数器
SysTick->CTRL,状态及控制寄存器
例如:void delay_ms(u32 de_ms)
{
u32 temp;
SysTick->LOAD = de_ms*time_ms;
SysTick->VAL = 0X00;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
do{
temp = SysTick->CTRL;
}while(!(temp&(1<<16)));
SysTick->VAL = 0X00;
SysTick->CTRL = 0x00;
}