STM32学习(四) SyxTick 实验

发布者:Jinyu521最新更新时间:2025-01-15 来源: jianshu关键字:STM32  实验  内核 手机看文章 扫描二维码
随时随地手机看文章


Systick 简介

  • SYSTick 系统定时器是 CM4 内核的一个外设(所有 CM4 内核的单片机都有),内嵌在 NVIC 中;

  • 24bit 的向下递减计数器,计数器每计数一次的时间是 1/SYSCLK,一般设置 SYSTICK 为168MHz(以STM32F407为例);

  • 当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复;

  • 一般用于产生时基,维持系统心跳

SysTick 寄存器讲解

寄存器功能
CTRL控制及状态寄存器
LOAD重装载数值寄存器
VAL当前数值寄存器
CALIB校准数值寄存器

CTRL 寄存器

bit[2]          CLKSOURCE, 时钟源选择,0-AHB/8,1-AHB

bit[1]          TICKINIT, 1-SysTick倒计数到0时产生异常请求(即中断)

bit[0]          ENABLE,1-使能


RELOAD 重装载值寄存器

  • 当计数到0时,重新装载到数值寄存器的值


bit[23~0]       低24位有效

VAL 当前数值寄存器

SysTick 配置库函数

  • SysTick 属于内核外设,跟普通外设的中断优先级有些区别,并没有抢占优先级和子优先级的说法;
    用库函数编程时,我们只需要使用 SysTick_Config() 进行配置即可,函数如下,在 cm4.h 文件中:


// System Tick Configuration, The function initializes the System Timer and its interrupt, and starts the System Tick Timer.

// param [in]  ticks  Number of ticks between two interrupts.


__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

    // 参数检查,重载值最大是24位

  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); }


    /* set reload register */

  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         

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


    /* Load the SysTick Counter Value */

  SysTick->VAL   = 0UL;


    // 时钟源选择 AHB 168MHz,计数到0时产生中断,使能系统定时器                                             

  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

                   SysTick_CTRL_TICKINT_Msk   |

                   SysTick_CTRL_ENABLE_Msk;


  return (0UL);

}


SysTick 初始化函数

如下代码,配置 ticks 为 SystemCoreClock / 1000,即 168K,即计数168K次时,产生一次中断;

而计数一次的时间是:1/CLKAHB,即 1/168M 秒,所以计数168K次用时 1ms,意即 每ms产生一次 SysTick 中断;

在 SysTick 中断处理函数中可以累加经过的 毫秒值,从而达到记录时间的目的;


void SysTick_Init(void){
    /* SystemFrequency / 1000    1ms中断一次
     * SystemFrequency / 100000  10us中断一次
     * SystemFrequency / 1000000 1us中断一次
     */
    if (SysTick_Config(SystemCoreClock / 1000))
    {
        /* Capture error */
        while (1);
    }}

延时函数 和 SysTick 中断处理函数


static __IO u32 TimingDelay;void delay_ms(__IO u32 nTime){
    TimingDelay = nTime;

    while (TimingDelay != 0);}void TimingDelay_Decrement(void){
    if (TimingDelay != 0x00)
    {
        TimingDelay--;
    }}void SysTick_Handler(void){
    TimingDelay_Decrement();}



关键字:STM32  实验  内核 引用地址:STM32学习(四) SyxTick 实验

上一篇:STM32学习(三)串口实验
下一篇:stm32 freertos 任务不能调度(启动)可能原因

推荐阅读最新更新时间:2026-03-25 11:08

