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

HAL库 Systick定时器 基于STM32F103EZT6 野火霸道,可做参考

目录

1.时钟选择(这里选择高速外部时钟)

​编辑

2.调试模式和时基源选择:

3.LED的GPIO配置 这里用板子的红灯PB5

4.工程配置

5.1ms的systick中断实现led闪烁 源码:

6.修改systick的中断频率

7.systick定时原理

SysTick 定时器的工作原理

中断触发机制

HAL_SYSTICK_Config 函数

举个例子


1.时钟选择(这里选择高速外部时钟)

2.调试模式和时基源选择:

这里我用的是SW调试模式,因为只占用两个GPIO,时基源选择systick 系统定时器

3.LED的GPIO配置 这里用板子的红灯PB5

                                                                LED原理图

低电平点亮,配置GPIO

4.工程配置

5.1ms的systick中断实现led闪烁 源码:

在原本生成的代码中修改部分

main.c

  
/* USER CODE BEGIN Includes */
#include "stm32f1xx_it.h"
/* USER CODE END Includes *//* USER CODE BEGIN WHILE */while (1){if(flag==1){HAL_GPIO_TogglePin((GPIO_TypeDef *)GPIOB, (uint16_t) GPIO_PIN_5);flag=0;}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}

 stm32f1xx_it.h

/* USER CODE BEGIN Includes */
extern volatile  int systick,flag;
/* USER CODE END Includes */

 stm32f1xx_it.c

/* USER CODE BEGIN Includes */
volatile int systick=0,flag=0;
/* USER CODE END Includes */void SysTick_Handler(void)
{/* USER CODE BEGIN SysTick_IRQn 0 */if(flag==0){systick++;if(systick>1000){flag=1;systick=0;}}/* USER CODE END SysTick_IRQn 0 */HAL_IncTick();/* USER CODE BEGIN SysTick_IRQn 1 *//* USER CODE END SysTick_IRQn 1 */
}

6.修改systick的中断频率

HAL系统默认的systick的中断频率是1kHZ  也就是1ms中断一次

  /* USER CODE BEGIN 2 */// 修改时钟源为 HCLK(8MHz)
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);// 再重新配置重装载值
uint32_t new_load = (8000000 / 1000) - 1; // 1ms中断(7999)
HAL_SYSTICK_Config(new_load);/* USER CODE END 2 */

在while(1)前配置   为1ms中断

7.systick定时原理

SysTick 定时器是一个广泛应用于嵌入式系统中的定时器,常用于周期性中断。它的基本工作原理是基于系统时钟(SystemCoreClock)来生成一个定时周期,并通过计数器进行倒计时,直到计数器的值为零时触发一个中断。

