zoukankan      html  css  js  c++  java
  • 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中实现。

      初始化代码如图:

      中断服务函数

     

  • 相关阅读:
    linux基础命令笔记
    linux日常常用命令分析
    43.QQ聊天软件GUI窗口编写
    42.线程概念及线程池
    pycham中报:ModuleNotFoundError: No module named 'pymysql'
    python os模块
    python用类的方式创建线程---自创建类
    python server端并发聊天
    python文件上传
    python编码--解码
  • 原文地址:https://www.cnblogs.com/h1019384803/p/11109406.html
Copyright © 2011-2022 走看看