2020-09-13

STM32F103之systick定时器

systick滴答定时器是M3内核共有的,有了systick定时器后,方便于程序的移植。

一、首先打开STM32中文参考手册

systick定时器是24位递减定时器,其共有四个寄存器可 操作,如下图:

2020-09-13

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.校准寄存器

。。。这个没有用过,不知道干啥的,好像用不到,因为现在的晶振都非常的准确了,也不怎么用来校准了。

库函数中的对应定义:

2020-09-13

二、库函数中的初始化操作

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;
}