STM32F103ZET6系统定时器SysTick

1、系统定时器SysTick的简介

  系统定时器SysTick属于内核外设,内嵌在NVIC中。SysTick是一个24位的向下递减的计数器,计数器根据SysTick的时钟源计数,当SysTick的计数器计数到0的时候,SysTick就产生一次中断,并且SysTick的重装载寄存器会给计数器重新赋值,以此循环往复。

  SysTick一般用于带操作系统的应用,用来产生时基,维持操作系统的心跳。

2、SysTick的寄存器

  SysTick有4个寄存器:

    • 控制及状态寄存器CTRL;
    • 重装载数值寄存器LOAD;
    • 当前数值寄存器VAL,即SysTick的计数器;
    • 校准数值寄存器CALIB;

  一般只需要配置CTRL、LOAD、VAL这三个寄存器,CALIB基本不使用。

  控制及状态寄存器CTRL

  CTRL的bit16位COUNTFLAG用来判断SysTick计数器是否递减到0,当SysTick递减到0的时候,COUNTFLAG会被置1,如果没有使用SysTick的中断功能,可以通过查询该位是否为1来判断SysTick定时器是否溢出。

  CTRL的bit2位CLKSOURCE用来选择SysTick的时钟源:

  当CLKSOURCE = 0时,SysTick的时钟源为AHB/8;

当CLKSOURCE = 1时,SysTick的时钟源为AHB;

一般ABH为SYSCLK的1分频,所以SysTick的时钟源可以选择为SYSCLK或SYSCLK/8。

  CTRL的bit1位TICKINT用来设置当SysTick计数到0的时候是否产生中断:

  当TICKINT = 0时,在SysTick计数到0的时候不会产生中断;

当TICKINT = 1时,当SysTick计数到0的时候产生中断。

  CTRL的bit1位ENABLE是SysTick的使能位,当ENABLE = 1时,SysTick开始计数。

  重装载数值寄存器RELOAD

  RELOAD寄存器是SysTick的自动重载数值寄存器,当SysTick的计数器递减到0的时候,RELOAD寄存器的值会重新赋值给SysTick的计数器,让SysTick可以重复计时。

  当前数值寄存器VAL

  当去读取VAL寄存器的值时,返回的是SysTick计数器的当前值;当去写VAL寄存器的时候,会使SysTick计数器的值清零,而且还会清除CTRL寄存器的bit16位COUNNTFLAG。

3、HAL库操作SysTick

  SysTick相关的寄存器定义和库函数操作都是在Core_CM3.h头文件内实现的。

  在HAL中使用SysTick比较简单,只需要通过Core_CM3.h文件中的SysTick_Config函数就可以了,通过将参数传入SysTick_Config函数设置SysTick的自动重载数值。

  调用SysTick_Config函数,SysTick的时钟源会被配置成AHB,并且使能中断,SysTick的中断优先级也在SysTick_Config函数中配置了。如果需要更改配置,可以找到SysTick_Config函数,并修改。

  SysTick的中断服务函数在stm32f1xx_it.c文件中,SysTick的中断处理过程在SysTick_Handler中实现。

  初始化代码如图:

  中断服务函数

原文地址:https://www.cnblogs.com/h1019384803/p/11109406.html

时间: 2024-11-02 17:28:26

STM32F103ZET6系统定时器SysTick的相关文章

使用系统定时器SysTick实现精确延时微秒和毫秒函数

SysTick定时器简介 SysTick定时器是存在于系统内核的一个滴答定时器,只要是ARM Cortex-M0/M3/M4/M7内核的MCU都包含这个定时器,它是一个24位的递减定时器,当计数到 0 时,将从RELOAD 寄存器中自动重装载定时初值,开始新一轮计数.使用内核的SysTick定时器来实现延时,可以不占用系统定时器,由于和MCU外设无关,所以代码的移植,在不同厂家的Cortex-M内核MCU之间,可以很方便的实现.而东芝的这款TT_M3HQ开发板使用的TMPM3HQFDFG芯片,正

