五、SysTick系统滴答定时器

1.寄存器介绍

  (1)CTRL控制及状态寄存器。

位段 名称 描述
16 COUNTFLAG 当读取该寄存器时,计数到0,则该位为1,读取该位,自动清零
2 CLKSOURCE 0=外部时钟源,1内核时钟
1 TICKINT 1=倒数到0时产生SysTick异常请求,0=数到0时无动作
0 ENABLE 定时器使能位

  (2)LOAD重装载数值寄存器。

位段 名称 描述
23:0 RELOAD 当倒数到0时,将被重装载的值

  (3)VAL当前数值寄存器。

位段 名称 描述
23:0 CURRENT 读取时返回当前倒计数的值,写它则使之清零,同时会清除CTRL控制及状态寄存器中的COUNTFLAG标志

2.开发延时函数步骤

  (1)选择时钟源;

  (2)计算计数周期;

  (3)编写延时函数。

3.代码示例

  (1)选择时钟源、计算计数周期

1 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//配置时钟源
2 fac_us=SystemCoreClock/8/1000000;//计算1us的计数周期,9个周期
3 fac_ms=fac_us*1000;//计算1ms的计数周期9000个周期

  (2)编写延时函数

 1 void Delay_Us(u32 nus)
 2 {
 3     u32 temp;
 4     SysTick->LOAD = fac_us*nus;     //自动重装载值寄存器,当计数到0时,将被重装载的值
 5     SysTick->VAL = 0x00;            //当前值寄存器,返回当前倒计数的值,写它则使之清零
 6     SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;          //使能,开始计数
 7     do{
 8         temp=SysTick->CTRL;
 9     }while((temp&0x01)&&!(temp&(1<<16)));   //使能位没有清零,并且COUNTFLAG=0(没有数完)
10     SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;          //失能,停止计数
11     SysTick->VAL = 0x00;
12 }

4.库函数位置讲解

SysTick_CLKSourceConfig:时钟配置函数,misc.c文件中定义。
SystemCoreClock:系统时钟定义,system_stm32f10x.h中定义。
SysTick_CTRL_ENABLE_Msk:使能标志位定义,core_cm3.h中定义。
posted @ 2023-04-26 14:21  稚终KINO  阅读(127)  评论(0)    收藏  举报