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

利用STM32TIM自制延迟函数实验

一、实验目的

  1. 掌握STM32定时器(TIM)的工作原理及配置方法
  2. 学习使用HAL库实现微秒级/毫秒级延时函数
  3. 理解定时器中断服务程序的编写规范

二、实验原理

  1. 定时器基础

    • STM32定时器包含向上计数器、向下计数器、中心对齐模式
    • 通过预分频器(PSC)和自动重载寄存器(ARR)控制计数周期
  2. 时间计算公式

    延时时间 = (自动重载值 + 预分频系数 - 1) / (系统时钟频率 × 预分频系数)

三、硬件准备

  1. 开发板:STM32F103C8T6

四、实验步骤

  • 选择STM32F103C8T6芯片

  • 设置调试接口

  • 启用TIM1定时器

  • 配置TIM1

选择RCC做为时钟信号源

计算TIM需要的参数

如图我们PSC = 7,ARR = 999,RCR = 0,同时使用ARR寄存器预加载

  • 设置updata中断

  • 生成项目

  1. 代码配置:

 我们要实现自己的延迟函数首先要自定义一个函数

static void MyDelay(uint32_t Delay){uint32_t expireTime = MyGetTick() + Delay;while(MyGetTick() < expireTime)//等待延迟结束
}

其中MyGetTick()是获取当前计时器时间的函数,也是我们要自编写的函数之一。Delay是要延迟的毫秒数。

实现MyGetTick()函数

static volatile uint32_t currentMiliSeconds = 0;
static uint32_t MyGetTick(void){return currentMiliSeconds;
}

我们是通过计时器中断的方法来实现自己的延迟函数的,我们要使用先关的库函数,要重写库函数完成currentMiliSeconds值的累加。基本原理是启动定时器,产生update事件并触发中断并回调重写函数HAL_TIM_PeriodElapsedCallback()。

组织代码如下

static volatile uint32_t currentMiliSeconds = 0;static void MyDelay(uint32_t Delay){uint32_t expireTime = MyGetTick() + Delay;  while(MyGetTick() < expireTime);//等待延迟结束
}static uint32_t MyGetTick(void){return currentMiliSeconds;
}void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){if(htim == &htim1){currentMiliSeconds++; }
}

编写GPIO闪灯代码

 while (1){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);MyDelay(1000);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);MyDelay(1000);    }

五、预期现象

  • LED灯以1Hz频率交替闪烁(亮0.5s/灭0.5s)
  • 使用逻辑分析仪测量TIM1计数周期应为1ms

相关文章:

利用STM32TIM自制延迟函数实验

一、实验目的 掌握STM32定时器&#xff08;TIM&#xff09;的工作原理及配置方法学习使用HAL库实现微秒级/毫秒级延时函数理解定时器中断服务程序的编写规范 二、实验原理 ​定时器基础&#xff1a; STM32定时器包含向上计数器、向下计数器、中心对齐模式通过预分频器&#x…...

创建一个MCP服务器,并在Cline中使用,增强自定义功能。

MCP介绍 MCP 是一个开放协议&#xff0c;它标准化了应用程序如何向LLMs提供上下文。可以将 MCP 视为 AI 应用程序的 USB-C 端口。正如 USB-C 提供了一种标准化的方法来将您的设备连接到各种外围设备和配件一样&#xff0c;MCP 提供了一种标准化的方法来将 AI 模型连接到不同的…...

Android Activity栈关系解析

在 Android 系统中&#xff0c;这些类共同构成了 Activity 任务栈管理的核心架构。它们的关系可以类比为一栋大楼的管理体系&#xff0c;每个类负责不同层级的任务。以下是它们的详细解释和实际场景示例&#xff1a; 1. ActivityRecord&#xff08;活动记录&#xff09; 是什么…...

java使用word模板填充内容,再生成pdf

1.word模板填充内容 使用EasyPoi写入Word文档。 import cn.afterturn.easypoi.word.WordExportUtil; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.File; import java…...

回归实战详细代码+解析:预测新冠感染人数

回归实战&#xff1a;预测新冠感染人数 先回顾下回归是个啥玩意 首先需要一组训练集&#xff0c;说人话就是通过一系列x[x1,x2…xn]通过神秘计算得到y的过程&#xff0c;当然人和机器现在都不知道什么计算是什么&#xff0c;这是一个黑箱。 黑箱比喻&#xff1a;把模型想象成自…...

AI人工智能机器学习之聚类分析

1、概要 本篇学习AI人工智能机器学习之聚类分析&#xff0c;以KMeans、AgglomerativeClustering、DBSCAN为例&#xff0c;从代码层面讲述机器学习中的聚类分析。 2、聚类分析 - 简介 聚类分析是一种无监督学习的方法&#xff0c;用于将数据集中的样本划分为不同的组&#xff…...

