一.呼吸灯原理

    呼吸灯指灯光的亮度随着时间由暗到亮逐渐增强,再由亮到暗逐渐衰减,很有节奏感地一起一伏,就像是在呼吸一样,被广泛应用于手机、电脑、电视等电子设备的指示灯中。
    通过调节PWM占空比实现呼吸灯效果。通过调节定时器的比较寄存器的值,来调节PWM占空比。PWM占空比 = CCR/(ARR+1);ARR:自动装载寄存器的值 ;CCR: 比较寄存器。

二.实验过程

在这里插入图片描述
    上图是 RGB 彩灯,里面由红蓝绿三个小灯构成,通过调节PB0引脚PWM占空比实现绿灯的呼吸灯效果。

三.源代码

1.bsp_generalpwm.c

#include "bsp_generalpwm.h"
//使用TIM3的 输出比较通道3 对应的GPIO-PB0初始化
void INIT_GENERAL_GPIO_CONFIG()
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PB0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//推免输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);
}/* ----------------   PWM信号 周期和占空比的计算--------------- */
// ARR :自动重装载寄存器的值
// CLK_cnt:计数器的时钟,等于 Fck_int / (psc+1) = 72M/(psc+1)
// PWM 信号的周期 T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M
// 占空比P=CCR/(ARR+1)
void INIT_GENERAL_PWM_CONFIG()
{//初始化 TIM_TimeBaseInitTypeDef//开启定时器时钟,即内部时钟CK_INT=72MRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_Prescaler = 720-1;//分频因子TIM_TimeBaseInitStructure.TIM_Period = 100-1;//重载寄存器的值TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化 TIM_OCInitTypeDefTIM_OCInitTypeDef TIM_OCInitStructure;TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//使用PWM1模式TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//输出通道电平极性 低电平有效 (即CNT<CCR(比较寄存器)输出电平)TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能TIM_OCInitStructure.TIM_Pulse = 0;//占空比:TIM_Pulse/(Period +1)TIM_OC3Init(TIM3,&TIM_OCInitStructure);//使能计数器TIM_Cmd(TIM3,ENABLE);
}void DELAY_MS(uint32_t value)
{uint32_t i;for(i=value;i>0;i--){}
}

2.main.c

