STM32CubeIDE(CUBE-MX hal库)----定时器

系列文章目录

STM32CubeIDE(CUBE-MX hal库)----初尝点亮小灯
STM32CubeIDE(CUBE-MX hal库)----按键控制
STM32CubeIDE(CUBE-MX hal库)----串口通信


文章目录

  • 系列文章目录
  • 前言
  • 一、定时器
  • 二、使用步骤
  • 三、HAL库实验代码
  • 三、标准库代码


前言

STM32定时器是一种多功能外设,可以为嵌入式系统提供各种定时和计数功能。通过合理配置,它可以适应各种应用场景,提供精准的定时和计数功能,使嵌入式系统更加灵活和可控。


一、定时器

功能:定时、捕获脉冲、计算PWM占空比、输出PWM波形、编码器计数。
如何进行计数:如果时钟输入频率是72MHZ,则计数器计数到72000000用了一秒钟。但是计数器寄存器的位数16bit只能计数65536/72000000次/秒=0.0009秒。所以需要一个预分频器(顾名思义是将频率进行降低计算公式 频率/(分频数+1)不分频就设为0)也是一个16位的寄存器,可进行65536次分频。则定时器最多可定时65536×65536/72000000=59.65s

二、使用步骤

设置串口一用于打印调试信息
在这里插入图片描述
打开串口中断
在这里插入图片描述
将高速外部时钟源设为晶振可以提高定时精度
在这里插入图片描述
时钟设置
在这里插入图片描述

定时器设置
在这里插入图片描述
定时器参数设置,下面的设置实现了1s的定时,如果想要0.5s的定时则将分频系数设为7199,计数值设为4999。计算过程72000000/(7199+1)/(4999+1)=2Hz 赫兹(Hz)是频率的单位,表示每秒的周期数。要将赫兹转换为秒 1/2=0.5s

在这里插入图片描述
定时器中断设置
在这里插入图片描述

三、HAL库实验代码

实验一:观察计数器的数值是如何变化的,只需要在已有的代码中加入以下代码头文件包含

/* USER CODE BEGIN Includes */
#include <string.h>
#include <string.h>
/* USER CODE END Includes */
  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start(&htim4);
  int counter=0;
  char message[20];

  /* USER CODE END 2 */

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM4_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start(&htim4);
  int counter=0;
  char message[20];

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  counter=__HAL_TIM_GET_COUNTER(&htim4);//获取计数�?
	  sprintf(message,"counter: %d",counter);
	  HAL_UART_Transmit_IT(&huart1, (uint8_t *)message, sizeof(message));
	  HAL_Delay(99);//延时100ms
  }
  /* USER CODE END 3 */
}

__HAL_TIM_SET_COUNTER 设置计数器的值
__HAL_TIM_GET_COUNTER 获取计数器的值
__HAL_TIM_SET_AUTORELOAD 设置重装载计数器的值
__HAL_TIM_GET_AUTORELOAD 获取重装载计数器的值
__HAL_TIM_SET_PRESCALER 设置预分频器的值

实验现象
在这里插入图片描述

实验二:利用定时器中断实现计时功能,通过重写HAL_TIM_PeriodElapsedCallback函数,实现每隔1s触发一次中断,num自增一向串口助手传num的值。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 函数是在使用STM32的HAL(Hardware Abstraction Layer)库时,用于处理定时器(TIM)定时周期到达事件的回调函数。该函数在定时器的中断服务子程序(ISR)中被调用,用于用户定义的处理。

参数 TIM_HandleTypeDef *htim 是一个指向定时器处理结构体的指针,其中包含了有关定时器的信息,如定时器的基地址、计数器值、定时器配置等。

uint8_t num=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim==&htim4){
		num++;
		HAL_UART_Transmit_IT(&huart1, &num, 1);

	}

}

实验现象
在这里插入图片描述

三、标准库代码

定时器初始化

