【微处理器系统原理与应用设计第十二讲】通用定时器设计二之PWM波实现呼吸灯的功能
一、基础知识
1、寄存器的配置
(1)GPIOX_AFRL:GPIO复用功能低位寄存器
GPIOX_AFRH:GPIO复用功能高位寄存器
(2)配置PA5 GPIOA->MODER(端口模式寄存器),10为复用功能,是指除了普通输入/出,还有其他功能TIM等
(3)GPIO->OTYPER:0为推挽,1为开漏输出,推挽输出在示波器上看主要为方波形,而开漏在示波器显示为锯齿波。但要注意使PUPDR设置为上拉电阻状态。
(4)GPIOX_OSPEED(端口输出速度寄存器):低速 2MHz,中速 10~25MHz 高速 20~50MHz,具体的大小与对应连接的电压和电容相关。
(5)设置AFRL寄存器,AF0~15指GPIOX的16种模式(一般AF0~7可改,4~6仅限GPIOA,8~15保留),AFR[0]指GPIOX_AFRL寄存器,管理0~7个管脚;AFR[1]指GPIOX_AFRH寄存器,管理8~15个管脚。
(6)TIM_CCER:捕获使能寄存器,使能输入捕获必须设置CC1E = 1
(7)TIM_CCR1:捕获/比较寄存器1,用来存储捕获发生时TIMX_CNT值,通过了一次上升沿捕获与下降沿捕获差值可算出高电平脉冲宽度。
2、占空比的计算
占空比(Duty Cycle)是脉冲信号中高电平持续时间与整个周期时间的比率。它通常用于描述脉冲宽度调制(PWM)信号,其中信号在一定频率下在高电平和低电平之间切换。
设置寄存器ARR的值确定周期,设置CCRx值设置占空比,CNT小于CCR时输出为高,CNT大于CCR输出为低,占空比 = CCR/ARR = 高电平时间/周期

3、实现逻辑原理
(1)PWM波利用微处理器的数字输出来控制模拟电路
(2)STM32没有专门的PWM引脚,所以采用IO口的复用模式
(3)TIM1是STM32高级定时器,它的每个通道都有对应的互补通道来互补输出PWM
(4)STM32的定时器除了TIM6和TIM7,其他定时器都可用来产生PWM输出。
(5)面积等效原理:只要正弦波与t坐标轴围起来阴影面积相同,不管哪种电压波形效果大概相同

二、功能需求
开发呼吸灯功能,即LED灯一亮一灭,亮灭交替,周而复始。亮灭时长约为1s。
三、设计思路
将PA5配置为TIM2的CH1输出。采用定时器TIM2产生PWM波形,周期为2s且占空比为50%,即1s时长的低电平、1s时长的高电平。
四、软件流程图