#include "bsp_generalpwm.h"
int main(void)
{	uint8_t i = 0;INIT_GENERAL_GPIO_CONFIG();INIT_GENERAL_PWM_CONFIG();while(1){for(i=0;i<100;i++){TIM_SetCompare3(TIM3,i);//设置输出比较寄存器(CCR)的值DELAY_MS(0x5FFFF);}for(i=100;i>0;i--){TIM_SetCompare3(TIM3,i);DELAY_MS(0x5FFFF);}}
}

四.实现效果

呼吸灯效果演示

stm32呼吸灯

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

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

相关文章

MySQL LIKE查询终极指南:模糊匹配的利刃与性能深渊

引言 LIKE是MySQL中最强大的模糊匹配操作符&#xff0c;也是性能陷阱最多的查询之一。本文将系统解析其高效使用方法&#xff0c;通过实测数据揭示不同场景下的性能表现&#xff0c;并提供企业级优化方案。一、基础语法与通配符解析 1.1 四种匹配模式详解 -- 前缀匹配&#xff…

开发者工具与效率提升指南

开发者工具与效率提升指南介绍 在软件开发过程中&#xff0c;选择适当的开发工具和配置优化是提升效率的关键。本指南旨在提供关于常用开发工具、IDE配置、自动化流程及效率脚本的全面资源与建议&#xff0c;以帮助开发者更高效地进行编码和项目管理。 开发工具和IDE配置 常用开…

Python 轻量级的 ORM(对象关系映射)框架 - Peewee 入门教程

文章目录基础创建数据库管理对象定义自己的模型连接数据库并创建表插入数据查询数据更新数据删除数据进阶复合主键模型示例复杂查询示例(以Relation模型为例)基础 创建数据库管理对象 from peewee import *db MySQLDatabase(test_db, userroot, passwordpassword, hostlocal…

《Java反射与动态代理详解:从原理到实践》

1. 反射&#xff08;Reflection&#xff09; 1.1 反射的概述 反射是Java语言的核心特性之一&#xff0c;它允许程序在运行状态下动态获取类的信息并操作类的成员&#xff08;构造方法、成员变量、成员方法&#xff09;。 专业定义 对于任意一个类&#xff0c;都能够知道这个类的…

golang7 数组切片

本视频详细讲解了Go语言中的集合类型数据结构&#xff0c;重点介绍了数组、切片、map和list四种集合类型。特别强调了切片和map的重要性&#xff0c;以及它们在实际开发中的应用。同时&#xff0c;详细阐述了数组的定义、操作及其与切片之间的区别&#xff0c;包括数组类型与元…

k8s-容器化部署论坛和商城服务(小白的“升级打怪”成长之路)

目录 一、配置文件编写 1、数据持久化 2、mysql主从复制 3、php解析环境 4、nginx服务 5、redis主从复制 6、tomcat服务 7、操作命令 8、在每个node节点操作上 9、更改服务文件加入redis缓存和实现访问动静分离 在存储主机上查看 10、更改商城应用文件 二、实现域…

智慧AI消防通道占用检测在危险区域的应用

智慧AI消防通道占用检测&#xff1a;构建工厂与仓库的安全防线在工业生产与物流仓储领域&#xff0c;工厂安全与仓库安全始终是企业运营的核心命题。消防通道作为紧急情况下的“生命通道”&#xff0c;其畅通性直接关系到人员疏散效率与火灾扑救效果。然而&#xff0c;传统人工…

LangGraph-2-Demo

状态&#xff1a;一个共享数据结构&#xff0c;表示应用程序的当前快照。它可以是任何 Python 类型&#xff0c;但通常是 TypedDict 或 Pydantic BaseModel。 节点&#xff1a;Python 函数&#xff0c;用于编码代理的逻辑。它们以当前 状态 作为输入&#xff0c;执行一些计算或…

基于硅基流动API构建智能聊天应用的完整指南

基于硅基流动API构建智能聊天应用的完整指南 一、引言&#xff1a;AI编程工具重塑开发范式 人工智能编程工具正在彻底改变软件开发的方式&#xff0c;使开发者能够快速构建以前需要大量专业知识的复杂应用。本文将深入探讨如何使用硅基流动(SiliconFlow)的API&#xff0c;结合…

深入解析MyBatis中#{}和${}的区别与应用场景

在MyBatis框架的使用过程中&#xff0c;SQL映射文件的编写是核心工作之一。而#{}和${}这两种参数占位符语法&#xff0c;虽然看起来相似&#xff0c;却有着本质的区别。正确理解和使用它们&#xff0c;不仅关系到应用程序的安全性&#xff0c;还会影响系统性能。本文将全面剖析…

ELKB日志分析平台 部署

ElasticSearch ELKB 日志分析 介绍 docker-compose一键部署ELK(elasticsearchlogstashkibana) 以下是使用 Docker Compose 部署 Elasticsearch、Logstash、Kibana 和 Beats&#xff08;以 Filebeat 为例&#xff09; 的完整方案&#xff0c;涵盖配置文件、关键参数说明及部署步…

File IO 字节流 | Java 学习日志 | 第 12 天

File 1.概述 File表示路径&#xff0c;可以表示文件和文件夹&#xff0c;可以存在也可以不存在 相对路径&#xff08;相对当前项目&#xff09;&#xff0c;绝对路径。 构造方法File(file/string)&#xff0c;File(file/string,string)。 public static void main(String[] ar…

基于SpringBoot的服装公司进销存管理系统设计与开发(代码+数据库+LW)

摘要 随着服装行业竞争的加剧&#xff0c;传统手工或简单电子表格管理进销存的方式已难以满足现代企业的需求&#xff0c;效率低下且易出错。基于SpringBoot框架的服装公司进销存管理系统应运而生&#xff0c;旨在通过信息化手段提升运营效率和服务质量。系统特别设计了销售员…

openFeign用的什么协议,dubbo用的什么协议

简单直接的答案是&#xff1a;​OpenFeign​&#xff1a;默认使用 ​HTTP​ 协议&#xff08;通常是 HTTP/1.1&#xff0c;也支持 HTTP/2&#xff09;&#xff0c;通信格式为 ​RESTful JSON。​Dubbo​&#xff1a;默认使用 ​Dubbo 协议​&#xff08;一种自定义的、基于 TCP…

Android SystemServer 系列专题【篇四:SystemServerInitThreadPool线程池管理】

本篇重点介绍一下SystemServerInitThreadPool&#xff0c;顾名思义此类针对SystemServer进程的提供了一套ThreadPool线程池的统一标准方案&#xff0c;下面从源码和日志的角度来剖析一个这个类。1、SystemServerInitThreadPool单例设计SystemServerInitThreadPool的源码路径在f…

2014-2024高教社杯全国大学生数学建模竞赛赛题汇总预览分析

一、分析赛题核心意义收集近 11 年的赛题并非简单的 “题目存档”&#xff0c;而是为了从历史规律、能力匹配、实战准备三个维度为参赛者或研究者提供价值。1.1把握竞赛命题趋势&#xff0c;降低选题盲目性赛题命题往往紧扣当年社会热点、科技前沿与行业痛点&#xff08;如 202…

一个头像图片滚动轮播组件(React实现)

遇到一个效果&#xff0c;组件库里没有现成能用的组件&#xff0c;于是手搓了一个&#xff0c;传入图片url列表&#xff0c;和其他配置项即可直接使用。 轮播效果实现思路 假设共有10张图片轮流滚动&#xff0c;轮播图展示3张图片。给正在轮播的图片绑定visible类&#xff0c;轮…

从入门到理解:支持向量机的核心原理与实战思路

一、SVM 的核心目标&#xff1a;找 “最好” 的超平面。1.1 什么是 “超平面”&#xff1f;超平面是一个几何概念&#xff0c;简单来说&#xff1a;在 2 维空间&#xff08;平面&#xff09;中&#xff0c;超平面是一条直线&#xff08;1 维&#xff09;&#xff1b;在 3 维空间…

Python 办公自动化实战:Excel 批量处理 + 自动发邮件

Python 办公自动化实战&#xff1a;Excel 批量处理 自动发邮件关键词&#xff1a; Python办公自动化 • Pandas • OpenPyXL • Email • 定时任务 摘要&#xff1a; 每月底还在手动处理几十份Excel报表并邮件发送&#xff1f;快来学习如何用Python全自动完成&#xff01;本文…

高教杯数学建模2021-C 生产企业原材料的订购与运输

某建筑和装饰板材的生产企业所用原材料主要是木质纤维和其他植物素纤维材料, 总体可分为 A&#xff0c;B&#xff0c;C 三种类型。该企业每年按 48 周安排生产&#xff0c;需要提前制定 24 周的原 材料订购和转运计划&#xff0c;即根据产能要求确定需要订购的原材料供应商&…