嵌入式开发--STM32G431RBTx-定时器中断流水灯
嵌入式开发–STM32G431RBTx-定时器中断流水灯
定时器工作原理
如图有反映stm32g431的定时器资源。
共10个定时器
| 定时器 | 定时器类型 | 个数 |
|---|---|---|
| TIM6,7 | 基本定时器 | 2 |
| TIM2,3,4 | 全功能通用定时器 | 3 |
| TIM15,16,17 | 通用定时器(只有1或2个通道) | 3 |
| TIM1,8 | 高级控制定时器 | 2 |
- 当APB1/2分频系数为1时,给定时器的时钟为X1
- 当APB1/2分频系数不为1时,给定时器时钟需X2
基本定时功能,当累加的时钟脉冲数超过预定值时,能触发中断或者触发DMA请求。
是专门用于驱动数模转换器(DAC)
基本定时器TIM6/7内部结构图
- 核心功能是控制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时钟和基本信号

配置定时器
设定TIM6定时器
设定系数

第一个是分频系数(Prescaler)
第二个是周期计数值,按照分频后的时间进行计数(Counter Period)
80M的晶振除以8000,得到的工作频率为80 000 000/8 000=10 000
计算到ARR,如果是1s,就让ARR设置为10 000-1
如此频率乘周期即为时间,即为一次中断触发的时间为1s
使用中断