SysTick 定时器的工作原理

  1. 系统时钟(SystemCoreClock

    • SysTick 定时器的计数频率由系统时钟决定。系统时钟频率就是每秒钟系统产生的时钟周期数,也可以理解为每秒系统执行的时钟信号的次数。
  2. 定时器计数器

    • SysTick 是一个 24 位的倒计时计数器,从 ReloadValue 开始倒数。
    • SysTick 的计数器在每次时钟周期减少 1,直到计数器的值减少到 0 为止。
    • 当计数器的值为 0 时,SysTick 会触发一个中断,表示定时周期已到。
  3. 重载值(ReloadValue

    • ReloadValue 定义了定时器倒计时的起始值,它通过公式与系统时钟频率相关。
    • 我们通过设置 ReloadValue 来控制定时器的计数周期,从而设置中断的时间间隔。

    例如,如果我们希望每 1 毫秒触发一次中断,而系统时钟频率为 8 MHz(即 8,000,000 Hz),则需要将 ReloadValue 设置为:

    这表示计数器会从 8000 开始倒数,经过 8000 个时钟周期后触发中断,每个时钟周期为 1 微秒,所以总共时间为 1 毫秒。

  4. 定时器的倒计时与重载

    • 每当计数器倒计时到 0 时,SysTick 会重新加载 ReloadValue(即 8000),然后继续倒计时,形成一个循环。
    • 这一周期性过程确保了每次计数器到 0 时,都会触发一个中断,时间间隔与 SystemCoreClock 和 ReloadValue 密切相关。

中断触发机制

  • 每当 SysTick 定时器的计数器从 ReloadValue 值递减到 0 时,系统会触发一个中断,通知 MCU 进行特定的任务。
  • 这个中断的触发频率与重载值密切相关。例如,设置 ReloadValue 为 8000,且系统时钟为 8 MHz,每经过 8000 个时钟周期就会触发一次中断,时间间隔为 1 毫秒。

HAL_SYSTICK_Config 函数

在 STM32 的 HAL 库中,HAL_SYSTICK_Config 函数用于配置 SysTick 定时器。它的原理如下:

HAL_SYSTICK_Config(SystemCoreClock / 1000);
  • 该函数通过将 SystemCoreClock / 1000 作为重载值设置给 SysTick,意味着系统时钟除以 1000,设置定时器的重载值,使得 SysTick 每经过 1000 微秒(即 1 毫秒)触发一次中断。
  • SystemCoreClock / 1000 的结果就是每 1 毫秒触发一次中断,这使得你可以在中断服务程序中执行特定的任务。

举个例子

假设系统时钟为 8 MHz:

  • 通过 HAL_SYSTICK_Config(SystemCoreClock / 1000),将重载值设置为 8000。
  • 每经过 8000 个时钟周期,SysTick 会触发一个中断。
  • 8000 个时钟周期表示 1 毫秒,触发频率为 1 毫秒一次。

当中断发生时,你可以在中断处理函数中编写需要定时执行的任务,比如采样数据、更新计数器等。

相关文章:

HAL库 Systick定时器 基于STM32F103EZT6 野火霸道,可做参考

目录 1.时钟选择(这里选择高速外部时钟) ​编辑 2.调试模式和时基源选择: 3.LED的GPIO配置 这里用板子的红灯PB5 4.工程配置 5.1ms的systick中断实现led闪烁 源码: 6.修改systick的中断频率 7.systick定时原理 SysTick 定时器的工作原理 中断触发机制 HAL_SYSTICK_Co…...

使用 Postman 进行 API 测试:从入门到精通

使用 Postman 进行 API 测试:从入门到精通 使用 Postman 进行 API 测试:从入门到精通一、什么是 API 测试?二、Postman 简介三、环境搭建四、API 测试流程1. 收集 API 文档2. 发送基本请求示例:发送 GET 请求示例代码(…...

K8s 分布式存储后端(K8s Distributed Storage Backend)

K8s 分布式存储后端 在 K8s 中实现分布式存储后端对于管理跨集群的持久数据、确保高可用性、可扩展性和可靠性至关重要。在 K8s 环境中,应用程序通常被容器化并跨多个节点部署。虽然 K8s 可以有效处理无状态应用程序,但有状态应用程序需要持久存储来维护…...

基于docker搭建Kafka集群,使用KRaft方式搭建,摒弃Zookeeper

KAFKA基于docker使用KRaft进行集群搭建 环境:已成功搭建kafka服务 可点击链接跳转至安装kafka-3.8.0版本 并启用SASL认证 教程 使用基于Zookeeper方式搭建集群教程 kafka-3.8.0版本 并启用SASL认证 教程 搭建kafka-ui可视化工具 192.168.2.91 192.168.2.92 192…...

Centos7 安装 RabbitMQ与Erlang

1、下载erlang和rabbitmq wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.4.5/erlang-23.3.4.5-1.el7.x86_64.rpmwget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.16/rabbitmq-server-3.9.16-1.el7.noarch.rpm2、安装erlang…...

mybatis-plus的分页查询简单使用

引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version></dependency>在yml中配置启动mybatis-plus插件 mybatis-plus:configuration:#…...

剑指 Offer II 014. 字符串中的变位词

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20014.%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E5%8F%98%E4%BD%8D%E8%AF%8D/README.md 剑指 Offer II 014. 字符串中的变位词 题目描述 给定两个字符…...

富唯智能复合机器人拓展工业新维度

富唯智能复合机器人是富唯智能倾力打造的一款集高度自动化、智能化和多功能性于一体的机器人。它融合了机械、电子、计算机、传感器等多个领域的前沿技术&#xff0c;通过精密的算法和控制系统&#xff0c;实现了对复杂生产环境的快速适应和高效作业。 富唯智能复合机器人的特点…...

【大数据技术】搭建完全分布式高可用大数据集群(Scala+Spark)

搭建完全分布式高可用大数据集群(Scala+Spark) scala-2.13.16.tgzspark-3.5.4-bin-without-hadoop.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Spark的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/softwa…...

solidity高阶 -- 调用接口合约

在区块链开发中&#xff0c;Solidity 是一种广泛使用的智能合约编程语言&#xff0c;而接口合约&#xff08;Interface&#xff09;是 Solidity 中一个非常重要的概念。它为智能合约之间的交互提供了一种标准化的方式&#xff0c;使得合约之间的调用更加灵活、安全且易于管理。…...

若依框架使用(低级)

克隆源码 浏览器搜索若依&#xff0c;选择 RuoYi-Vue RuoYi-Vue RuoYi-Vue 重要的事情说三遍&#xff0c;进入gitee 下面这个页面&#xff08;注意红色框起来的部分&#xff09; 进入Gitee进行下载 我下载的是最新的springboot3 下载好后我们可以选择一个文件夹&#xff0…...

找不到 MSVCP120.dll

msvcr120.dll msvcr120.dll 是 Microsoft Visual C Redistributable 的一部分&#xff0c;属于 Visual Studio 2013&#xff08;VC 12.0&#xff09;的运行时组件。它的重要性取决于你运行的应用程序是否需要它。 重要性 依赖库&#xff1a;如果某个程序是用 Visual Studio 2…...

AI软件栈:LLVM分析(三)

LLVM IR 文章目录 CFG线性IR 主要采用CFG与线性IR组合描述 CFG *关键在于基本块&#xff08;Basic Block&#xff09;的定义 线性IR *关键来自于SSA&#xff0c;单静态赋值...

openwebui入门

1 简介 ‌Open WebUI‌&#xff08;网址是openwebui.com&#xff09;是一个高度可扩展、功能强大且用户友好的自托管Web用户界面&#xff0c;专为完全离线操作设计&#xff0c;编程语言是python。它支持对接Ollama和OpenAI兼容的API的大模型。‌ Open WebUI‌在架构上是一种中…...

Spark--如何理解RDD

1、概念 rdd是对数据集的逻辑表示&#xff0c;本身并不存储数据&#xff0c;只是封装了计算逻辑&#xff0c;并构建执行计划&#xff0c;通过保存血缘关系来记录rdd的执行过程和历史&#xff08;当一个rdd需要重算时&#xff0c;系统会根据血缘关系追溯到最初的数据源&#xff…...

CTFSHOW-WEB入门-PHP特性89-100

题目&#xff1a;web 89 题目&#xff1a;解题思路&#xff1a;这道题目涉及了两个函数&#xff1a;preg_match&#xff08;&#xff09;和intval&#xff08;&#xff09;简要介绍一下两个函数 preg_match&#xff08;&#xff09;用于对字符串进行正则表达式的匹配&#xff0…...

[250204] Mistral Small 3:小巧、快速、强大 | asdf 0.16.0 发布:Golang 重写带来性能飞跃

目录 Mistral AI 发布开源模型 Mistral Small 3&#xff1a;小巧、快速、强大asdf 0.16.0 版本发布&#xff1a;Golang 重写带来性能飞跃&#xff01; Mistral AI 发布开源模型 Mistral Small 3&#xff1a;小巧、快速、强大 法国人工智能初创公司 Mistral AI 发布了最新的开源…...

PySpark学习笔记5-SparkSQL

sparkSql的数据抽象有两种。 一类是data set适用于java和Scala 一类是data frame适用于java&#xff0c;Scala&#xff0c;python 将r d d转换为data frame #方式一 df spark.createDataFrame(rdd,schema[name,age]) #方式二 schema Structtype(). add(id,integertype(),nu…...

windows版的docker如何使用宿主机的GPU

windows版的docker使用宿主机的GPU的命令 命令如下 docker run -it --nethost --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIEScompute,utility -e NVIDIA_VISIBLE_DEVICESall 镜像名效果 (transformer) rootdocker-desktop:/# python Python 3.9.0 (default, Nov 15 …...

Python爬虫:1药城店铺爬虫(完整代码)

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...