STM32系统定时器(SysTick)笔记

发布者:DazzlingSpirit最新更新时间:2021-12-06 来源: eefocus关键字:STM32  系统定时器  SysTick 手机看文章 扫描二维码
随时随地手机看文章

一、简介

       SysTick:系统定时器,由四个寄存器控制,存在于内核,嵌套在NVIC中,所有的Cortex-M3内核的单片机都具有这个定时器。


二、相应寄存器(这里介绍常用的几个寄存器)

       ①SysTick控制及状态寄存器(地址:0xE000_E010)

在这里插入图片描述

       只有上面红色线框柱的位有效,其他位都是保留。

image.png


       ②SysTick重装载数值寄存器(地址:0xE000_E014)

在这里插入图片描述

image.png

       ③SysTick当前数值寄存器(地址:0xE000_E018)

在这里插入图片描述

image.png

三、结合框图

在这里插入图片描述

       图中STK_CLK对应的上面的CLKSOURCE,结合RCC时钟树:

在这里插入图片描述

       当CLKSOURCE位为0时,时钟是AHB/8=(72/8)M=9M,当CLKSOURCE位为1时,时钟是AHB=72M。


       图中STK_LOAD对应上面的RELOAD,STK_VAL对应上面的CURRENT。


       递减计数器(值为STK_VAL)在时钟的驱动下,从RELOAD初值开始往下递减计数到0,产生中断和置位COUNTFLAG标志。然后又从RELOAD值开始重新递减计数,如此循环。


四、SysTick定时时间计算

       ①t:一个计数循环的时间,跟RELOAD和CLK有关。

       ②CLK:72M或者9M,由CTRL寄存器配置。

       ③RELOAD:24位,用户自己配置。


       t=RELOAD*(1/CLK)。

       例:更改RELOAD的值。

       当CLK=72M时,t=(72) * (1/72M)=1us。

       当CLK=72M时,t=(72000) * (1/72M)=1ms。


       1s = 1000 ms = 1000 000 us = 1000 000 000 ns。


       如果要实现一个1ms的延时,那么将始终配置成72M,然后计数72000次。这就实现了一个1ms的延时。一般我们的程序都是毫秒级别的。


五、库函数中相关寄存器描述

       1.SysTick结构体


//在core_cm3.h中

    __IO uint32_t CTRL;     //控制及状态寄存器

    __IO uint32_t LOAD;     //重装载数值寄存器

    __IO uint32_t VAL;      //当前数值寄存器

    __IO uint32_t CALIB;    //校准寄存器


       2.SysTick配置库函数


//在core_cm3.h中定义

static __INLINE uint32_t SysTick_Config(uint32_t ticks)

  //RELOAD寄存器为24bit,最大值为2^24

  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);    

          

  //配置RELOAD寄存器的初始值                                                             

  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; 

  

  //配置中断优先级为1<<4-1 = 15,优先级为最低     

  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  

  

  //配置递减计数器的值

  SysTick->VAL   = 0;    


  //配置systick的时钟为72M

  //使能中断

  //使能systick                                      

  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | 

                   SysTick_CTRL_TICKINT_Msk   | 

                   SysTick_CTRL_ENABLE_Msk;                    

  return (0);                                                  

}


       其中SysTick_LOAD_RELOAD_Msk的定义如下,也就是2^24。


#define SysTick_LOAD_RELOAD_Pos             0                                             

#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos)


__NVIC_PRIO_BITS的定义如下。


#define __NVIC_PRIO_BITS          4


       __NVIC_PRIO_BITS通过改变这个宏定义和1<<__NVIC_PRIO_BITS中"<<"左边的数(0或1),可以实现对systick中断(内核中断)的分组。


       NVIC_SetPriority固件库函数如下。


static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

{

  //设置优先级for Cortex-M3 系统中断

  if(IRQn < 0) {

    SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } 


  //设置优先级for外设中断

  else {

    NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff);    }   

}


       在STM32的中断中,有内核中断和外设中断,内核中断并不一定比外设中断的优先级高,这得看具体的设计。


       STM32里无论是内核还是外设都是使用4个二进制位来表示中断优先级。内核中断设置的是System handler priority registers (SHPRx)寄存器:

在这里插入图片描述

       SysTick中断是设置System handler priority register 3 ( SCB_ SHPR3)寄存器:

在这里插入图片描述

       SysTick用的是上面红色线框住的的四个位(给SysTick中断分了8位,但是STM32只用高四位)。


       中断优先级的分组对内核和外设同样适用,当比较的时候,只需把内核外设的中断优先级的四个位按照外设的中断优先级来解析即可,即认为的分出抢占优先级和子优先级。

关键字:STM32  系统定时器  SysTick 引用地址:STM32系统定时器(SysTick)笔记

上一篇:STM32F10xx外设GPIO模式配置
下一篇:正点原子STM32学习笔记——MPU6050介绍

