STM32 PWM配置及呼吸灯
PWM的英文全称是"Pulse Width Modulation",中文翻译为"脉冲宽度调制"。
在PWM中可以调节的其实只有两个东西,一个叫做可调周期(调频率),另一个叫做占空比(高电平/周期)。
而呼吸灯其实就是改变流经二极管的平均电流,也就是说当周期一定的情况下,流经二极管的高电平发生改变。
反之,倒回去,灯就会由暗变亮。
由此可以看出其周期不需要改变,只需要改变其占空比。
我们假设LED灯在PA1上,那么我们需要配置两个东西,一个是GPIO_PA1,一个是TIM2_PWM。所以我们要注意PA口的时钟,和TIM2挂在哪个总线上,需要先把这两个外设时钟打开。
查看STM32F103xx performance line block diagram(性能线路框图)
可以看到GPIOA挂到了APB2上,TIM2挂到了APB1上。所以我们做的第一件事就是开启GPIOA和TIM2的时钟。
打开库函数手册
//1.打开外设时钟
void TIM2_PWM_Configarution(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
}
从STM32F103xx pin definitions可以看到PA1有个复用功能TIM2_CH2。我们要把GPIOA_Pin_1配置成复用功能。
//2.配置GPIO口
void TIM2_PWM_Configarution(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);}
//3.设置周期
void TIM2_PWM_Configarution(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period = 19999;TIM_TimeBaseStructure.TIM_Prescaler = 71; //TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);}
PWM工作的时候,有一个中间的比较值,例如PWM的计数是从0~100,设置中间比较值为50。假设现在值是1,它就会和50比较,因为它是向上计数,所以1++变为2,当增加到比较值的时候,电平会发生改变。而模式1和模式2就是决定初始的电平。
如果是PWM1模式:
a)如果设置TIM_OCPolarity_High:
TIMx_CNT<TIMx_CCR输出为高电平
TIMx_CNT>TIMx_CCR输出为低电平
b)如果设置TIM_OCPolarity_Low:
TIMx_CNT<TIMx_CCR输出为低电平
TIMx_CNT>TIMx_CCR输出为高电平
如果是PWM2模式:
a)如果设置TIM_OCPolarity_High:
TIMx_CNT<TIMx_CCR输出为低电平
TIMx_CNT>TIMx_CCR输出为高电平
b)如果设置TIM_OCPolarity_Low:
TIMx_CNT<TIMx_CCR输出为高电平
TIMx_CNT>TIMx_CCR输出为低电平
//4.输出比较功能
void TIM2_PWM_Configarution(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period = 19999;TIM_TimeBaseStructure.TIM_Prescaler = 71; //71+1= 72·ÖƵ//TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputState = TIM_OutputNState_Enable;TIM_OC2Init(TIM2, & TIM_OCInitStructure);TIM_Cmd(TIM2, ENABLE);
}
main.c
#include "bsp_SysTick.h"
#include "bsp_tim2.h"int main(void)
{int i;SysTick_Configuration();TIM2_PWM_Configuration(); while(1){for(i = 0; i < 20000; i++){TIM_SetCompare2(TIM2, i);Delay_us(50);}for(i = 20000; i>0; i--){TIM_SetCompare2(TIM2, i);Delay_us(50);}}
}
相关文章:

STM32 PWM配置及呼吸灯
PWM的英文全称是"Pulse Width Modulation",中文翻译为"脉冲宽度调制"。 在PWM中可以调节的其实只有两个东西,一个叫做可调周期(调频率),另一个叫做占空比(高电平/周期)。 而…...

华为云 CodeArts Snap 智能编程助手 PyCharm 插件安装与使用指南
1 插件安装下载 1.1 搜索插件 打开 PyCharm,选择 File,点击 Settings。 选择 Plugins,点击 Marketplace,并在搜索框中输入 Huawei Cloud CodeArts Snap。 1.2 安装插件 如上图所示,点击 Install 按钮安装 Huawei Cl…...

SpringSecurity分布式安全框架
Spring Security是一个基于Spring框架的安全框架,它提供了全面的安全解决方案,包括用户认证和用户授权等Web应用安全性问题。Spring Security可以轻松扩展以满足自定义需求,它的真正强大之处在于它可以轻松扩展以满足自定义要求。 对于分布式…...

高速下载b站视频的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

Qt之彻底解决QSpinBox限定范围无效的问题
QSpinBox有个比较啃爹的问题,不管取值范围设置为多少,都能一直输入0,如下图所示: 当取值范围包含负数时,负号后也可以一直输入0,如下图所示: 还有就是当取值范围设置为10以上时,比如10~100,却可以输入1~9 虽然上述非法输入最终都未生效,当QSpinBox失去焦点时会显示为…...
Ktor vs Spring Boot:哪个框架能帮助你构建更高性能的 Web 应用?
文章首发地址 Ktor 和 Spring Boot 是两个在 Kotlin Web 开发中常用的框架,它们有一些共同点,也有一些区别。 共同点: 都支持 Kotlin:Ktor 和 Spring Boot 都能够完全支持 Kotlin 语言,这使得开发者可以使用 Kotlin …...

