五、HAL_Timer的定时功能

news2024/11/17 20:45:40

1、开发环境

(1)Keil MDK: V5.38.0.0

(2)STM32CubeMX: V6.8.1

(3)MCU: STM32F407ZGT6

2、定时器简介

(1)定时器可以通过输入的时钟源进行计数,从而达到定时的功能。

3、实验目的&原理图

3.1、实验目的

(1)通过定时器设置定时,实现LED灯以500毫秒间隔闪烁。

3.2、原理图

(1)选择LED1,接PF9引脚。

4、STM32CubeMX创建工程及简介

4.1、创建工程

(1)打开STM32CubeMX软件。

(2)点击File→NewProject。

(3)Commercial Part Number(商用部件号)处输入MCU型号,然后选择正确的单片机型号,点击Start Project(开始项目)。

(4)配置工程名、工程存放文件等。

点击Project Manager(项目经理)进行如下配置。 

点击Code Generator(代码生成器)进行如下配置。 

(5)点击GENERATE CODE生成KeilMDK工程。 

4.2、配置时钟及GPIO

(1)HSE、LSE时钟源选择

  • HSE:高速外部时钟源
  • LSE:低速外部时钟源
  • Disable:禁用
  • BYPASS Clock Source:旁路时钟源
  • Crystal/Ceramic Resonator :水晶/陶瓷共振器
  • 一般选择水晶陶瓷共振器
  • 旁路时钟源就是由外部给定一个时钟信号,一般用于作为同步时钟。
  • 水晶/陶瓷共振器:指外接晶振,经过内部振荡电路产生时钟。

(2)LED1 GPIO配置

(3)时钟树配置

4.3、配置定时器

4.3.1、确定定时器挂载总线

(1)这里选择TIM2,确定TIM2挂载到哪根总线。

(2)查看STM32F407ZGT6芯片对应的数据手册。

(3)打开对应KeilMDK工程,点击Books。

(4)双击打开数据手册。

(5)查看芯片框图。TIM1挂载再APB1总线上,APB1 timer clocks时钟为72MHz,所以定时器1初始时钟为72MHz。

4.3.2、CubeMx中的TIM1配置

(1)定时器的配置项有很多,用不到的可以不用考虑,保持默认即可。

(2)时钟源的选择,选择内部时钟。也就是APB1 timer clocks。某些定时器只能选择内部时钟。

(3)定时器Parameter Settings(参数设置)计算。

  • 定时时长500毫秒。
  • Prescler(PSC -16 bits value): 分频系数,选择72-1,进行72分频,即定时时钟变为1MHz。
  • Counter Mode: 计数器模式,选择Up,向上计数。
  • Counter Period (AutoReload Register-32 bits value): 计数器周期,32位自动加载值。
  • 时钟频率1MHz表示1秒钟时钟振荡1000000次。
  • Counter Period = 500mS/(1/1Mhz) = 500mS/(1/1000000S) = 500000。

(4)打开定时器中断,定时器定时时间到,进入中断处理函数。

 (5)点击GENERATE CODE更新KeilMDK工程。 

5、KeilMDK软件编写

5.1、程序编写

HAL_TIM_Base_Start_IT(&htim2);       /*启动定时器2,LED闪烁定时*/

/*功能:定时器中断回调函数
 *参数:定时器x
 *返回值:无
 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM2)    
	{
		HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);/*LED状态翻转*/
	}
}

5.2、完整工程下载地址

(1)完整工程存储再码云。

(2)STM32_CSDN: CSDN中STM32专栏的所有示例代码

6、定时器计数模式

(1)Up,向上计数模式。计数器从 0 计数到自动装入的值,然后重新从0开始计数并且产生一个计数器溢出事件。

(2)Down,向下计数模式。计数器从自动装入的值 开始向下计数到 0 ,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。

7、分频系数和计数周期为什么要减1

7.1、STM32CubeMX中TIM分频系数

(1)假设STM32CubeMX中Tim2要进行72分频,分频系数设置为72-1。

(2)因为没有0分频,分频系数设置为0时表示不分频。

(3)查看对应芯片参考手册。

(4)ck_psc是指定时器时钟源。

7.2、STM32CubeMXTIM计数周期

(1)应为计数值到了后,需要往下再计数一个值,也就是溢出才产生中断。

(2)溢出的同时计数值重新加载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

13 - 信号可靠性剖析

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接:(更新中)Linux系统编程训练营 - 目录 文章目录 1. 信号的可靠性1.1 问题1.2 信号查看(kill -l)1.3 信号的分类1.3.1 不可靠信号(传统信号)…

模拟仿真 OSC振荡器

用五个反相器做一个环形振荡器 跑瞬态仿真 发现并未振荡 手动添加起振 成功振荡 将上面的图像send to calculate,调用频率函数freq 可以看到振荡频率为2.5GHZ左右 如果想要降低振荡频率,可以在每个反相器后加寄生电容或者增大反相器尺寸,这…