void Timer_Init(void)
{
	//开启时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
	
	//选择时基单元的时钟 选择内部时钟  默认使用内部时钟可以不写
	TIM_InternalClockConfig(TIM4);
	
	
	//配置时基单元
	TIM_TimeBaseInitTypeDef TimeBaseInitStructure;
	TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//时钟分频 不进行分频
	TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//计数方式  向上计数
	TimeBaseInitStructure.TIM_Period=10000-1 ; //自动重装载的值
	TimeBaseInitStructure.TIM_Prescaler=7200-1;//预分频系数
	TimeBaseInitStructure.TIM_RepetitionCounter=0;//重复计数器高级定时器里面才有
	
	TIM_TimeBaseInit(TIM4,&TimeBaseInitStructure);//时基初始化
	TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);//使能定时器中断
	
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM3中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占优先级2级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //从优先级1级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
	NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
	
	TIM_Cmd(TIM4,ENABLE);//开启定时器

	
}

中断服务函数

void EXTI4_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //检查定时器中断标志位是否置位
	{
		
		num++;
		TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
	}
}

hal库和标准库函数对比

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)--------->void EXTI4_IRQHandler(void)(标准库)
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)和TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);功能类似开启定时器中断

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

异常 Exception 02

异常 Exception 02 六、异常处理1、基本介绍2、异常处理的方式3、示意图 try-catchthrows1、介绍2、注意事项 自定义异常1、基本概念2、自定义异常的步骤3、实例4、throw和throws的区别 六、异常处理 1、基本介绍 异常处理就是当异常发生时,对异常处理的方式。 2、异常处理的…

以STM32CubeMX创建DSP库工程方法一

以STM32CubeMX创建DSP库工程方法 略过时钟树的分配和UART的创建等&#xff0c;直接进入主题生成工程文件 它们中的文件功能如下&#xff1a; 1&#xff09;BasicMathFunctions 基本数学函数&#xff1a;提供浮点数的各种基本运算函数&#xff0c;如向量加减乘除等运算。 2&…

VBA代码解决方案第8讲:用FindPrevious进行重复搜索及利用LIKE查找

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

货代FOB条款卖方必备的知识:发货人都要承担哪些费用呢?

据统计&#xff0c;中国出口中以FOB成交的占到70%&#xff0c;但专家指出&#xff1a;FOB对出口商的风险更大&#xff0c;有可能造成货、款两空的结局。 目前我国出口合同以FOB价格条款成交的比例越来越大&#xff0c;而且收货人指定船公司的少&#xff0c;指定境外货代的多&am…

3款厉害的小工具,小黑子都在用!

大家好&#xff0c;我是 Javapub。 程序员与普通人最大的区别是什么&#xff0c;当然是会使用工具。基于一些同学经常问我的问题&#xff0c;接下来给大家分享几款我经常使用的工具&#xff0c;主打一个提升效率。 第一款 Everything 用 windwos 的同学都体会过&#xff0c;…

带大家做一个,易上手的家常土豆片

还是先从冰箱里那一块猪瘦肉 搞一点蒜和生姜 切成小块 装进一个碗里 这里一点就够了 一条绿皮辣椒 切片 三个左右干辣椒 随便切两刀 让它小一点就好了 一起装一个碗 一大一小两个土豆切片 猪肉切片 起锅烧油 然后 下肉翻炒 等肉变颜色捞出来 然后放入土豆 和小半碗水 让…

JeecgBoot低代码开发—Vue3版前端入门教程

JeecgBoot低代码开发—Vue3版前端入门教程 后端接口配置VUE3 必备知识1.vue3新特性a. https://v3.cn.vuejs.org/b.setup的用法c.ref 和 reactive 的用法d.新版 v-model 的用法e.script setup的用法 2.TypeScript基础 后端接口配置 如何修改后台项目路径 http://127.168.3.52:8…

【玩转 EdgeOne】| 腾讯云下一代边缘加速CDN EdgeOne 是安全加速界的未来吗?

目录 前言边缘加速与安全加固边缘计算与CDN的融合EdgeOne优秀的安全特性EdgeOne卓越的性能表现灵活的配置和管理生态系统的支持与发展技术创新与未来展望EdgeOne试用结束语 前言 在当下互联网的迅猛发展的时刻&#xff0c;云计算和边缘计算技术的快速发展为网络加速领域带来了…

