嵌入式开发--STM32G431RBTx-定时器中断流水灯

news/2024/5/20 1:29:16/文章来源:https://blog.csdn.net/u011146203/article/details/136943949

嵌入式开发–STM32G431RBTx-定时器中断流水灯

定时器工作原理

image-20240306221155182

如图有反映stm32g431的定时器资源。

共10个定时器

定时器定时器类型个数
TIM6,7基本定时器2
TIM2,3,4全功能通用定时器3
TIM15,16,17通用定时器(只有1或2个通道)3
TIM1,8高级控制定时器2
image-20240320163019569
  • 当APB1/2分频系数为1时,给定时器的时钟为X1
  • 当APB1/2分频系数不为1时,给定时器时钟需X2

基本定时功能,当累加的时钟脉冲数超过预定值时,能触发中断或者触发DMA请求。

是专门用于驱动数模转换器(DAC)

基本定时器TIM6/7内部结构图

image-20240320162924796
  • 核心功能是控制CK_INT时钟是否可以正常传输到PSC预分频器内
  • 当更新事件发生的时候,重装载寄存器的数值才传递到影子寄存器里。影子寄存器是真正起作用的寄存器。当使用定时器过程中,如果不修改这个寄存器,就不涉及这个问题。
【寄存器组成】

计数器寄存器(TIMx_CNT)

预分频寄存器(TIMx_PSC)

自动重装载寄存器(TIMx_ARR)

这三个寄存器都是16位有效数字,可设置的值为0~65535。

【预分频器】
CK_CNT=CK_PSC/(PSC[15:0]+1)
【计数过程】

每来一个CK_CNT脉冲,TIMx_CNT值就加1,当TIMx_CNT值与TIMx_ARR的设定值相等时就自动生成更新事件(也可以产生DMA请求、产生中断信号或者触发DAC同步电路),并且TIMx_CNT自动清零,然后重新开始计数,不断重复上述过程。因此我们只要设定TIMx_PSC和TIMx_ARR这两个寄存器的值就可以控制事件生成时间。对应的就是程序中定时器预分频设置(斜率)和定时器周期。

基本定时器TIM6/7时钟和基本信号

image-20240320173541116

配置定时器

设定TIM6定时器

image-20240320174021480

设定系数

image-20240320174808589

第一个是分频系数(Prescaler)

第二个是周期计数值,按照分频后的时间进行计数(Counter Period)

80M的晶振除以8000,得到的工作频率为80 000 000/8 000=10 000

计算到ARR,如果是1s,就让ARR设置为10 000-1

如此频率乘周期即为时间,即为一次中断触发的时间为1s

使用中断

image-20240320174839457

关于按键中断的实现

	struct keys key[4]={0,0,0};	if(htim->Instance==TIM3){key[0].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);key[1].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);key[2].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);key[3].key_sta=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);}

这段代码是一个中断回调函数,用于处理定时器 TIM3 的中断事件。代码中包含一个名为 key 的结构体数组,用于记录按键的状态。

在函数体中,首先通过读取 GPIO 引脚的状态,将按键的状态存储到 key 数组中的相应位置。其中,key[i].key_sta 表示第 i 个按键的状态。

