STM32呼吸灯实验手册(TIM定时器)

一、实验目标

  1. 使用TIM定时器的PWM模式控制LED亮度
  2. 实现LED渐亮渐灭的呼吸灯效果
  3. 掌握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

参数解析

参数类型说明
htimTIM_HandleTypeDef*指向TIM外设的句柄(包含定时器配置信息,如预分频、计数模式等)
Channeluint32_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)控制逻辑
  • 适用于电机控制、逆变器等需要安全保护的场景

参数解析

参数类型说明
htimTIM_HandleTypeDef*指向高级定时器(TIM1/TIM8)的句柄
Channeluint32_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呈现渐变呼吸效果

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

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

相关文章

51页精品PPT | 农产品区块链溯源信息化平台整体解决方案

PPT展示了一个基于区块链技术的农产品溯源信息化平台的整体解决方案。它从建设背景和需求分析出发,强调了农产品质量安全溯源的重要性以及国际国内的相关政策要求,指出了食品安全问题在流通环节中的根源。方案提出了全面感知、责任到人、定期考核和追溯反…

python-leetcode-删除并获得点数

740. 删除并获得点数 - 力扣(LeetCode) 解法 1:动态规划(O(n) 时间,O(n) 空间) class Solution:def deleteAndEarn(self, nums: List[int]) -> int:if not nums:return 0# 统计每个数的贡献points Cou…

Grafana服务安装并启动

Grafana服务安装并启动 1、介绍2、下载Grafana3、解压缩文件4、启动Grafana服务5、增加数据源,填写Prometheus访问地址6、增加图表 1、介绍 Grafana是一个开源的可视化系统监控和警报工具包。 2、下载Grafana 介绍:Grafana是一个开源的可视化系统监控和警报工具包…

6. grafana的graph简介

1. Settings功能 2. Visualization功能 (可视化的方式,后续会写一些) 3. Display 功能(显示方面的设置) bars 柱状图方式显示 lines(不选不会出功能) line width 线条的粗细 staircase 会让折…

react18自定义hook实现