awk从放弃到入门(10):awk内置函数

awk从放弃到入门&#xff08;10&#xff09;&#xff1a;awk内置函数 算数函数字符串函数其他函数 本博文转载自 这篇文章中的知识点是建立在前文的基础上的&#xff0c;如果你还没有掌握前文中的知识&#xff0c;请先参考之前的文章。 注&#xff1a;在阅读这篇文章之前&…

Abbyy FineReader16最新版本有哪些新功能?

在数字化时代&#xff0c;数据处理和转换变得非常重要&#xff0c;Abbyy FineReader 就是一款专门用于处理、转换和识别图像和 PDF 文件的软件。在本文中&#xff0c;我们将会详细介绍 Abbyy FineReader 的功能以及适合使用该软件的电脑。 ABBYY Finereader 16-安装包下载如下&…

滴滴2023.11.27P0级故障技术复盘回顾(k8s的的错?)

本文从滴滴官方恢复及技术公众号带大家从技术角度复盘这次事故 目录 1. 背景 2. 滴滴官方消息 3. 问题分析及定位 4.网传的k8s及解析 5.k8s引发的思考&#xff1a;举一反三&#xff0c;怎么避免再次出现 6.近段时间其他平台崩溃回顾 1. 背景 11 月 27 晚约 10 点&#xf…

TFIDF、BM25、编辑距离、倒排索引

TFIDF TF刻画了词语t对某篇文档的重要性&#xff0c;IDF刻画了词语t对整个文档集的重要性

最简单的链路追踪收集器

链路追踪可帮助您快速了解程序服务之间的调用关系&#xff0c;并快速洞悉内部发生的情况。主流的链路追踪系统有zipkin,jaeger,skywalking等&#xff0c;由于opentelemetry的存在&#xff0c;都具有opentelemetry的转换器。 我们利用opentelemetry来进行zipkin,jaeger,skywalk…

智能优化算法应用:基于生物地理学算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于生物地理学算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于生物地理学算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.生物地理学算法4.实验参数设定5.算法结果…

在Rust中编写自动化测试

1.摘要 Rust中的测试函数是用来验证非测试代码是否是按照期望的方式运行的, 测试函数体通常需要执行三种操作:1.设置任何所需的数据或状态;2.运行需要测试的代码;3.断言其结果是我们所期望的。本篇文章主要探讨了Rust自动化测试的几种常见场景。 2.测试函数详解 在Rust项目工…

(三)基于高尔夫优化算法GOA求解无人机三维路径规划研究(MATLAB代码)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…

解决:ValueError: the first two maketrans arguments must have equal length

解决&#xff1a;ValueError: the first two maketrans arguments must have equal length 文章目录 解决&#xff1a;ValueError: the first two maketrans arguments must have equal length背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在…

数据可视化:用图表和图形展示数据

写在开头 在当今信息爆炸的时代,海量的数据如同一座沉默的宝库,等待着我们挖掘和理解。然而,这些庞大的数据集本身可能令人望而生畏。在这个时候,数据可视化成为了解数据、发现模式和传达信息的强大工具。本篇博客将带领你探索数据可视化的奇妙世界,学习如何在python中使…

win10 tensorrt源码编译onnx

直接利用官方源码&#xff0c;如下图&#xff0c;trtexec源码在TensorRT安装目录下&#xff0c;双击trtexec.sln文件&#xff0c;使用vs2019打开源码工程。 如下图&#xff0c;以yolov8为例子&#xff0c;编译成功项目之后&#xff0c;设置命令行参数&#xff1a; --onnxd:/yo…

程序员养生之道

程序员养生之道——如何保持健康的生活方式 摘要&#xff1a; 随着互联网行业的快速发展&#xff0c;越来越多的人选择从事程序员这个职业。然而&#xff0c;长时间的工作和高强度的压力容易导致程序员出现亚健康状况&#xff0c;如头发稀疏、视力下降、肥胖等问题。因此&#…