PWM控制實現呼吸燈

一.呼吸燈原理

????呼吸燈指燈光的亮度隨著時間由暗到亮逐漸增強,再由亮到暗逐漸衰減,很有節奏感地一起一伏,就像是在呼吸一樣,被廣泛應用于手機、電腦、電視等電子設備的指示燈中。
????通過調節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;即根據產能要求確定需要訂購的原材料供應商&…