STM32呼吸灯实验手册(TIM定时器)
一、实验目标
- 使用TIM定时器的PWM模式控制LED亮度
- 实现LED渐亮渐灭的呼吸灯效果
- 掌握HAL库的TIM配置方法
二、硬件准备
- 开发板:STM32F103C8T6
- LED模块:LED串联220Ω电阻两组
- USB-TTL调试器
- 硬件连接
三、软件配置(STM32CubeMX)
- 打开STM32CubeMX
- 选择MCU型号:STM32F103C8T6
- 设置SYS调试接口:Serial Wire(SWD)
- 设置TIM参数
对照参数设置
按设置生成的波形
- 设置RCC参数
- 生成项目
四、代码编写
在生成代码的mian函数中编写如下代码
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL1);//启动PWM正常输出
HAL_TIMEx_PWM_Start(&htim1,TIM_CHANNEL1);//启动PWM互补输出while(1){//修改
float t = HAL_GetTick() * 0.001;//获取当前时间float duty = 0.5 * sin(2*3.14*t) + 0.5;//计算占空比uint16_t arr = __HAL_TIM_GET_AUTORELOAD(&htim1);//获取ARR寄存器的值uint16_t ccr = duty * (arr + 1);//计算CRR寄存器的值__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,ccr);//将计算结果写入CCR
}
五、代码解析
关键函数说明
HAL_TIM_PWM_Start
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
功能作用
此函数用于启动定时器(TIM)的指定通道输出PWM信号。其核心操作包括:
- 使能定时器的计数器(
TIMx->CR1 |= TIM_CR1_CEN
) - 启用指定通道的PWM输出(配置通道的CCxE位,如
TIMx->CCER |= TIM_CCER_CC1E
)
参数解析
参数 | 类型 | 说明 |
---|---|---|
htim | TIM_HandleTypeDef* | 指向TIM外设的句柄(包含定时器配置信息,如预分频、计数模式等) |
Channel | uint32_t | 指定PWM输出的通道号(TIM_CHANNEL_1 到 TIM_CHANNEL_4 ) |
HAL_TIMEx_PWM_Start
HAL_StatusTypeDef HAL_TIMEx_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
功能作用
此函数是HAL库中针对高级定时器(TIM1/TIM8)或复杂PWM场景的扩展函数,用于启动定时器的PWM输出。与HAL_TIM_PWM_Start
的主要区别在于:
- 支持高级定时器的互补通道(如CH1N、CH2N等)
- 包含刹车(Break)和死区时间(Dead Time)控制逻辑
- 适用于电机控制、逆变器等需要安全保护的场景
参数解析
参数 | 类型 | 说明 |
---|---|---|
htim | TIM_HandleTypeDef* | 指向高级定时器(TIM1/TIM8)的句柄 |
Channel | uint32_t | 支持互补通道的选项:TIM_CHANNEL_1 TIM_CHANNEL_1N |
HAL_TIM_GET_AUTORELOAD
#define HAL_TIM_GET_AUTORELOAD(__HANDLE__)
功能作用
此宏用于直接读取定时器自动重装载寄存器(AutoReload Register, ARR)的当前值。
核心功能:
- 获取定时器的周期设定值(决定PWM频率或定时溢出时间)
- 适用于动态调整定时参数时的参数校验
- 调试时验证配置是否生效
参数 | 类型 | 说明 |
---|---|---|
__HANDLE__ | TIM_HandleTypeDef* | 指向TIM外设的句柄(包含定时器配置信息) |
HAL_TIM_SET_COMPARE
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)
功能作用
此宏用于直接设置定时器的捕获/比较寄存器(CCRx)值,从而控制PWM占空比或定时触发点。
核心功能:
- 动态调整PWM输出的占空比(如呼吸灯、电机调速)
- 设置输入捕获的触发阈值
- 配置输出比较模式的匹配值
参数 | 类型 | 说明 |
---|---|---|
__HANDLE__ | TIM_HandleTypeDef* | 指向TIM外设的句柄(包含定时器配置信息) |
__CHANNEL__ | uint32_t | 指定通道:TIM_CHANNEL_1 -TIM_CHANNEL_4 |
__COMPARE__ | uint32_t | 比较值(0 ≤ COMPARE ≤ AutoReload) |
关于CCR的值
在while循环中我们要向外输出一个PWM信号, 满足呼吸灯的现象可以用一个正弦波来做输出
占空比是CCR和ARR+1的比值
我们想得到CCR的值根据上述公式可以得到
那么就得到CCR的表达式
uint16_t ccr = duty * (arr + 1);//计算CRR寄存器的值
六、实验现象
烧录程序后,LED呈现渐变呼吸效果
相关文章:
STM32呼吸灯实验手册(TIM定时器)
一、实验目标 使用TIM定时器的PWM模式控制LED亮度实现LED渐亮渐灭的呼吸灯效果掌握HAL库的TIM配置方法 二、硬件准备 开发板:STM32F103C8T6LED模块:LED串联220Ω电阻两组USB-TTL调试器硬件连接 三、软件配置(STM32CubeMX) 打开…...
Element-Plus,使用 El-form中 的 scroll-to-error 没有效果问题记录
因业务需要表单组件中嵌套着表格列表,内容比较多; 所以需要表单校验不通过时,自动定位到不通过的节点; 但发现这个像是没有起到效果一样,后面就是排查的思路了: 容器高度问题:如果表单容器的高度…...
探究高空视频全景AR技术的实现原理
1. 引言 笔者认为现阶段AR技术的应用是还是比较坑爹的,大都是噱头多但是实用的成分少,拿出来做做DEMO是可以,但是难以在实际的项目中落地产生实际的经济价值。一方面是很难在业务上难以找到合适的应用场景(可能管线相关的项目算一…...
大连指令数据集的创建--数据收集与预处理_02
1.去哪儿爬虫 编程语言:Python爬虫框架:Selenium(用于浏览器自动化)解析库:BeautifulSoup(用于解析HTML) 2.爬虫策略 目标网站:去哪儿(https://travel.qunar.com/trav…...
SOME/IP-SD -- 协议英文原文讲解5
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.5 S…...
C#异步编程之async与await
一:需求起因 在 C# 中使用异步编程(特别是使用 async 和 await 关键字)通常是为了提高应用程序的响应性和性能,特别是在需要进行 I/O 操作或执行长时间运行的任务时。 常见应用场景如下: 1. 网络请求 HTTP 请求&…...
Spring Security 登录流程中的自定义解密实现
文章目录 前言1. Spring Security 核心组件介绍2. 前端密码多加密场景的处理3. 重写 DaoAuthenticationProvider4. 让 Spring Security 使用自定义 Provider5. 验证流程总结6. 完整性与调试 总结 前言 在现代 Web 安全体系中,Spring Security 是最常用的安全框架之一…...
考研出分24小时,人类精神状态图鉴
2月24日,上午10点起,各省考研初试成绩陆续公布,考生们或紧张的输入准考证号,或抱团等待“审判”。然而更魔幻的还在后头——下午4点,教育部竟在同一天直接发布了《2025年研考国家分数线》。 不少网友表示:…...
顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-大模型电话机器人
语音流直接对接Realtime API 多模态大模型 直接把音频流输出给大模型,大模型返回音频流。 顶顶通CTI对Realtime API 的支持 提供了以下2个APP可对接任意 •cti_audio_stream 通过TCP推流和播放流,适合用于人机对话场景。 •cti_unicast_start 通过旁…...
《Kafka 理解: Broker、Topic 和 Partition》
Kafka 核心架构解析:从概念到实践 Kafka 是一个分布式流处理平台,广泛应用于日志收集、实时数据分析和事件驱动架构。本文将从 Kafka 的核心组件、工作原理、实际应用场景等方面进行详细解析,帮助读者深入理解 Kafka 的架构设计及其在大数据领域的重要性。 1. Kafka 的背…...
【前端】XML,XPATH,与HTML的关系
XML与HTML关系 XML(可扩展标记语言)和 HTML(超文本标记语言)是两种常见的标记语言,但它们有不同的目的和用途。它们都使用类似的标记结构(标签),但在设计上存在一些关键的差异。 XML…...
(九)趣学设计模式 之 桥接模式!
目录 一、 啥是桥接模式?二、 为什么要用桥接模式?三、 桥接模式的实现方式四、 桥接模式的优缺点五、 桥接模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…...
Web Worker 使用教程
一、概述 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核 CPU 的出现,单线程带…...
算法仿真平台搭建1-FFMPEG+RtspSever快速搭建一个RTSP服务器
一、前言 本文相关的全部源码和RtspSever库,我已打包上传,欢迎大家免费下载,testRTSPSever。 每一个嵌入式视觉算法工程师,都应该有一套属于自己的算法仿真和测试环境。可以方便地进行视频、图像等素材进行在线导入,可…...
网络安全审计员
在当今数字化时代,随着信息技术的迅猛发展,网络安全问题日益凸显,成为各行各业不容忽视的重要议题。特别是对于企业、政府机构等组织而言,网络安全不仅关乎数据资产的安全,更与组织的声誉、客户信任乃至法律法规的遵从…...
SQL Server查询计划操作符(7.3)——查询计划相关操作符(7)
7.3. 查询计划相关操作符 58)Nested Loops:该操作符执行Inner Join,Left Outer Join,Left Semi Join,以及Left Anti Semi Join等逻辑操作。该操作符用其外(上面)输入中的每行数据对其内(下面)输入进行一个搜索,典型场景为其使用一个索引。查询处理器基于预期的成本决…...
数据库测试
TPCH 22条SQL语句分析 - xibuhaohao - 博客园 TPCH模型规范、测试说明及22条语句 - zhjh256 - 博客园 TPC-DS 性能比较:TiDB 与 Impala-PingCAP | 平凯星辰 揭秘Oracle TPC-H性能优化:如何提升数据库查询速度,揭秘实战技巧与挑战 引言 T…...
数据结构——排序4
上次我们讲解了快速排序的递归的几种做法。 那么,作为一名合格的程序员,改递归为非递归是必要的,现在我们来学习一下非递归的做法: 快速排序非递归: 首先,我们先了解一下,为什么要改为非递归…...
Pycharm中怎么加快下载三方包速度
Pycharm中怎么加快下载三方包速度 使用命令行下载,-i pip install transformers -i https://mirrors.aliyun.com/pypi/simple/ 在Windows系统的PyCharm中使用Python 3.12环境时,可通过以下几种方式配置不同镜像源来加快下载包的速度。 方式一:在PyCharm界面中直接配置镜…...
Spring MVC框架二:创建第一个MVC程序
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 有两种方式 利用配置 1、利用IDEA新建一个Maven项目,添加一个web支持 2、导入常用的依赖 <dependencies><dependency><groupId…...
Netty为什么性能很高?
大家好,我是锋哥。今天分享关于【Netty为什么性能很高?】面试题。希望对大家有帮助; Netty为什么性能很高? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty是一款高性能的网络通信框架,主要用于构建高性能的网络应用程序。…...
目标检测tricks
A. Stochastic Weight Averaging (SWA) 1. 基本思想 SWA 的核心思想是通过对训练过程中不同时间点的模型参数进行加权平均,从而获得一个更好的模型。具体来说,SWA 在训练过程的后期阶段对多个不同的模型快照(snapshots)进行平均…...
ai-2、机器学习之线性回归
机器学习之线性回归 1、机器学习2、线性回归2.1、梯度下降法 3、python下调用scikit-learn 1、机器学习 2、线性回归 ####所以y可以当成我们需要的结果,根据公式可以求的y一撇的值更小,所以更接近需要的结果,所以y一撇拟合性更好 2.1、梯度下…...
版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点
版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点 引言正文定义坐标点的类绘图显示代码直接连接两个坐标点引言 由于人工智能的加速普及,每次手动绘制版图都会觉得特别繁琐,作者本人在想可否搞一个自动化连接器件端口的算法,后期可以根据一些设定的限制进行避…...
删除变慢问题
问题: 有一个场景,每天都会删除数据,SQL为delete from xxx where record_date < DATE_SUB(now(), INTERVAL ? DAY) limit 1000 ,一直循环执行,当执行到最后一次满足条件的时候,就会很慢 原理分析 索引与…...
第十四届蓝桥杯Scratch11月stema选拔赛真题——小猫照镜子
编程实现: 小猫照镜子。(背景非源素材) 具体要求: 1). 运行程序,角色、背景如图所示; 完整题目可点击下方链接查看,支持在线编程~ 小猫照镜子_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/s…...
Python标准库【os.path】操作路径
文章目录 1 该模块的源文件2 提取路径信息3 获取文件信息4 判定路径状态5 变换路径6 路径拆分 os.path模块实现了一些操作路径相关的函数。它们都接收字符串、字节串格式的路径或类路径对象(实现os.PathLike协议)为参数。 接收字符串时,函数返回的结果也是字符串&am…...
vue3 keep-alive 页面切换不触发onActivated和onDeactivated方法周期
<script setup lang"ts"> import { onActivated, onDeactivated, shallowRef } from vue import CompA from ../components/CompA.vue import CompB from ../components/CompB.vue const current shallowRef(CompA) onActivated(() > {console.log(组件被激…...
Qt 中集成mqtt协议
一,引入qmqtt 库 我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台时 方便,直接编译就行了。 原始仓库路径:https://github.com/emqx/qmqtt/tree/master 二,使用 声明一个单例类,将订阅到…...
JAVA面试_进阶部分_23种设计模式总结
1. 单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这 个实例。 (1)懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载…...
初阶数据结构(C语言实现)——3顺序表和链表(3)
3.链表 3.1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表的物理结构 1.从上图可看出,链式结构在逻辑上是连续的,但是在物理上不一定连续…...
Vue打包(webpack)缓存
解决方法: 1、修改vue.config.js文件 const Timestamp new Date().getTime();module.exports defineConfig({configureWebpack{output: {filename: [name].${Timestamp}.js,chunkFilename: [name].${Timestamp}.js},},css: {extract: { // 打包后css文件名称添加…...
磁盘阵列新秀GSx并行文件存储是HPC高性能计算/AI 大模型-1替3好省预算
Infortrend 普安存储GSx 并行文件存储系统凭一体化设计,颠覆了传统存储系统的复杂配置模式。内置并行文件系统,支持私有协议或 CIFS 协议,实现客户端/服务器与存储设备的直接连接,无需额外配置I/O节点、元数据服务器及并行系统软件࿰…...
数据基础4: 线性代数基础行列式(矩阵)
二阶 三阶 矩阵和数据之间的关系。 行列式 n,n ;矩阵m行,n列 逆序数 在行列式的计算中,逆序数用于决定每一项前面的符号。 如果一个排列的逆序数是偶数,则该项前面的符号为正; 如果是奇数,则符号为负。 …...
【Project】基于Prometheus监控docker平台
一、设计背景 1.1项目简介 本项目旨在创建一个全面的容器化应用程序监控解决方案,基于Prometheus监控Docker平台上的各种服务。在当今的软件开发环境中,容器化技术已成为一种关键的工具,使应用程序能够更快速、可靠地交付和扩展。然而&…...
AcWing 蓝桥杯集训·每日一题2025·密接牛追踪2
密接牛追踪2 农夫约翰有 N 头奶牛排成一排,从左到右依次编号为 1∼N。 不幸的是,有一种传染病正在蔓延。 最开始时,只有一部分奶牛受到感染。 每经过一个晚上,受感染的牛就会将病毒传染给它左右两侧的牛(如果有的话…...
面试(进阶) —虚拟列表在什么场景使用,如何实现?
面试(进阶) —虚拟列表在什么场景使用,如何实现? 在前端开发中,当需要渲染大量数据时,传统的渲染方式往往会遇到性能瓶颈。一次性将大量数据渲染到DOM中,不仅会导致页面加载缓慢,还可能占用大量内存&#x…...
Linux基础 -- ARM 32位常用机器码(指令)整理
ARM 32位常用机器码(指令)整理 1. 数据处理指令(运算、逻辑、比较) 指令含义示例备注MOV赋值(寄存器传输)MOV R0, R1直接将 R1 复制到 R0MVN取反MVN R0, R1R0 ~R1ADD加法ADD R0, R1, R2R0 R1 R2ADC带进…...
【JAVA】阿里云百炼平台对接DeepSeek-V3大模型使用详解
1、DeepSeek简介 DeepSeek的火热让全世界见证了一场国产AI大模型走向巅峰的盛宴。DeepSeek的横空出世一方面让AI大模型的格局得到重塑,另一方面,对于普通人来说,也有机会零距离的体验到更懂国人的AI大模型。从很多使用过后的小伙伴们的反馈来…...
STM32之时钟树
左边是时钟产生电路,右边是时钟分配电路。中间的SYSCLK就是系统时钟72MHz,在产生电路有四个时钟源,分别是内部8MHz高速RC振荡器,外部的4-16MHz高速石英晶体振荡器,这个一般接8MHz,第三个是外部的32.768kHz低速晶振&…...
QT day1
作业 代码 class Widget: public QWidget {QPushButton* button; //按钮Widget* other; //显示对面 public:Widget(){button new QPushButton("按钮",this); //控件 认this作父this->resize(300,300); //界面大小button->resize(100,10…...
【机器学习】梯度下降法及使用一元二次方程模拟使用梯度下降法的代码实现
梯度下降法 一、摘要二、梯度下降法三、线性方程中使用梯度下降法 一、摘要 文本主要讲述了梯度下降法作为机器学习中的一种优化方法,用于最小化损失函数。它并非直接解决机器学习问题,而是作为求解最优参数的工具。通过二维坐标图直观展示了梯度下降法…...
Hive配置
目录 1. 引言2. 通过docker-compose联动启动Hadoop和MySQL容器3. 配置Hive3.1 下载并解压Hive-4.0.12.2 配置环境变量2.3 安装mysql-connector的jar包2.4 配置Hive2.4.1 hive-env.sh2.4.2 hive-site.xml2.4.2.1 javax.jdo.option.ConnectionURL2.4.2.2 javax.jdo.option.Connec…...
网络安全 越权分为几种
1. 权限查看 Linux 系统中的每个文件和目录都有访问许可权限,通过其确定谁可以通过何种方式对文件和目录进行访问和操作。 文件或目录的访问权限分为只读、只写和可执行3种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改…...
PHP面试题--后端部分
本文章持续更新内容 之前没来得及整理时间问题导致每次都得找和重新背 这次整理下也方便各位小伙伴一起更轻松的一起踏入编程之路 欢迎各位关注博主不定期更新各种高质量内容适合小白及其初级水平同学一起学习 一起成为大佬 数组函数有那些 ps:本题挑难的背因为…...
HTTP~文件 MIME 类型
MIME(Multipurpose Internet Mail Extensions)类型,即多用途互联网邮件扩展类型,是一种标准,用来表示文档、文件或字节流的性质和格式。最初是为了在电子邮件系统中支持非 ASCII 字符文本、二进制文件附件等而设计的&a…...
工程化与框架系列(4)--Webpack 高级配置详解
Webpack 高级配置详解 🛠️ Webpack 是前端工程化中最流行的构建工具之一,掌握其高级配置可以帮助我们构建更高效、更优化的应用。本文将深入探讨Webpack的高级配置技巧和最佳实践。 Webpack 核心概念回顾 🌟 💡 小知识…...
Let‘s Encrypt免费证书的应用示例
文章目录 前言证书申请证书介绍cert.pemchain.pemfullchain.pemprivkey.pem 使用步骤搭建简易demo应用新建nginx配置文件测试SSL是否生效 总结 前言 最近在搞苹果应用上架的问题,据说用HTTP会被拒,但貌似不绝对,2017年苹果曾发公告说必须要求…...
线性模型 - 支持向量机
支持向量机(SVM)是一种用于分类(和回归)的监督学习算法,其主要目标是找到一个最佳决策超平面,将数据点分为不同的类别,并且使得分类边界与最近的数据点之间的间隔(margin)…...
455. 分发饼干(LeetCode)
题目来源: 455. 分发饼干 - 力扣(LeetCode) 题目内容: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i]…...