(下:补充——五个模型的理论基础)深度学习——图像分类篇章

目录 1.1 卷积神经网络基础 3.1 AlexNet网络结构详解与花分类数据集下载 4.1 VGG网络详解及感受野的计算 5.1 GoogLeNet网络详解 6.1 ResNet网络结构&#xff0c;BN以及迁移学习详解 总结&#xff08;可以直接看总结&#xff09; 1.1 卷积神经网络基础 视频讲解&#xf…...

使用Python自动生成图文并茂的网页分析报告

在数据分析中&#xff0c;不管是市场研究还是科学分析&#xff0c;经常需要使用Python进行数据分析并生成图表报告。一般使用Python生成和展示图表时都是使用matplotlib 库生成静态图片文件&#xff0c;这种方式不便之处是不方便跟动态文字段落结合在一起&#xff0c;也不方便分…...

uniapp-原生android插件开发摘要

uni-app在App侧的原生扩展插件&#xff0c;支持使用java、object-c等原生语言编写&#xff0c;从HBuilderX 3.6起&#xff0c;新增支持了使用uts来开发原生插件。 基础项目 UniPlugin-Hello-AS工程请在App离线SDK中查找 基础项目(App离线SDK)已经配置好了自定义插件所需要的…...

GIT工具学习【1】:基本操作

目录 0.本地代码分区1.配置自己的个人信息&#xff08;设置一次即可&#xff09;2.新建仓库3.提交代码到暂存区&#xff08;加入购物车&#xff09;4.从暂存区撤回&#xff08;不会改变工作区文件&#xff09;5.恢复指定版本&#xff08;会改变工作区文件&#xff09;5.1&#…...

《国密算法开发实战:从合规落地到性能优化》

前言 随着信息技术的飞速发展,信息安全已成为全球关注的焦点。在数字化时代,数据的保密性、完整性和可用性直接关系到国家、企业和个人的利益。为了保障信息安全,密码技术作为核心支撑,发挥着至关重要的作用。国密算法,即国家密码算法,是我国自主设计和推广的一系列密码…...

【语法】C++中string类中的两个问题及解答

贴主在学习string类时遇到过两个困扰我的问题&#xff0c;今天拿出来给大家分享一下我是如何解决的 一、扩容时capacity的增长问题 在string的capacity()接口中&#xff0c;调用的是这个string对象的容量(可以存多少个有效字符)&#xff0c;而size()是调用的string对象现在有…...

LeetCode-154. 寻找旋转排序数组中的最小值 II

1、题目描述&#xff1a; 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,…...

2.数据结构:1.Tire 字符串统计

1.Tire 字符串统计 #include<algorithm> #include<cstring> #include<iostream>using namespace std;const int N100010; int son[N][26];//至多 N 层&#xff0c;每一层至多 26 个节点&#xff08;字母&#xff09; int cnt[N];//字符串至多 N 个&#xff…...

C语言复习4:有关数组的基础常见算法

# 数组的常见算法 - 查找算法 1. 基本查找/顺序查找 2. 二分查找/折半查找 3. 插值查找 4. 分块查找 5. 哈希查找 6. 树表查找 7. 斐波那契查找 - 排序算法&#xff08;顾名思义&#xff0c;就是把没有顺序的…...

Ubuntu从零创建Hadoop集群

目录 前言 前提准备 1.设置网关和网段 2.查看虚拟机IP及检查网络 3.Ubuntu相关配置 镜像源配置 下载 vim编辑器 4.设置静态IP和SSH免密(可选) 设置静态IP SSH免密 5.JDK环境部署 6.Hadoop环境部署 7.配置 Hadoop 配置文件 HDFS集群规划 HDFS集群配置 1.配…...

GPIO概念

GPIO通用输入输出口 在芯片内部存在多个GPIO&#xff0c;每个GPIO用于管理多个芯片进行输入&#xff0c;输出工作 引脚电平 0v ~3.3v&#xff0c;部分引脚可容任5v 输出模式下可控制端口输出高低电平&#xff0c;可以驱动LED&#xff0c;控制蜂鸣器&#xff0c;模拟通信协议&a…...

Node.js, Bun, Deno 比较概述

以下是 Node.js、Bun 和 Deno 的对比分析 概览 对比维度Node.jsDenoBun首次发布200920202022创始人Ryan DahlRyan Dahl&#xff08;Node.js 原作者&#xff09;Jarred Sumner运行时引擎V8&#xff08;Chrome&#xff09;V8&#xff08;Chrome&#xff09;JavaScriptCore&#…...

C# 类库打包dll文件