五、程序设计
1、PWM输出端口初始化
采用PwmOutInit函数实现PA5复用为TIM2的CH1输出。代码如下:
void PwmOutInit(void)
{RCC->AHB1ENR|=1<<0; //使能GPIOAGPIOA->MODER=(GPIOA->MODER&~(0x3<<10))|(0x2<<10); //设置PA5为AF复用、推挽输出、无上拉、无下拉、中速GPIOA->OTYPER&=~(1<<5); GPIOA->PUPDR&=~(0x3<<10);GPIOA->OSPEEDR=(GPIOA->OSPEEDR&~(0x3<<10))|(1<<10);GPIOA->AFR[0]=(GPIOA->AFR[0]&~(0xF<<20))|(1<<20); //设置AFRL寄存器,将PA5复用为TIM2的CH1输出
}
2、定时器初始化函数
采用TimerInit函数实现定时器2的参数配置。
时钟源TIMCLK的频率为16MHz,设计预分频系数N=2000,计数器分频系数M=16000,那么共320万个分频,定时时长为M*N/TIMCLK = 2s。因此预分频寄存器PSC的值为N-1 = 1999,自动重载寄存器ARR的值为M-1 = 15999.比较寄存器为计数器自动重载值的一半,即8000.具体代码如下:
void TimerInit(void)
{RCC->APB1ENR |=1<<0; //使能TIM2TIM2->CR1 =1<<7; //配置为自重载预载使能、边沿对齐、向上计数工作模式TIM2->PSC =1999; //16MHz/2000 = 8KHzTIM2->ARR =15999; //8KHz/16000=0.5Hz,PWM周期为2sTIM2-CCMR1 = (TIM2->CCMR1&~(0x00FF))|0x68; //配置CH1为PWM1输出模式TIM2->CCER |=1; //使能比较通道1作为输出TIM2->CCR1 8000; //占空比50%TIM->CR1 |=1; //开启TIM2
}
相关文章:
【微处理器系统原理与应用设计第十二讲】通用定时器设计二之PWM波实现呼吸灯的功能
一、基础知识 1、寄存器的配置 (1)GPIOX_AFRL:GPIO复用功能低位寄存器 GPIOX_AFRH:GPIO复用功能高位寄存器 (2)配置PA5 GPIOA->MODER(端口模式寄存器),10为复用功…...
2025秋招NLP算法面试真题(十九)-大模型分布式训练题目
目录: 理论篇 1.1 训练大语言模型存在问题? 1.2 什么是点对点通信? 1.3 什么是集体通信? 1.4 什么是数据并行? 1.5 数据并行如何提升效率? 1.6 什么是流水线并行? 1.7 什么是张量并行 (intra-layer)? 1.8 数据并行 vs 张量并行 vs 流水线并行? 1.9 什么是3D并行? 1.1…...
线程池的应用
1.线程的执行机制 线程分为用户线程 和 内核线程 内核线程就是系统级别的线程,与cpu逻辑处理器数量对应的 用户线程就是使用java代码创建的Thread对象 用户线程必须与内核线程关联(映射),才能执行任务 当用户线程多于内核线程时…...
OPenCV结构分析与形状描述符(5)查找图像中的连通组件的函数connectedComponents()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 connectedComponents 函数计算布尔图像的连通组件标签图像。 该函数接受一个具有4或8连通性的二值图像,并返回 N,即标签…...
HCIA--实验十三:VLAN间通信子接口实验/双单臂路由实验
一、实验内容 1.需求/要求: 将两个单臂路由通过两台交换机连接起来,成为双臂路由,并探讨这么做的原因。实现全网通,让任何一台主机之间都可以通信。 二、实验过程 1.拓扑图: 2.步骤: 1.给PC配置ip地址…...
AIStarter市场指南:项目分享与框架优化【AI绘画、写作、对话、办公、设计】
随着人工智能技术的飞速发展,越来越多的开发者和爱好者希望能够将自己的创意和项目分享给更多人。AIStarter作为一个专注于AI领域的平台,正致力于打造一个开放的应用市场,让创作者能够轻松分享他们的项目,同时也方便其他用户下载和…...
机器学习第8章 集成学习
目录 个体与集成BoostingBagging与随机森林Bagging随机森林 结合策略平均法投票法学习法 个体与集成 定义:集成学习,也叫多分类器系统、基于委员会的学习等,它是一种通过结合多个学习器来构建一个更强大的学习器的技术。如下图所示 在这里&a…...
京东鸿蒙上线前瞻——使用 Taro 打造高性能原生应用
背景 2024 年 1 月,京东正式启动鸿蒙原生应用开发,基于 HarmonyOS NEXT 的全场景、原生智能、原生安全等优势特性,为消费者打造更流畅、更智能、更安全的购物体验。同年 6 月,京东鸿蒙原生应用尝鲜版上架华为应用市场,…...
day2 QT
作业 2> 在登录界面的登录取消按钮进行以下设置: 使用手动连接,将登录框中的取消按钮使用第2种方式的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断…...
JS_函数声明
JS中的方法,多称为函数,函数的声明语法和JAVA中有较大区别 函数说明 函数没有权限控制符不用声明函数的返回值类型,需要返回在函数体中直接return即可,也无需void关键字参数列表中,无需数据类型调用函数时,实参和形参的个数可以不一致声明函数时需要用function关键字函数没有…...
快速排序+归并排序代码回顾
快速排序与归并排序简介: quick_sort为快速排序,merge_sort为归并排序,两者基于分治的思想; 快速排序,简称快排,它以原来数组中的一个值(我们记为x)作为界限,将比它小…...
DBC中一种特殊的特殊的Signal—多路复用Signal
前言: DBC设计中一般设计Signal时其实存在三种类型,如下图所示: **1)步骤1,鼠标单击展开Message,选中底下的Signal **2)步骤2,弹出dialog中选择 map signal **3)得到…...
前端基础面试题·第三篇——JavaScript(其三)
1.字符串 (1) 常用方法 1.charAt(index) 返回指定位置的字符,若没找到,则返回空2.charCodeAt(index) 返回指定位置的unicode字符编码,若没找到,则返回空 3.String.concat(str1,str2) 连接多个字符串,并返回新字符串4.String.fromCharCode(co…...
MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏
MacBook从来都是高端的代名词,超强的性能搭配顶尖的系统,不光处理大型文件时举重若轻,长期使用也不会有明显卡顿。但很多人在需要MacBook一流的生产力同时,也希望能在空闲时体验游戏的乐趣。在大多人的印象里,Mac电脑对…...
安卓逆向(之)真机root(红米手机)
概览: 1, 手机解锁 2, 下载官方系统包,推荐线刷包,取出镜像文件 3, magisk工具修补 官方系统包 4, adb:命令对手机刷 root 5, 完成 6, 小米手机解锁 点击 小米手机解锁OEM官方教程 记得数据线连接手机电脑 工具下载 点击 下载adb(电脑操作…...
关于转行网络安全的一些建议
在当前就业形势下,不少朋友面临转行的困境。网络安全作为一个热门领域,自然也吸引了许多人的目光。本文将就转行网络安全这一话题,提供一些切实可行的建议。 网络安全行业概况 网络安全涵盖了从基础的脚本编写到高级的漏洞研究等多个层面。该…...
(六十五)第 10 章 内部排序(希尔排序)
示例代码 shellSort.h // // 希尔排序实现头文件#ifndef SHELL_SORT_H #define SHELL_SORT_H#include "errorRecord.h"#define NUM 10 #define MAX_SIZE 20#define EQUAL(a, b) ((a) == (b)) #define LESS_THAN(a, b) ((a) < (b)) #define LESS_OR_EQUAL(a, b) ((…...
802.11 中 scrambler的matlab仿真
802.11a和802.11n中的scrambler仿真不可以直接用matlab中的comm.Scrambler函数。因为这个函数实现的是multiplicative scrambling,而802.11a和802.11n中的scrambler使用的是additive scrambling。additive scrambling使用异或操作进行扰码,multiplicativ…...
centos 服务器 多网卡 ip 地址 设置
centos 服务器 多网卡 ip 地址 设置 https://blog.csdn.net/xh_w20/article/details/141574357 cd /etc/sysconfig/network-scripts/ sudo systemctl status network ● network.service - LSB: Bring up/down networkingLoaded: loaded (/etc/rc.d/init.d/network; bad; v…...
什么是大数据、有什么用以及学习内容
目录 1.什么是大数据? 2.大数据有什么用? 2.1商业与营销: 2.2医疗与健康: 2.3金融服务: 2.4政府与公共服务: 2.5交通与物流: 2.6教育与个性化学习: 3.学习大数据需要学习哪…...
深入解析振动传感器:从原理到应用的全面指南
1. 振动传感器入门:从"感觉"到"测量"的跨越 你有没有想过,为什么手机横屏时画面会自动旋转?为什么智能手环能记录你的步数?这些看似简单的功能背后,都离不开一个关键元件——振动传感器。作为工业…...
低功耗设计避坑指南:从UPF报错案例学习isolation rules的正确姿势
低功耗设计避坑指南:从UPF报错案例学习isolation rules的正确姿势 在芯片设计领域,低功耗已成为衡量产品竞争力的核心指标之一。随着工艺节点不断演进,静态功耗占比显著提升,使得电源门控(Power Gating)技术…...
手把手教你为本地LLM(Llama/Qwen)实现打字机式流式输出,Gradio+Transformers保姆级教程
手把手教你为本地LLM实现打字机式流式输出:Gradio与Transformers深度整合指南 当我们在本地部署大语言模型时,最令人沮丧的体验莫过于盯着进度条等待完整响应。想象一下这样的场景:你向模型提出一个复杂问题,屏幕陷入长达十几秒的…...
Blender 5.0 插件生态实战指南:从建模到渲染的流程效率革命
1. Blender 5.0插件生态的核心价值 如果你用过Blender,一定遇到过这样的场景:建模时反复手动倒角、UV展开时对着乱七八糟的贴图发呆、渲染时发现场景灯光怎么调都不自然。这些问题在Blender 5.0的插件生态中都能找到优雅的解决方案。 我做了10年三维设计…...
Apollo自动驾驶系统C++核心模块实战解析——从源码到实现
1. Apollo自动驾驶系统架构全景解析 第一次打开Apollo源码仓库时,我完全被它庞大的代码量震撼到了——超过200万行C代码构成的自动驾驶系统,就像一座精密的机械钟表。但当你拆解它的核心模块后,会发现其架构设计处处体现着模块化和高内聚低耦…...
宇视NVR接入AS-V1000平台全流程指南(含SDK端口配置避坑)
宇视NVR对接AS-V1000平台实战手册:从配置到排障的深度解析 当监控系统需要整合多品牌设备时,宇视NVR与AS-V1000平台的对接成为典型场景。不同于标准化的协议对接,SDK接入方式往往隐藏着诸多"暗礁"——从端口冲突到能力集匹配&#…...
手把手教你优化SiC MOSFET模块:从铜带键合到双面散热的5个关键技术
SiC MOSFET功率模块封装优化实战:五大关键技术深度解析 在电力电子领域,碳化硅(SiC)MOSFET功率模块正逐步取代传统硅基IGBT,成为高效率、高功率密度应用的首选。然而,要充分发挥SiC材料的性能优势,封装技术面临前所未…...
XUnity.AutoTranslator游戏翻译解决方案:从入门到精通的实战指南
XUnity.AutoTranslator游戏翻译解决方案:从入门到精通的实战指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因语言障碍错失优秀的Unity游戏体验?面对满屏外文界面感到…...
IBM System/4 Pi:航空航天计算机的兴衰与技术传奇
【导语:1981 年航天飞机首飞,其发射和大部分飞行环节由 IBM 的 System/4 Pi 系列 AP - 101B 计算机控制。该系列于 1967 年推出,广泛应用于航空航天等领域,虽发挥重要作用,但相关信息却较难获取。】System/4 Pi&#x…...
基于yz-bijini-cosplay的.NET应用开发:AI功能集成实践
基于yz-bijini-cosplay的.NET应用开发:AI功能集成实践 1. 为什么要在.NET应用里集成cosplay风格生成能力 最近有好几位做数字内容平台的朋友问我:“我们给动漫爱好者提供社区服务,能不能在自己的App里直接生成角色同款泳装或Cosplay造型&am…...
