蓝桥杯STM32G431RBT6学习——定时器中断

news2024/9/20 21:43:55

蓝桥杯STM32G431RBT6学习——定时器中断

前言

从网络上的资料来看,蓝桥杯嵌入式好像并不考外部中断(毕竟通常只是个按键应用),因此跳过进行定时器的学习。
STM32单片机的定时器通常分为高级定时器、通用定时器、基本定时器三种(滴答定时器除外),STM32G431系列也不例外,从硬件框图可以看到其定时器包括:高级定时器(TIM1、8),通用定时器(TIM2、3、4、15、16、17),基本定时器(TIM6、7)。
在这里插入图片描述
其中,高级定时器(TIM1、8)具有完整的三种定时器模式(向上、向下、向上/向下),它可用于各种目的,包括测量输入脉冲长度信号(输入捕获)或产生输出波形(输出比较,PWM,带死区插入的互补PWM)(摘抄数据手册P1085),具有四个通道;通用定时器(TIM2、3、4)除了无法输出互补PWM波外,其他基本与高级定时器一致;通用定时器(TIM15、16、17)相对另外三个通用定时器增加了互补PWM波的功能,但是通道数被阉割了;基本定时器(TIM6、7)一般用于驱动DAC,其他时候不常使用。
定时器具体应用描述可查阅数据手册P33、P34

STM32Cube配置

在定时器的选择上,应先审题查看是否需要进行PWM输出或频率测量等功能,因为这些对使用引脚存在要求,在定时器中断使用时要挑选以上功能没用到的定时器进行使用。
TIM3配置
设置时钟源为内部时钟源,并设置定时器分频系数及计数值,计算公式如下:
定时器频率 = 80MHZ/分频系数/计数值(TIM3属于APB1查阅时钟树为80MHZ)
在这里插入图片描述
同时使能其中断:
在这里插入图片描述

Keil代码编写

STM32CubeMX配置完成后,会自动生成定时器的初始化配置代码,因此我们只需要编写其中断回调函数后,开启其对应定时器即可。

定时器相关API:

定时器回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

参数:定时器类型结构体,其成员变量TIM_TypeDef *Instance; 为定时器类型变量
开启/暂停定时器

HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);

参数:定时器类型指针,CubeMX生成的定时器头文件中存在变量定义
具体使用
在主函数中找一个合适的位置(Begin和end之间)编写中断回调函数,其函数格式于stm32g4xx_hal_tim.h中定义了模板。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim -> Instance == TIM3)
	{
		num++;
	}
}

后记

在使用定时器时发现定时器无法使用,翻了翻发现是没有调用定时器启动函数HAL_TIM_Base_Start_IT,细看后发现关于定时器启动存在多种方式:阻塞轮询模式、非阻塞中断模式、DMA模式,尝试使用阻塞模式开启定时器,发现其他部分内容无法正确运行,关于定时器的阻塞模式与非阻塞模式学习有待了解,有大佬懂的可以私聊学习一下。。。

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

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

相关文章

111、【树与二叉树】leetcode ——669. 修剪二叉搜索树:递归法(C++版本)

题目描述 解题思路 本题的关键是用好递归这个结构,用好每次他向下的遍历和返回的值。每一次递归时,相当于解决与之前相同的问题,因此先按某一种类子问题进行讨论(仅有三个结点的满二叉树),当递归的方式向下…

二本学历5年经验的程序员,出去面试被碾压~

目录 1、从一个求职案例引入2 、学历差距:面试官的第一印象3、公司背景差距:你的人生名片4、技术差距:硬核能力的欠缺5、架构能力的差距6、面试结果的分析 这篇文章,聊一个很多人感兴趣的话题,小公司的Java工程师和大…

计网必会:HTPP详解、cookie、缓存

文章目录应用层协议Web和HTTPHTTP 概述采用非持续连接的HTTPRTT 往返时间的定义**三次握手过程**采用持续连接的HTTPHTTP到底采用哪个?HTTP 的报文格式请求报文功效格式响应报文状态码格式Cookie什么是cookieWeb缓存在学习的过程很多人都遇到了HTTP和Cookie&#xf…

【matplotlib】19.基本用法

#【matplotlib】19.基本用法 2021.1.19 画figure图基本方法。参考: https://m.runoob.com/matplotlib/matplotlib-pyplot.html https://mofanpy.com/tutorials/data-manipulation/plt/figure matplotlib 是python的画图包 19.1 基础使用 plot图,就是以…

JavaEE2-Spring核心与设计思想

目录 1.Spring是什么? 2.容器是什么? 3.IoC是什么? 3.1.传统程序开发 3.2.控制反转式程序开发 3.3.对比总结规律 4.理解Spring IoC 4.1.将对象(Bean)存入到容器(Spring); 4.2.从容器中取出对象。 5.DI概念说明 1.Spring…