ProGuard详解 - Java代码混淆

(29条消息) ProGuard详解 - Java代码混淆_黎陌MLing的博客-CSDN博客

【算法题】动态规划基础阶段之 爬楼梯 和 杨辉三角

动态规划基础阶段之爬楼梯和杨辉三角 前言二、爬楼梯2.1、思路2.2、代码实现 三、杨辉三角3.1、思路3.2、代码实现 四、杨辉三角2(进阶)总结 前言 动态规划(Dynamic Programming,简称 DP)是一种解决多阶段决策过程最优…

脱机下载程序

一,脱机下载工具 Mini-Pro V2 版 二,配置stm32CubeIDE 生成hex文件 三,脱机下载步骤 1,连接设备,选择芯片 2, 添加固件。 3,选项字节。 4,生成镜像文件,这个文件包含了…

Mysql索引失效情况及避免方式【案例分析】

索引失效情况及避免方式 建表数据sql CREATE TABLE staffs( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(24)NOT NULL DEFAULT COMMENT姓名, age INT NOT NULL DEFAULT 0 COMMENT年龄, pos VARCHAR(20) NOT NULL DEFAULT COMMENT职位, add_time TIMESTAMP NOT NULL DEF…

json数据、日期数据的参数传递及响应

文章目录 1.json数据传参1.1 postman如何发送json数据1.2 发送json数据,控制器如何接收 2. 日期类型参数传递2.1 日期类型参数如何指定格式 3.响应数据3.1 ResponseBody注解的使用 1.json数据传参 首先在maven中添加json坐标 1.1 postman如何发送json数据 1.2 发…

00后测试用例写的实在是.......

实在是太强了,00后测试用例写的比我还好,简直是无地自容… 经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 如何编写测试用例? 作为一个测试新人…

以太网频谱

Speed频谱100BASE-TX1GBASE-T2.5GBASE-T5GBASE-T10GBASE-T

网络程序——定时器

网络程序还有一种需要处理的常用事件——定时事件。服务器程序通常管理着众多定时事件,因此如何有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此,我们要将…

递归 到底应该怎么理解?怎么写递归的代码

今天和大家一起来讨论一下递归: 我们尽可能使按照解题的思路来讨论递归,对于这个在计算机内部具体是怎样实现的,我们不做深入讨论,这里仅仅是简单的讨论一下: 求1 ~ n序列的和:1 2 3 ... n&#xff1…

pwn学习day1——ELF文件结构

0x01 介绍 ELF(Executable and Linkable Format)是一种常见的可执行文件和共享库格式,其结构如下: ELF header:包含了 ELF 文件的基本属性信息。Program header table:描述了程序在内存中的加载情况&…

Gogs私服搭建

1. Gogs介绍 官网地址:https://gogs.io 文档地址:https://gogs.io/docs Gogs,全称为Go Git Service,是一个基于 Go 语言开发的Git服务。它提供了一个类似于GitHub的界面和功能,允许您在自己的服务器上搭建私有的Git仓库…

幂律智能联合智谱AI发布千亿参数级法律垂直大模型PowerLawGLM

前言 2023年是当之无愧的“大模型之年”,据瑞银集团的一份报告显示,ChatGPT推出仅仅两个月后,月活用户已经突破了1亿,成为史上用户增长速度最快的消费级应用程序。 在炙热的大模型赛道里,基于中文大模型的发布也是层…

二叉树OJ题:LeetCode--104.二叉树的最大深度

朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第104道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏:数据结构与算法 个 人…

SAP从入门到放弃系列之工艺路线-子工序-Part2

文章目录 概述使用场景子工序内容1、 维护工序控制码2、维护子工序的工资类型3、作业标准值4、用户定义字段5、通过维护子工序的作业类型数据后,点击汇总标准值,工序的作业类型值可以通过子工序进行累计6、可以设置子工序是否带入生产订单 注意事项&…

selenium通过xpath定位text换行的元素

DOM元素(该元素是换行的,不能通过普通xpath定位): 可使用下面xpath定位该div //div[./text()/following-sibling::text()"点" and ./text()"5"] 解释一下就是:定位“子节点的text是[5] 且 子节点…

自然语言处理(概念)

1、 RNN模型简介 1.2传统RNN模型 2、LSTM模型 3、GRU模型 5、注意力机制 6、人名分类器 7 、BERT 8、Transformer 的结构是什么样子的? 各个子模块有什么作用? 8.1 Encoder模块 8.2 Decoder模块 8.3 Transformer 结构中的Decoder端具体输入是什么&#…

C# wpf 附加属性实现任意控件拖动调整大小

摘自这里 https://blog.csdn.net/u013113678/article/details/121719278 调试效果如下 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using Syst…