【Ubuntu18.04】激光雷达与相机联合标定(Livox+HIKROBOT)(一)
LivoxHIKROBOT联合标定 引言1 海康机器人HIKROBOT SDK二次开发并封装ROS1.1 介绍1.2 安装MVS SDK1.3 封装ROS packge 2 览沃Livox SDK二次开发并封装ROS3 相机雷达联合标定3.1 环境配置3.1.1 安装依赖——PCL 安装3.1.2 安装依赖——Eigen 安装3.1.3 安装依赖——Ceres-solver …...

hadoop伪分布式安装部署
首先jdk安装完毕 jdk安装文档参考: Linux 环境下安装JDK1.8并配置环境变量_linux安装jdk1.8并配置环境变量_Xi-Yuan的博客-CSDN博客 准备好hadoop的安装包 我的下载地址如下: We Transfer Gratuit. Envoi scuris de gros fichiers. 将hadoop包上传到随…...

前端视角看 Docker : 加速开发和部署的利器
Docker 是一个开源的容器化平台,大大的降低了运维相关的工作。在日常开发中,中小公司很少有专职运维,所以在开发中通过使用 Docker,前端相关工作可以更加高效地构建、打包、部署和运行应用程序。此系列将从前端的视角出发…...

JVM相关的面试题
一、什么是程序计数器 二、简要的介绍一下堆 三、什么是虚拟机栈 四、能不能解释下方法区 五、你听过直接内存吗? 六、什么是类加载器,类加载器有哪些 七、什么是双亲委派模型 八、JVM为什么采用双亲委派机制 九、类装载的执行过程 十、对象什么时候被垃…...
HTML、CSS和jQuery:实现图片折叠展开的效果
在网页设计和开发中,我们经常需要实现一些动态特效来增加页面的吸引力和交互性。其中,图片折叠展开特效是一种常见但又很有趣的技巧。通过这种特效,我们可以让图片在用户的操作下折叠或展开,从而展示更多的内容或细节。以下介绍如…...

php简单后门实现及php连接数据库
php简单后门实现 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>easybackdoor</title>…...
IOS课程笔记[6] 基础控件
UILabel 控件 frame 设置尺寸 [lb setFrame:CGRectMake(5, 0, 400, 40)];Font 字体设置 [lb setFont:[UIFont systemFontOfSize:20.f]] [lb setFont:[UIFont boldSystemFontOfSize:25.f]]; [lb setFont:[UIFont italicSystemFontOfSize:23.f]];背景色 [lb setBackgroundC…...
python爬虫入门(五)XPath使用
对于网页的节点来说,它可以定义 id、class 或其他属性。而且节点之间还有层次关系,在网页中可以通过 XPath 或 CSS 选择器来定位一个或多个节点。在页面解析时,利用 XPath 或 CSS 选择器来提取某个节点,然后再调用相应方法获取它的…...

【广州华锐互动】VR消防员模拟灭火:身临其境的火场救援
随着科技的不断发展,虚拟现实(VR)技术已经逐渐渗透到各个领域,为我们带来了前所未有的沉浸式体验。在这其中,VR模拟消防员灭火体验无疑是一种极具创新性和实用性的应用。通过这项技术,人们可以亲身体验到消…...

NFS性能瓶颈分析
前言 atop – run it with -d option or press d to toggle the disk stats view. iostat – try it with the -xm 2 options for extended statistics, in megabytes, and in two-second intervals. iotop – top-like I/O monitor. Try it with the -oPa options to show the…...

Java中配置RabbitMQ基本步骤
在Java中配置RabbitMQ,需要遵循以下步骤: 1.添加依赖 在项目的pom.xml文件中添加RabbitMQ的Java客户端依赖: <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><versio…...
Ingress典型配置
Ingress 是 Kubernetes 中用于管理 HTTP 和 HTTPS 路由的资源。以下是一个典型的 Ingress 配置示例,用于将流量引导到两个不同的服务: apiVersion: networking.k8s.io/v1 kind: Ingress metadata:name: example-ingress spec:rules:- host: example.com…...

webpack中常见的Loader解决了什么问题?
一、是什么 loader 用于对模块的"源代码"进行转换,在 import 或"加载"模块时预处理文件 webpack做的事情,仅仅是分析出各种模块的依赖关系,然后形成资源列表,最终打包生成到指定的文件中。如下图所示&#…...

阿里7年经验之谈 —— 如何实现前端项目的自动化测试?
这其实就是我们常说的“UI自动化测试”,针对这个问题,我先告知答题思路如下: 1、什么是UI自动化?有什么优势? 2、UI自动化实践中会遇到什么难题? 3、如何解决难题,将UI落实到实践中?…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...