目录 前言操作流程注意事项 前言 在C#中&#xff0c;有多种方式可以对代码进行加密&#xff0c;以保护源代码不被轻易查看或修改&#xff0c;这篇文章主要介绍将C# cs类文件加密为dll文件的方式进行保护。 操作流程 在 Visual Studio 中&#xff0c;选择“创建新项目”。 选…...

Linux中的UDP编程接口基本使用

UDP编程接口基本使用 本篇介绍 在前面网络基础部分已经介绍了网络的基本工作模式&#xff0c;有了这些理论基础之后&#xff0c;下面先从UDP编程开始从操作部分深入网络 在本篇中&#xff0c;主要考虑下面的内容&#xff1a; 创建并封装服务端&#xff1a;了解创建服务端的…...

Windows DLL注入工具Xenos深度技术解析与实践指南

Windows DLL注入工具Xenos深度技术解析与实践指南 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 一、技术内核&#xff1a;Xenos注入引擎的架构解析 1.1 注入技术的三级引擎架构 Xenos作为一款专业的Windows DLL注…...

蓝桥杯菜鸟错题

遍历一个字符串内比较&#xff0c;j 应从 i 的后一位开始&#xff0c;保证不重复...

华为HarmonyOS PC突破:一键运行Linux工具

文章目录前言从「望Linux兴叹」到「一键真香」这三个功能&#xff0c;打工人看了会流泪开发者&#xff1a;终于不用「双机党」了生态破局的关键一步普通用户也能受益&#xff1f;当然一点冷静的观察写在最后前言 昨儿个IT圈炸锅了。 华为鸿蒙PC端应用市场悄咪咪上线了个叫融合…...

ARMv8-A架构革命——超越64位寻址的三大范式转移

该文章同步至公众号OneChan 开篇&#xff1a;回答上篇进阶思考 在上一篇的结尾&#xff0c;我们留下了三个问题&#xff0c;现在让我们逐一探讨&#xff1a; 1. 从A53到A55再到A510&#xff0c;ARM的小核设计哲学如何演变&#xff1f; Cortex-A53 (2014)&#xff1a;定义了“…...

ViPER4Windows-Patcher 音效修复工具:让无损音质在Windows 10/11完美呈现

ViPER4Windows-Patcher 音效修复工具&#xff1a;让无损音质在Windows 10/11完美呈现 【免费下载链接】ViPER4Windows-Patcher Patches for fix ViPER4Windows issues on Windows-10/11. 项目地址: https://gitcode.com/gh_mirrors/vi/ViPER4Windows-Patcher &#x1f3…...

基于yolov10的工地安全帽检测系统 有技术文档 能实现图像,视频和摄像实时检测 深度学习 python Django

一、系统涉及的技术 框架&#xff1a;pytorch 模型&#xff1a;yolo10n 编程语言&#xff1a;python 数据库&#xff1a;SQLite 界面&#xff1a;后端python Django&#xff0c;前端 Vue3 项目类型&#xff1a;目标检测 二、多模态检测能力 图像检测&#xff1a;支持用户…...

如何解决ViPER4Windows兼容性难题?5步打造Windows 10/11音效增强终极方案

如何解决ViPER4Windows兼容性难题&#xff1f;5步打造Windows 10/11音效增强终极方案 【免费下载链接】ViPER4Windows-Patcher Patches for fix ViPER4Windows issues on Windows-10/11. 项目地址: https://gitcode.com/gh_mirrors/vi/ViPER4Windows-Patcher 副标题&…...

别再死记硬背了!用一张图+代码示例,彻底搞懂蓝牙BLE配对的6种SMP流程

蓝牙BLE安全配对实战图解&#xff1a;6种SMP流程与核心算法拆解 每次看到蓝牙协议栈里那些晦涩的安全管理协议&#xff08;SMP&#xff09;文档就头疼&#xff1f;别担心&#xff0c;今天我们用工程师的思维来重新解构这个"安全黑匣子"。扔掉那些让人昏昏欲睡的文字…...

用Multisim复刻经典24秒篮球计时器:从555时钟到数码管显示的保姆级仿真教程

用Multisim复刻经典24秒篮球计时器&#xff1a;从555时钟到数码管显示的保姆级仿真教程 篮球比赛中那令人窒息的最后24秒倒计时&#xff0c;不仅是球员的决胜时刻&#xff0c;也是电子爱好者眼中完美的数字电路实践案例。本文将带你用Multisim从零搭建一个完整的24秒计时系统&a…...

PCIe流量控制实战:从初始化到信用更新的完整流程

PCIe流量控制实战&#xff1a;从初始化到信用更新的完整流程 在高速数据传输领域&#xff0c;PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;凭借其卓越的性能和可靠性成为行业标准。而流量控制&#xff08;Flow Control&#xff09;机制正是确保数据…...