推荐阅读最新更新时间:2024-11-12 10:21

STM32 串口通信识别程序
代码现象:从串口发一个数据,串口能够返回相应的值, #include stm32f10x.h #include stm32f10x_gpio.h #include stm32f10x_rcc.h #include stm32f10x_usart.h #include misc.h #include string.h #define RX_BUF_SIZE 80 volatile char RX_FLAG_END_LINE = 0; volatile char RXi; volatile char RXc; char RX_BUF = {''}; //此处我删去了vola
[单片机]
STM32 mdk软件仿真时过不去时钟的问题
stm32的程序用MDK软件仿真时,由于系统时钟初始化函数里有个等待系统时钟准备好的循环,所以过不去。 设置方式如下:这么设置之后仿真时就可以直接进入main函数了。
[单片机]
<font color='red'>STM32</font> mdk软件仿真时过不去时钟的问题
STM32去读取CCS811气体传感器的数据
## 1 准备工作 1) 硬件设备:CCS811模块、六合一、USB-TTL、杜邦线、STM32F103C8T6单片机。给大家看下图片。 CCS811 STM32F103C8T6 2)软件准备 : KEIL 5 (5.17版本的) 3)示例代码: 游客,本帖隐藏的内容需要积分高于 1 才可浏览,您当前积分为 0 ## 2 接线方式 1、使用数据线将STM32F103C8T6与电脑连接通信 2、SHT30与STM32F103C8T6使用杜邦线连接。具体接线如下图所示: 具体接线方式如下: STM32F103C8T6---------------SHT30 VCC -------------------------V
[单片机]
用<font color='red'>STM32</font>去读取CCS811气体传感器的数据
STM32之基本调试设置
以 ST-LINK为例 STEP1、选中ST-LINK仿真器 STEP2、选好自己程序对应的仿真时钟 可能会有一个小问题,那就是如何选自己的时钟呢,这个可以看 这个文件夹中 使用的是哪个宏定义就对应使用的是哪个时钟!
[单片机]
<font color='red'>STM32</font>之基本调试设置
STM32 DMA传输的问题分析
问题1、 用户使用STM32G473RET6芯片,开发环境STM32CubeMX+Keil(LL库)。使用DMA1通道1,在半传输中断和完全传输中断里,拷贝ADC采集的数据。在应用过程中发现DMA半传输中断和完全传输中断不能独立使用。 具体体现: 1、在DMA1初始化时,打开了半传输中断,关闭完全传输中断,照样能触发完全传输中断 LL_DMA_EnableIT_HT(DMA1,LL_DMA_CHANNEL_1);//打开DMA1半传输中断 LL_DMA_DisableIT_TC(DMA1,LL_DMA_CHANNEL_1);//关闭DMA1完全传输中断 2、在DMA1初始化时,关闭了半传输中断,打开完全传输中断,照样能触发半传
[单片机]
<font color='red'>STM32</font> DMA传输的问题分析
STM32常用通信——USART,IIC,SPI,CAN
STM32常用通信 CAN通信 CAN根据两根线上电位差来判断总线电平,总线电平分为显性电平和隐形电平,两者必居其一,发送方通过控制总线电平发送信息给接收方。 显性电平对应逻辑0,两根线压差2.5V左右,隐形电平对应逻辑1,压差为0。总线上可以挂很多单元,显性电平具有优先权,一个单元 显性电平,则总线为显性。CAN总线起止断有120R的电阻,用于做阻抗匹配,减少回波反射。 CAN的位时序: 同步段SS SS 传播时间段PTS 相位缓冲段1 PBS1 BS1 相位缓冲段2 PBS2 BS2 1位分为四段,每段由若干Tq组成, 波特率=1/(Tq+TBS1+TBS2) TBS1=Tq*(TS1 +1) TBS2=Tq*(
[单片机]
<font color='red'>STM32</font>常用通信——USART,IIC,SPI,CAN
基于STM32的八种GPIO输入输出模式解析
最近在看数据手册的时候,发现STM32的GPIO输入输出模式的配置种类有8种之多(输入和输入各4种): (1)GPIO_Mode_AIN模拟输入 (2)GPIO_Mode_IN_FLOATING浮空输入 (3)GPIO_Mode_IPD下拉输入 (4)GPIO_Mode_IPU上拉输入 (5)GPIO_Mode_Out_OD开漏输出 (6)GPIO_Mode_Out_PP推挽输出 (7)GPIO_Mode_AF_OD复用开漏输出 (8)GPIO_Mode_AF_PP复用推挽输出 我们平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但对于各种模式下IO口的内部电路和典型应用,STM32的数据手册中也未曾做过详细的说明和归纳
[单片机]
基于<font color='red'>STM32</font>的八种GPIO输入输出模式解析
STM32(Cortex-M3)中有两个优先级的概念
STM32(Cortex-M3)中有两个优先级的概念 抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved