当前位置: 首页 > article >正文

STM32(hal库)中Systick是如何默认进行计时1ms的?

在STM32的HAL库中,Systick定时器默认配置为每1毫秒(ms)产生一次中断,这一设置是在HAL库的初始化过程中完成的。以下是Systick如何默认进行1ms计时的详细解释:

一、Systick定时器概述

Systick是一个24位的倒计数定时器,当计数到0时,会从RELOAD寄存器中自动重装载定时初值,并产生一个SysTick中断(如果使能了中断)。Systick的寄存器包括CTRL、LOAD、VAL和CALIB,其中LOAD寄存器用于设置定时初值,VAL寄存器显示当前计数值,CTRL寄存器用于控制Systick的使能和时钟源等。

二、Systick的1ms配置过程

  1. 初始化HAL库

    • 在使用STM32 HAL库进行开发时,通常会首先调用HAL_Init()函数来初始化HAL库。这个函数是HAL库操作的基础,它负责配置Flash预取指、指令缓存、数据缓存,以及配置SysTick定时器等。
  2. 配置SysTick定时器

    • HAL_Init()函数中,会调用HAL_InitTick(TICK_INT_PRIORITY)函数来配置SysTick定时器。HAL_InitTick()函数的参数TICK_INT_PRIORITY用于设置SysTick中断的优先级。
    • HAL_InitTick()函数内部会调用HAL_SYSTICK_Config()函数,该函数根据系统时钟频率(SystemCoreClock)来计算并设置SysTick的LOAD寄存器值,以实现每1ms产生一次中断。计算公式通常为:SysTick->LOAD = (SystemCoreClock / 1000U) - 1,其中1000U表示目标中断间隔为1ms。
  3. 使能SysTick定时器

    • 在配置完SysTick定时器的LOAD寄存器后,还需要通过修改CTRL寄存器来使能SysTick定时器。这通常是通过设置CTRL寄存器的相关位来实现的。

三、HAL_Delay()函数的使用

  • HAL库提供了一个HAL_Delay()函数,该函数利用SysTick定时器来实现延时功能。当调用HAL_Delay()函数时,它会根据传入的延时参数(单位为ms)来计算需要等待的SysTick中断次数,并在一个循环中等待这些中断发生。
  • HAL_Delay()函数的实现依赖于一个全局变量uwTick,该变量在每次SysTick中断发生时都会通过HAL_IncTick()函数进行累加。因此,HAL_Delay()函数能够准确地根据SysTick中断的次数来计算延时时间。

四、注意事项

  • 在使用SysTick定时器进行延时或时间计数时,需要确保SysTick定时器的配置正确,并且系统时钟频率稳定。
  • 如果需要修改SysTick定时器的中断间隔,可以通过重新配置SysTick的LOAD寄存器值来实现。但是,这通常需要重新计算并设置相关的寄存器值,以确保新的中断间隔准确无误。

      STM32 HAL库中的Systick定时器默认配置为每1ms产生一次中断,这是通过初始化HAL库并调用相关函数来完成的。这一配置为开发者提供了方便的时间基准和延时功能。


http://www.kler.cn/a/374183.html

相关文章:

  • 在pycharm中使用sqllite
  • OpenAI 的 Whisper:盛名之下,其实难副?
  • C# 编程语言学习教程
  • node.js下载、安装、设置国内镜像源(永久)(Windows11)
  • 未来生活中的AI电脑是怎样的
  • 【C++动态规划】有效括号的嵌套深度
  • PHP语言学习教程:从入门到精通
  • C++ 快乐数 —— 优先算法(双指针思想)
  • 模板初阶及STL简介
  • 鸿蒙HarmonyOS NEXT一多适配技术方案
  • vue 和 django 报 CORS(跨域资源共享,Cross-Origin Resource Sharing)是一种跨域访问的机制,
  • 二百七十五、Kettle——ClickHouse增量导入数据补全以及数据修复记录表数据(实时)
  • 20.04Ubuntu搭建Vscode
  • Nature Electronics 用于语音识别的液体声传感器,基于悬浮在载液的钕-铁-硼磁性纳米颗粒
  • AI内容生成器 V1.6 WordPress插件 基于AI生成内容 Openai Content Generator
  • 数据结构-希尔排序(ShellSort)笔记
  • 重新架构:从 Redis 到 SQLite 性能提升
  • MySQL基本用法
  • 经典面试题收集(持续更新)
  • 基于人脸识别PCA算法matlab实现及详细步骤讲解
  • 面试题整理 3
  • 我自己的资料整理导引(三):文本格式基础
  • C++算法练习-day29——104.二叉树的最大深度
  • Java基础3-字符串及相关操作
  • 使用正则表达式验证积累
  • springSecurity入门(5.7版本之前)