关于按键中断的实现
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在一秒钟亮灭交替效果
相关文章:
嵌入式开发--STM32G431RBTx-定时器中断流水灯
嵌入式开发–STM32G431RBTx-定时器中断流水灯 定时器工作原理 如图有反映stm32g431的定时器资源。 共10个定时器 定时器定时器类型个数TIM6,7基本定时器2TIM2,3,4全功能通用定时器3TIM15,16,17通用定时器(只有1或2个…...
人像抠图HumanSeg——基于大规模电话会议视频数据集的连接感知人像分割
前言 人像抠图将图像中的人物与背景进行像素级别的区分的技术。通过人像分割,可以实现诸如背景虚化、弹幕穿人等各种有趣的功能,为视频通话和影音观看提供更加优质和丰富的体验。由于广泛部署到Web、手机和边缘设备,肖像分割在兼顾分割精度的…...
Qt 项目使用visual studio 进行开发调试
https://marketplace.visualstudio.com/items?itemNameTheQtCompany.QtVisualStudioTools2015 https://devblogs.microsoft.com/cppblog/bring-your-existing-qt-projects-to-visual-studio/ 正常Qt开发中,使用Qt Creator 进行windows下MSVC编译器的调试是一件挺麻…...
Kotlin 中的惰性集合
1 通过序列提高效率 首先看以下代码: val list listOf(1, 2, 3, 4, 5) list.filter { it > 2 }.map { it * 2 }上面的写法很简单,在处理集合时,类似于上面的操作能帮我们解决大部分的问题。但是,当 list 中的元素非常多的时…...
2024年React初学者入门路线指南
在这篇文章中,我们一步一步探索了如何从零基础开始学习React,并逐渐成长为一名初级开发者。通过理解基础概念、实践构建静态和动态项目,最终发展到创建复杂的应用程序并加入到个人作品集中,您现在已经准备好迈向React开发者的职业…...
【Java基础】了解Java安全体系JCA,使用BouncyCastle的ED25519算法生成密钥对、数据签名
文章目录 一.Java安全体系结构二.JCA和JCE三.CSP(加密服务提供程序)与Engine类1.CSP2.Engine类如何使用引擎类 四.查看当前JDK支持的算法服务提供商(Provider)五.BouncyCastle是什么六.如何使用BouncyCastle?七.bouncycastle实现ED25519工具类 一.Java安全体系结构 …...
SQL Server创建存储过程
使用以下语句创建一个存储过程: CREATE PROCEDURE [schema_name.]procedure_nameparameter1 datatype,parameter2 datatype,... AS BEGIN-- 存储过程的逻辑代码-- 可以包含SQL语句、控制流语句、变量声明等-- 示例:查询表中的数据SELECT column1, colum…...
GraphPad Prism 10:一站式数据分析解决方案
GraphPad Prism 10是一款功能强大的数据分析和可视化软件,广泛应用于生命科学研究、医学、生物、化学等多个领域。以下是对其详细功能的介绍: 首先,GraphPad Prism 10具有出色的数据可视化功能。它支持各种类型的图表和图形,包括…...
前端基础篇-深入了解 Ajax 、Axios
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Ajax 概述 2.0 Axios 概述 3.0 综合案例 1.0 Ajax 概述 通过 Ajax 可以给服务器发送请求,并获取服务器响应的数据。异步交互是指,可以在不…...
是德科技keysight N1912A双通道功率计
181/2461/8938产品概述: Keysight(原Agilent) N1912A P系列双通道功率计可提供峰值、峰均比、平均功率、上升时间、下降时间、最大功率值、最小功率值以及宽带信号的统计数据。 Keysight(原Agilent) N1912A P系列双通道功率计, 可提供峰值、峰均比、平均功率、上升…...
怿星科技Neptune CHT-S测试系统,让智能座舱测试更加高效便捷
随着汽车“智能化”浪潮的推进,汽车的智能化水平正在持续刷新行业认知。在这股智能化潮流中,智能座舱作为客户体验最为直观的部分,其重要性不言而喻。倘若座舱设备出现死机、黑屏、卡顿等现象,都将对客户的使用体验产生非常大的影…...
Vscode初建Vue时几个需要注意的问题
首先放图 注意点1.打开文件夹时,可以是VUE2 或者其他,但不能是VUE,会报错 注意点2.终端输入命令“npm init -y" npm init -y -y 的含义:yes的意思,在init的时候省去了敲回车的步骤,生成的默认的packag…...
最长不下降子序列
问题描述: 统计一个数组中的最长不下降子序列。 示例: 输入:14 输入:13 7 9 16 38 24 37 18 44 19 21 22 63 15 输出:8(其中是7 9 16 18 19 21 22 63) 方法:借鉴B站UP主T_zhao…...
QT gridlayout 循环设置组件,表格也通用 已解决
在需求中。经常遇到,表格 展示需求。 几乎都是json格式的。 // 列表配置文件QJsonArray listJsonArray getCfgJsonData("details_tab_table_config.json");if (listJsonArray.isEmpty()){return;}ui->gridWidget->setMaximumSize(QSize(310, 180)…...
后端前行Vue之路(一):初识Vue
1.Vue是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方…...
C#、.NET版本、Visual Studio版本对应关系及Visual Studio老版本离线包下载地址
0、写这篇文章的目的 由于电脑的环境不同,对于一个老电脑找到一个适配的vscode环境十分不易。总结一下C#、.NET、Visual Studio版本的对应关系,及各个版本Visual Studio的下载地址供大家参考 1、C#、.NET版本、Visual Studio版本对应关系如下 2、Visua…...
yarn安装包时报错error Error: certificate has expired
安装教程: 配置镜像地址: npm config set registry https://registry.npmmirror.com//镜像:https://developer.aliyun.com/mirror/NPM 安装yarn: npm install --global yarn查看版本: yarn --version卸载ÿ…...
手机可以格式化存储卡吗?格式化以后出现什么情况
随着智能手机的普及,存储卡(如SD卡、MicroSD卡等)已成为手机存储扩展的重要工具。然而,在使用过程中,我们有时可能会遇到需要格式化存储卡的情况。那么,手机能否直接格式化存储卡呢?格式化后存储…...
亚马逊AWS展示高效纠错的全新量子比特!
亚马逊网络服务公司(AWS)在量子计算的纠错技术领域取得了显著成就,极大地简化了量子系统的复杂性和资源需求。他们的研究人员通过采用“双轨擦除”量子比特(dual-rail erasure qubit)技术,有效地克服了量子…...
FEX-Emu在Debian/Ubuntu系统使用
FEX-Emu在Debian/Ubuntu系统使用 1. Debootstrap子系统安装(可选)2. Debian/Ubuntu依赖包安装3. 获取FEX-Emu源码并编译4. 根文件系统RootFS安装5. 基于 FEX-Emu 运行应用 1. Debootstrap子系统安装(可选) sudo apt-get install …...
电商卖家看过来!用Face3D.ai Pro低成本生成商品模特3D头像
电商卖家看过来!用Face3D.ai Pro低成本生成商品模特3D头像 关键词:3D头像生成、电商模特、AI建模、低成本解决方案、Face3D.ai Pro 摘要:本文详细介绍如何利用Face3D.ai Pro为电商商品快速生成专业级3D模特头像,从系统部署到实际…...
Spring Boot 4.0发布倒计时72小时:这份内部泄露的Agent性能基准测试报告,已助17家头部企业提前锁定RT<50ms SLA
第一章:Spring Boot 4.0 Agent-Ready 架构概览Spring Boot 4.0 引入了原生支持 Java Agent 的运行时架构设计,标志着框架从“启动即固化”向“运行时可塑”范式的重大演进。该架构将可观测性、动态配置、字节码增强与安全策略注入等能力下沉至 JVM 层级&…...
玩一玩微软的 bit 模型:BitNet. 一个 CPU 就能跑起来的大模型讣
一、 什么是 AI Skills:从工具级到框架级的演化 AI Skills(AI 技能) 的概念最早在 Claude Code 等前沿 Agent 实践中被强化。最初,Skills 被视为“工具级”的增强,如简单的文件读写或终端操作,方便用户快速…...
Agent学习--LLM--推理熵
平时我们用大模型的时候,可以看到虽然最后出来的是一大段话,但是实际上一般都是采用的是流式输出,即一个字一个字的输出出来,而这每个字的生成,本质是agent在不断地推理下一个字或者词是什么,当它遇到关键决…...
MPU9150 DMP库深度解析:嵌入式运动协处理器工程实践
1. MPU9150_DMP库深度解析:嵌入式系统中DMP运动协处理器的工程化应用MPU9150是InvenSense公司于2012年推出的集成六轴惯性测量单元(6-DoF IMU)与三轴电子罗盘(3-DoF Magnetometer)的高精度MEMS传感器。其核心价值不仅在…...
DXVK深度解析:彻底解决GTA IV在Linux平台的纹理模糊问题终极指南
DXVK深度解析:彻底解决GTA IV在Linux平台的纹理模糊问题终极指南 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk DXVK是一个基于Vulkan的D3D8、9、10和11实现…...
OpenClaw+优云智算Coding Plan:从灵感到成文,再到发布的全流程AI自动化肆
1.安装环境准备 1.1.查看物理内存 [rootaiserver ~]# free -m 1.2.操作系统版本 [rootaiserver ~]# cat /etc/redhat-release 1.3.操作系统内存 [rootaiserver ~]# df -h /dev/shm/ 1.4.磁盘空间 [rootaiserver ~]# df -TH [rootaiserver ~]# df -h /tmp/ [rootaiserver ~]# d…...
高效直链文件分享平台深度评测(二)
1. 为什么你需要一个高效直链文件分享平台? 在日常工作和学习中,我们经常需要快速分享文件给同事、朋友或客户。传统的网盘虽然功能丰富,但往往需要对方注册账号、下载客户端,甚至忍受漫长的广告等待时间。而直链文件分享平台则提…...
ESXi6.7.0 U2 直通USB设备给Win10虚拟机的完整指南
1. 环境准备与基础概念 在开始操作之前,我们需要先理解几个关键概念。USB直通是指将物理主机上的USB设备直接分配给虚拟机使用,绕过ESXi系统的中间层管理。这种方式能显著降低输入延迟,特别适合对实时性要求高的外设(如游戏手柄、…...
FIFA 23 Live Editor 终极指南:如何安全地自定义你的足球游戏体验
FIFA 23 Live Editor 终极指南:如何安全地自定义你的足球游戏体验 【免费下载链接】FIFA-23-Live-Editor FIFA 23 Live Editor 项目地址: https://gitcode.com/gh_mirrors/fi/FIFA-23-Live-Editor 你是否曾幻想过让梅西永远保持巅峰状态,让哈兰德…...