用FPGA搭建一个STM32内核
1.必要的基础知识 为了更快的完成在FPGA上实现ARM Cortex-M3软核,一些必要的基础知识还是要有的! FPGA开发基础知识,如FPGA开发流程,设计、综合、布局、布线、约束、下载 Xilinx Vivado开发环境使用基础,如BlockDesign设计方式,管脚分配,Bit流文件生成与下载 ARM Cortex-M3内核的使用基础,如STM32、MM32、GD32、CH32等微控制器的开发。 Keil-MDK开发环境的使用基础,基本的工程建立、编译、下载流程。 如果以上知识都具备,那么,恭喜你!可以在2小时内完成ARM Cortex-M3软核在FPGA上的实现。 2.Cortex-M3 FPGA IP核下载 首先,
[单片机]
用FPGA搭建一个<font color='red'>STM32</font><font color='red'>内核</font>?
STM32复位来源 以及系统和内核复位区别
1STM32的复位和时钟控制 RCC:Reset and Clock Control 每一块STM32中都有这么一个RCC复位和时钟控制模块。 STM32的复位为三类:系统复位、电源复位和后备域复位。 系统复位: 1. NRST引脚上的低电平(外部复位) 2. 窗口看门狗计数终止(WWDG复位) 3. 独立看门狗计数终止(IWDG复位) 4. 软件复位(SW复位) 5. 低功耗管理复位 电源复位: 1. 上电/掉电复位(POR/PDR复位) 2. 从待机模式中返回 备份区域复位: 1. 软件复位,备份区域复位可由设置备份域控制寄存器(RCC_BDCR)中的BDRST位产生。 2. 在VDD和VBAT两者掉电的前提下, VDD或VB
[单片机]
<font color='red'>STM32</font>复位来源 以及系统和<font color='red'>内核</font>复位区别
STM32调试诊断工具 | ST-LINK Utility查看内核运行状态
ST-LINK Utility 是一款针对 STM32 的下载编程工具,目前它被 STM32CubeProgrammer 代替了,官方已经停止更新,但它同样是一款很好的工具,也相对比较稳定。 1ST下载编程工具 针对 STM32 的编程工具,官方出了三个比较常用的工具,分别是:STVP、 ST-LINK Utility 和 STM32CubeProgrammer。 1.STVPSTVP:ST Visual Programmer,它是一款比较老的工具,之前ST早期的单片机编程。 STVP是一套可视化编程工具,提供了一个面向ST单片机的Flash全功能烧写环境,可方便的用于读取、写入和校验芯片内部存储器与选项字节。 2.S
[单片机]
利用STM32 ST-LINK Utility查看内核运行状态
本文围绕STM32 ST-LINK Utility讲几点主要功能及相关拓展知识: 1.STM32编程下载; 2.利用该编程工具查看内核运行状态; 3.Option Bytes选项字配置; 1STM32编程下载 STM32 ST-LINK Utility一个最重要的功能就是对STM32进行编程。支持常见的hex、bin文件,还有早期摩托罗拉定义的srec和s19格式的文件(说实话,我都不了解这两种格式的文件)。 这里主要想提示一下初学者:hex带有地址,而bin文件不带地址,下载时需要填写起始地址。 下面看两张在STM32 ST-LINK Utility中下载选择文件的图大家就明白了。 1.选择hex下载,地址不
[单片机]
利用<font color='red'>STM32</font> ST-LINK Utility查看<font color='red'>内核</font>运行状态
基于ARM Cortex M0+内核STM32 L0系列入门介绍
超低功耗Cortex-M0+ L0系列入门 L0系列是于2014年新推出的超低功耗的MCU,基于 Cortex M0+内核。目前有0x1,STM32L0x2,STM32L0x3三个子系列,默认主频为32M,都是8KB,最大片上flash为64KB。
[机器人]
stm32 Ctext-M3内核最简单的多任务RTOS
RTOS 实时操作系统,我做的是一个多任务的操作系统,可以同时运行多个任务,我这里设置的最大任务数是32个, 估计跑30多个任务的嵌入式设备很少吧,32个任务够用了。 OS我把它叫做HesOS,主要功能如下,比较简单。 1--实现多任务调度 2--实现任务调度锁 3--实现临界区保护 4--实现读取cpu使用率(这个功能比较重要的) 5--实现us延时(用于模拟如IIC总线模拟) 对于一般的嵌入式应用有这些功能,差不多够用了。 移植HesOS也非常简单,不会像其它的OS一样比较庞大,修改的地方也比较多,使用起来也复杂。 HesOS不管是移植和使用都是非常简单的,类似于PC的线程使用。 主
[单片机]
<font color='red'>stm32</font> Ctext-M3<font color='red'>内核</font>最简单的多任务RTOS
STM32 内核复位 与 系统复位 区别及程序实现
1 写在前面 某些系统允许复位,但对外设又有特殊要求:某一个IO状态不能因为复位而改变,某一个定时器计数器不能改变等。 例子:A系统通过一个IO控制B系统的电源,而这个IO置高时才开启B系统的电源。 正常工作过程中,B系统只有收到A系统关机命令任务才会进行关机(也就是说不能掉电关机),而A系统在工作过程中有复位的需求。 这个时候如果使用常规的复位方式,就会复位IO,不符合要求。如果有一种方式只复位内核而不复位外设就好了。 接下来就介绍两种复位的实现方式。 2 关于复位 说到复位,我们都不会陌生,系统基本都有一个复位按键。 复位的种类有很多:上电复位、掉电复位、复位引脚复位、看门狗复位、软件复位等。 上面说的复位按键,也就是对应复
[单片机]
《SLAM机器人基础教程》第三章 单片机与STM32:超声测距实验
3.10节 超声测距实验 本节介绍超声测距传感器数据的采集 a.实验准备:超声波传感器,USB转串口模块,ST-Llink下载器,CHEAPX机器人控制板 b.实验目的:STM32实现超声测距传感器数据的采集 c.相关知识点: 本次碰撞模块使用开关按键式碰撞,开关按键常常伴有抖动,因此需要软件消除抖动。 d.编程及运行 (1)初始化 void initSonar(void) { GPIO_InitTypeDef GPIO_InitStruct; TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; //Config Clock 配置时钟
[单片机]
《SLAM机器人基础教程》第三章 单片机与<font color='red'>STM32</font>:超声测距<font color='red'>实验</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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