Cortex系统定时器--SysTick

1.SysTick寄存器结构 SYSTICK 寄存器结构,SysTick_TypeDeff,在文件"stm32f10x_map.h"中定义如下: typedef struct  {     vu32 CTRL;      vu32 LOAD;      vu32 VAL;      vuc32 CALIB;  } SysTick_TypeDef; SysTick 外设声明于文件"stm32f10x_map.h": #define SCS_BASE ((u32)0xE

SysTick—系统定时器

本章参考资料<ARM Cortex?-M4F 技术参考手册> -4.5 章节 SysTick Timer(STK), 和4.48 章节 SHPRx,其中 STK 这个章节有 SysTick 的简介和寄存器的详细描述.因为SysTick 是属于 CM4 内核的外设,有关寄存器的定义和部分库函数都在 core_cm4.h 这个头文件中实现.所以学习 SysTick 的时候可以参考这两个资料,一个是文档,一个是源码. SysTick 简介SysTick-系统定时器是属于 CM4 内核中的一个外设,内

STM32之SysTick(系统定时器)

SysTick定时器是被捆绑在NVIC中的,用于产生SysTick异常(异常号是15).(同样,玩过51单片机的都知道定时器的作用了) 在STM32在内核部分是包含了一个简单的定时器–SysTick timer.因为在所有的Cortex-M3芯片上都有这个定时器,所以软件在不同芯片生产厂商的Cortex-M3器件间的一只工作就得以化简. 该定时器的时钟源可以是内部时钟( FCLK, CM3 上的自由运行时钟),或者是外部时钟(CM3 处理器上的 STCLK 信号).不过, STCLK 的具体来源

SysTick系统定时器(功能框图和优先级配置)

SysTick-系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中.系统定时器是一个 24bit (2^24)的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK 等于 72M.当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复. 因为 SysTick 是属于 CM3 内核的外设,所以所有基于 CM3 内核的单片机都具有这个系统定时器,使得软件在 CM3 单片机中可以很容易的移植.系统定时器一般用于操作系统

第18章 SysTick—系统定时器

本章参考资料<Cortex?-M7内核编程手册>-4.4 章节SysTick Timer(STK),和4.38章节SHPRx,其中STK这个章节有SysTick的简介和寄存器的详细描述.因为SysTick是属于CM7内核的外设,有关寄存器的定义和部分库函数都在core_cm7.h这个头文件中实现.所以学习SysTick的时候可以参考这两个资料,一个是文档,一个是源码. 18.1  SysTick简介 SysTick-系统定时器是属于CM7内核中的一个外设,内嵌在NVIC中.系统定时器是一个24

利用系统定时器产生延时的方法

/********************************************************************************** * 文件名 :SysTick.c * 描述 :SysTick 系统滴答时钟10us中断函数库,中断时间可自由配置, * 常用的有 1us 10us 1ms 中断. * 库版本 :ST3.5.0 *********************************************************************

系统定时器(滴答定时器)

  ARM Cortex-M3内核中有一个Systick定时器,它是一个24位(0~(2^24-1))的倒计数定时器,当计数到0时,它就会从Load寄存器中自动重装定时初值,只要不把CTRL寄存器中的ENABLE清0,它就永不停.   时钟源可以是内部时钟FCLK或外部时钟STCLK        配置系统定时器步骤:      ①选择时钟源       ②设定重载数(reload)       ③开启中断       ④启动滴答定时器 在core_cm3.h中有关于系统定时器的配置:    

STM32F030, 使用嘀嗒定时器Systick实现LED闪烁

本文主要解决两个问题 1 STM32的IO口要反转,怎么实现? 2 嘀嗒定时器systick的配置 解答1: 单片机的口,反转非常easy.sbit led = P1 ^6;  led = ~led;而STM32的口要让它反转.如何实现呢? 非常easy,对想要反转的IO口取异或: GPIOx->ODR ^= GPIO_Pin; 解答2: SysTick是1个24bit递减计数器 SysTick_Config(SystemFrequency / 10)   函数的形參就是systick重装定时器