接下来,使用一个循环遍历 key 数组的每个元素,对每个按键的状态进行判断和处理。

	for(int i=0;i<4;i++){switch (key[i].judge_sta){case 0:  //{if(key[i].key_sta==0) key[i].judge_sta=1;}break;case 1:{if(key[i].key_sta==0){key[i].judge_sta=2;key[i].single_flag=1;}else key[i].judge_sta=0;}break;case 2:{if(key[i].key_sta==1){key[i].judge_sta=0;						}}break;	}		}

switch 语句中,根据 key[i].judge_sta 的值来确定需要执行的操作。key[i].judge_sta 表示按键的判断状态。

key[i].judge_sta的值为 0 时,表示按键处于初始状态。

  • 如果按键的状态为按下(key[i].key_sta 等于 0),则将 key[i].judge_sta 的值设为 1,表示按键已按下。

key[i].judge_sta的值为 1 时,表示按键已按下。

  • 如果按键的状态仍然为按下,维持 key[i].judge_sta 的值为 1。
  • 如果按键的状态变为松开(key[i].key_sta 等于 1),则将 key[i].judge_sta 的值设为 2,表示按键已松开,并将 key[i].single_flag 的值设为 1,表示按键被单击。

key[i].judge_sta的值为 2 时,表示按键已松开。

  • 如果按键的状态变为按下,将 key[i].judge_sta 的值设为 0,表示按键已按下。

功能实现

stm32g4xx_it.c文件中TIM6_DAC_IRQHandler函数下添加如下内容。

void TIM6_DAC_IRQHandler(void)
{HAL_TIM_IRQHandler(&htim6);LED_Disp(ledFlag);ledFlag = !ledFlag;}

即可实现LED在一秒钟亮灭交替效果

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

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

相关文章

51单片机中断信号的种类及应用场景

在嵌入式系统中&#xff0c;中断是一种重要的事件处理机制&#xff0c;它可以在程序执行的任何时候暂停当前任务&#xff0c;转而执行与之相关的特殊任务或事件。51单片机作为一种常见的微控制器&#xff0c;其中断功能在各种应用中起着关键作用。然而&#xff0c;对于初学者和…

权限提升-Win系统权限提升篇计算机管理用户进程注入令牌窃取服务启动远程控制

知识点 1、计算机管理用户到System-入口点和应用点 2、计算机管理用户到System-服务启动&远程控制 3、计算机管理用户到System-进程注入&令牌窃取 普通用户是没办法用(服务启动&远程控制、进程注入&令牌窃取等方法)提权到administrator、system权限的 而syst…

Git Commit 提交规范,变更日志、版本发布自动化和 Emoji 提交标准

前言 Git Commit 是开发的日常操作, 一个优秀的 Commit Message 不仅有助于他人 Review, 还可以有效的输出 CHANGELOG, 对项目的管理实际至关重要, 但是实际工作中却常常被大家忽略&#xff0c;希望通过本文&#xff0c;能够帮助大家规范 Git Commit&#xff0c;并且展示相关 …

Apache SeaTunnel和SeaTunnel Web 安装部署

Apache SeaTunnel和SeaTunnel Web 安装部署 前面我们介绍已经介绍过了Apache SeaTunnel,这里我们看一下SeaTunnel 的安装部署,早期的SeaTunnel 是没有web 页面的,只能在命令行里使用,现在SeaTunnel 已经有了web 端了,这就降低了我们的使用门槛 下载配置 我们可以去下面的…

【Word自动化办公】使用python-docx对Word进行操作

目录 一、环境安装 二、文档各组成结构获取 2.1 组成结构讲解 2.2 段落run对象的切分标准 三、获取整篇文档内容 四、写入指定样式的数据 4.1 通过add_paragraph与add_run参数添加样式 4.2 单独设置文本样式 五、添加标题 六、换行符&换页符 七、添加图片数据 …

Linux:rpm部署Jenkins(1)

1.获取Jenkins安装包 我这里使用的是centos7系统&#xff0c;ip为&#xff1a;192.168.6.6 2G运存 连接外网 Jenkins需要java环境&#xff0c;java的jdk包你可以去网上下载离线包&#xff0c;或者直接去yum安装&#xff0c;我这里使用的是yum安装 再去获取Jenkins的rpm包…

RabbitMQ的使用—实战

RabbitMQ的使用—实战 ​ RabbitMQ是一个开源的消息代理中间件&#xff0c;在分布式系统开发中被广泛应用。它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c;提供可靠的消息传递、灵活的路由、消息确认等功能。下面是使用RabbitMQ的基本流程&#xff1a; 安…

(附源码)基于Spring Boot和Vue的前后端分离考研资料分享平台的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31…

vue 消息左右滚动(前后无缝衔接)

之前一直用vue-seamless-scroll&#xff0c;无奈此组件有两个缺点不满足实际效果&#xff1a;1&#xff09;标题过长被截取、2&#xff09;标题果断也会滚动&#xff0c;无奈我自己封装一个&#xff0c;满足此两个弊端&#xff0c;也能达到vue-seamless-scroll组件的功能&#…

约数个数(数论,蓝桥杯)

题目描述&#xff1a; 给定一个数n&#xff0c;再给出n个数&#xff0c;现在要求你求出这些数的乘积的约数个数总和&#xff0c;结果对1e97取模。 取值范围&#xff1a;1<n<100; 1<ni<2e9; 分析步骤&#xff1a; 第一&#xff1a;要求约数的个数&#xff0c;我们有…

Canine IP-10/CXCL 10 ELISA试剂盒上新

科研用Canine IP-10/CXCL 10 ELISA试剂盒重磅来袭&#xff0c;将在免疫学、癌症研究与神经科学等多个领域助力各位老师们的研究&#xff01; 图1&#xff1a;犬IP-10/CXCL10结构预测&#xff08;图片来源&#xff1a;UniProt&#xff09; C-X-C基序趋化因子(C-X-C motif chemok…

【k8s网络】梳理cni发展脉络

参考 《深入剖析 Kubernetes&#xff08;张磊&#xff09;》 补充 详解 Calico 三种模式&#xff08;与 Fannel 网络对比学习&#xff09;_calico vxlan-CSDN博客 容器网络 容器的网络栈 每个容器有自己的 net namespace net namespace 可以称之为网络栈所谓“网络栈”&…

vue.js+element-ui的基础表单

遇到原生的html小型单页应用时&#xff0c;是脱离了vue框架&#xff0c;而我们又想使用vue的语法和element的组件加快我们的开发速度&#xff0c;这个时候就需要引用他们的js了。技术栈即htmlvue.jselement-ui。而使用它们的方法也很简单&#xff0c;引入对应的js和css文件即可…

智慧交通(代码实现案例)

1.项目简介 目标: 了解智慧交通项目的架构知道智慧交通项目中的模块能够完成智慧交通项目的环境搭建 该项目是智慧交通项目&#xff0c;通过该项目掌握计算机视觉的方法在交通领域的相关应用&#xff0c;包括车道线检测的方法&#xff0c;多目标车辆追踪及流量统计方法&#…

C#学习笔记3:Windows窗口计时器

今日继续我的C#学习之路&#xff0c;今日学习自己制作一个Windows窗口计时器程序&#xff1a; 文章提供源码解释、步骤操作、整体项目工程下载 完成后的效果大致如下&#xff1a;&#xff08;可选择秒数&#xff0c;有进度条&#xff0c;开始计时按钮等&#xff09; &#xf…

基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现

基于JavaSpringmvcmyabtishtml的鲜花商城系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…

Java基于微信小程序的校园请假系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#…

基于单片机的智能花盆设计

摘 要 本文设计了一种智能化的花盆控制系统。该系统采用STC89C51 单片机作为主控制器,通过温湿度传感器对植物生长环境进行检测,将采集的数据信号与系统数值进行比较,从而实现了智能花盆的自动或手动浇水功能。 关键词 智能花盆;STC89C51 单片机;温湿度检测 0 引言 随着…

使用postman调用Vcenter-Api

一、下载postman Postman API Platform 二、Vcenter-APi-文档 Create Session | CIS | vSphere CIS REST APIs 三、如何调用&#xff1f; 一、获取访问凭证 两种方式进行鉴权&#xff0c;这里讲第一种。 二、使用postman调用Api获取凭证 下面就是vmware-api-session-id …

Knowledge Graph Neural Network

利用知识图谱预测药物相互作用&#xff0c;代码&#xff1a;Knowledge Graph Neural Network&#xff0c;原文&#xff1a;KGNN: Knowledge Graph Neural Network for Drug-Drug Interaction Prediction&#xff0c;模型框架如下&#xff1a; 文章目录