概念:自定义 hook 是一种将组件逻辑提取到可复用函数中的方式,它允许你在多个组件中共享相同的状态和行为。自定义 hook 的本质上是一个普通的 JavaScript 函数,它可以使用 React 内部的 hook(如 useState、useEffect、useContext…

千峰React:函数组件使用(3)

多组态进行正确记忆 首先看这个代码 import { useState } from reactfunction App() {const [count, setCount] useState(0)const [count2, setCount2] useState(0)const [count3, setCount3] useState(0)const handleClick () > {setCount(count 1)}return (<div&…

xss-labs搭建及学习

搭建 搭建过程与一般的网站搭建差不多 参考资料 当出现这个界面就是成功了 学习 学习资料 xss概念理解&#xff1a;XSS跨站脚本攻击 xss常见标签&#xff1a;XSS常见触发标签 level1-直接打 这里提示payload长度为4查看一下源码 发现get传参name的值test插入了html里头&am…

网络安全审计员

在当今数字化时代&#xff0c;随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显&#xff0c;成为各行各业不容忽视的重要议题。特别是对于企业、政府机构等组织而言&#xff0c;网络安全不仅关乎数据资产的安全&#xff0c;更与组织的声誉、客户信任乃至法律法规的遵从…

安全模块设计:token服务、校验注解(开启token校验、开启签名校验、允许处理API日志)、获取当前用户信息的辅助类

文章目录 引言pom.xmlI 校验注解ApiValidationII token服务TokenService获取当前用户信息的辅助类III 域登录接口响应数据登陆用户信息引言 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/PO…

SpringBoot 2 后端通用开发模板搭建(异常处理,请求响应)

目录 一、环境准备 二、新建项目 三、整合依赖 1、MyBatis Plus 数据库操作 2、Hutool 工具库 3、Knife4j 接口文档 4、其他依赖 四、通用基础代码 1、自定义异常 2、响应包装类 3、全局异常处理器 4、请求包装类 5、全局跨域配置 补充&#xff1a;设置新建类/接…

京准电钟:NTP精密时钟服务器在自动化系统中的作用

京准电钟&#xff1a;NTP精密时钟服务器在自动化系统中的作用 京准电钟&#xff1a;NTP精密时钟服务器在自动化系统中的作用 NTP精密时钟服务器在自动化系统中的作用非常重要&#xff0c;特别是在需要高精度时间同步的场景中。NTP能够提供毫秒级的时间同步精度&#xff0c;这…

基于Redis 的分布式 session 图解

Redis 分布式 Session 工作原理 1. 传统 Session 的问题 在传统单服务器环境中&#xff0c;HTTP Session 存储在应用服务器的内存中。这在分布式系统中会导致问题&#xff1a; 用户的请求可能被分发到不同服务器&#xff0c;导致会话不一致服务器宕机会导致会话丢失需要依赖…

pikachu

暴力破解 基于表单的暴力破解 【2024版】最新BurpSuit的使用教程&#xff08;非常详细&#xff09;零基础入门到精通&#xff0c;看一篇就够了&#xff01;让你挖洞事半功倍&#xff01;_burpsuite使用教程-CSDN博客 登录页面&#xff0c;随意输入抓包&#xff0c;发送到攻击…

vmware:新装ubuntu无法使用ssh连接或者复制粘连

前言 如标题所示&#xff0c;我在使用vmware-workstation安装ubuntu22.04LTS桌面版虚拟机后&#xff0c;发现没办法使用ssh远程连接&#xff0c;或者与宿主机之间的复制粘连功能。 解决方案 卡了一天&#xff0c;以为是网络通讯问题&#xff0c;没想到是内部服务的问题。 远程连…

【uniapp原生】实时记录接口请求延迟,并生成写入文件到安卓设备

在开发实时数据监控应用时&#xff0c;记录接口请求的延迟对于性能分析和用户体验优化至关重要。本文将基于 UniApp 框架&#xff0c;介绍如何实现一个实时记录接口请求延迟的功能&#xff0c;并深入解析相关代码的实现细节。 前期准备&必要的理解 1. 功能概述 该功能的…

基于机器学习的结构MRI分析:预测轻度认知障碍向阿尔茨海默病的转化

摘要 阿尔茨海默病是一种致残性神经退行性疾病&#xff0c;目前尚无有效的治疗方法。预测阿尔茨海默病的诊断对患者的预后至关重要&#xff0c;但目前的阿尔茨海默病生物标志物检测方法具有侵入性、耗时且昂贵。因此&#xff0c;开发基于MRI的计算方法用于阿尔茨海默病的早期诊…

HTML——前端基础1

目录 前端概述 前端能做的事情​编辑 两步完成一个网页程序 前端工具的选择与安装 HTML HTML5介绍 HTML5的DOCTYPE声明 HTML基本骨架 文字标签 标题之标签 标签之段落、换行、水平线 标签之图片 标签之超文本链接 标签之文本 列表标签之有序列表 列表标签之无序…

量子计算可能改变世界的四种方式

世界各地的组织和政府正将数十亿美元投入到量子研究与开发中&#xff0c;谷歌、微软和英特尔等公司都在竞相实现量子霸权。 这其中的利害关系重大&#xff0c;有这么多重要的参与者&#xff0c;量子计算机的问世可能指日可待。 为做好准备&#xff0c;&#xff0c;我们必须了…

Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效

目录标题 Jsmoke &#x1f6ac;&#x1f6ac; by Yn8rt使用方式界面预览功能特性支持的敏感信息类型 Jsmoke &#x1f6ac;&#x1f6ac; by Yn8rt ​ 该插件由 Yn8rt师傅 开发&#xff0c;插件可以理解为主动版的hae和apifinder&#xff0c;因为其中的大多数规则我都引用了&a…

让Word插上AI的翅膀:如何把DeepSeek装进Word

在日常办公中&#xff0c;微软的Word无疑是我们最常用的文字处理工具。无论是撰写报告、编辑文档&#xff0c;还是整理笔记&#xff0c;Word都能胜任。然而&#xff0c;随着AI技术的飞速发展&#xff0c;尤其是DeepSeek的出现&#xff0c;我们的文字编辑方式正在发生革命性的变…