LINUX---进程

目录相关概念1.什么是程序,什么是进程,有什么区别2.如何查看系统中有哪些进程3.进程标识符4.父进程,子进程5.C程序的存储空间是如何分配的创建进程函数forkvforkfork创建进程:vfork创建进程:进程退出正常退出:异常退出…

在XXX中找到了XXX的副本,但是当前代码与XXX中内置的版本不同【几种解决方案】

Microsoft VS警告类似如图所示: 然后发现编译编写好的代码无法打断点。定义的变量无法获取。 方案一: 把提示的该文件备份在其他文件夹一份,然后在项目中删除该文件。再把备份的文件放到该项目中。然后再编译。 方案二(参考该博客…

Udev设备管理器

udev 引入 在2.4内核中 引入了 devfs,他支持设备节点的动态创建。devfs提供了在内存中的文件系统中创建设备节点的能力。设备驱动程序能够自主的管理自己的设备文件。而命名节点的任务还是落到了设备驱动程序头上。但是,设备命名策略是可管理的&#xf…

【设计模式】结构型模式·适配器模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易,如果您觉得写的不错,欢迎给博主来一波点赞、收藏~让博主更有动力吧! 一. 概述 将一个类的接口转换成客户希望的另外一个接口,使得原本接口不兼容而不能一…

分布式搜索引擎--Elasticsearch

1.1 相关术语 和mysql类比 索引:数据库,database,6.0以后变化,对应表 类型:table,6.0以后变化,废弃 文档:一张表里的一行 字段:一个属性就是一个字段 和分布式相关 集群…

NLP学习笔记(六) Transformer简明介绍

大家好,我是半虹,这篇文章来讲 Transformer\text{Transformer}Transformer,想要获取更多相关文章,欢迎关注 自然语言处理 专栏 在之前的两篇文章中,我们介绍过序列到序列模型以及注意力机制在序列到序列模型中的应用 …

Linux开启Docker远程访问并设置安全访问(证书密钥),附一份小白一键设置脚本哦!

前言 喜欢折腾慢慢看,不喜欢折腾直接跳到小简下文的一键脚本那里,两分钟搞好。 我的博客:https://blog.ideaopen.cn 我的公众号:小简聊开发 开启远程访问 编辑docker.service文件 vi /usr/lib/systemd/system/docker.service # …

Python FastAPI 框架 操作Mysql数据库 增删改查

2 比 1 更容易理解,可以先看2(单文件级别) 1、FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库。 在这里,让我们看一个使用着SQLAlchemy的示例。 您可以很容易地将SQLAlchemy支持任何…

每天进步一点点,今天来学结构体

什么是结构体? C 语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级语言中记录。 …

01、数据结构——数组

一、数据结构与算法 数据结构是一门研究组织数据方式的学科,有了编程语言也就有了数据结构。学好数据结构可以编写出更加漂亮、更加有效率的代码。程序数据结构算法数据结构是算法的基础 二、稀疏数组: 1、基本介绍: 当一个数组中大部分元…

【Javascript】文本转语音SpeechSynthesisUtterance

SpeechSynthesisUtterance基本介绍 SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 SpeechSynthesisUtterance基本属性 SpeechSynthesisUtterance.lang 获取并设置话语的语言 SpeechSynthesis…

InfluxDB 笔记

概念 Measurement 类似于表名。 A measurement acts as a container for tags, fields, and timestamps. Tag 补充描述数据的信息,如示例中的location和scientist描述了该数据的采集地和采集人。这两个称为Tag Key,具体的值则称为Tag Value&#xff0c…

小程序基础篇-视图与逻辑

本次学习目标&#xff1a;实现页面间的导航跳转实现下拉刷新实现上拉加载更多知道小程序常用的生命周期函数1.页面导航页面导航指的是页面之前相互的跳转浏览器之间的页面导航有两种&#xff1a;<a>;location.href小程序之间的页面导航有两种&#xff1a;声明式导航&…

告警与恢复告警原理及实现

一、 背景自“双碳”政策提出以来&#xff0c;KaiwuDB 聚焦“数字能源”领域&#xff0c;为用户打造数字能源管理平台&#xff0c;旨在提升综合能源和碳资产管理能力。数字能源管理平台是以 KaiwuDB 为核心建设的云-边-端一体化数据服务平台&#xff0c;致力于为 IoT、工业互联…

前言技术--swagger

目录一、前后端分离的特点二、在没有swagger之前三、swagger的作用四、swagger的优点五、集成swagger5.1 新建springboot项目5.2 集成swagger5.3 开发一个controller用于测试5.4 启动服务&#xff0c;验证集成效果六、swagger常用注解七、swagger使用综合案例一、前后端分离的特…