STM32 | STM32CubeMX基础之PWM_stm32cubemxpwm_一颗咸鱼的博客-程序员宅基地

技术标签: stm32  Powered by 金山文档  嵌入式硬件  嵌入式开发  单片机  

一、PWM工作过程
  1. 工作框图
2. 主要寄存器
a). TIMx_CCR1

捕获比较(值)寄存器(x=1,2,3,4):设置比较值。

b). TIMx_CNT

计数器值与捕获比较寄存器CCR1进行比较,通过比较结果输出有效电平和无效电平 OC1REF=0 无效电平,OC1REF=1 无效电平。

c). TIMx_CCMR1

OC1M[2:0]位:对于PWM方式下,用于设置PWM模式1(110)或者PWM模式2(111)。

  • 110:对应STM32CubeMX中PWM模式1: 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。

  • 111:对应STM32CubeMX中PWM模式2: 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

d). TIMx_CCER

CC1P位,输入/捕获1输出极性。0:高电平有效,1:低电平有效。

CC1E位,输入/捕获1输出使能。0:关闭,1:打开。

二、PWM的原理

由之前的定时器中断实验知道,定时器内部有一个记录定时器当前值的寄存器CNT(对应图中黑线)和一个记录定时器自动重装载值的寄存器ARR(对应图中橘线)。而在PWM工作模式下,我们依然利用这两个定时器来记录时间,不同的是多引入一个寄存器CCRx(对应图中红线),这个寄存器用于控制PWM输出波的有效电平长度(占空比);引入CCMRx寄存器来控制PWM模式(对应PWM是模式1还是2);引入寄存器CCERx:CC1P位控制输出电平极性。

假定定时器工作在向上计数 PWM模式,且当 CNT<CCRx 时,输出 0,当 CNT>=CCRx 时输出 1。当 CNT 达到 ARR 值的时候,重新归零,然后重新向上计数,依次循环。改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的频率。


链接:https://blog.csdn.net/wei348144881/article/details/109091539

STM32——PWM知识详解_stm32pwm_笛卡尔的叹息的博客-程序员宅基地

三、使用PWM实现呼吸灯
  1. 初始化引脚、时钟
  SystemClock_Config();  
  MX_GPIO_Init();
  MX_TIM3_Init();
  1. 初始化定时器参数,包含自动重装值,分频系数,计数方式等
void MX_TIM3_Init(void)
{  
  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 720-1;
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 500-1;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
}
  1. 开启定时器
  HAL_TIM_Base_Start(&htim3);
  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
  1. 主函数
  int i=0;
  for(i=0;i<500;i++)
  {
    __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,i);  
//改变占空比,逐渐提高低电平的持续时间
    HAL_Delay(1);
  }
  for(i=500;i>0;i--)
  {
    __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,i);   //改变占空比,逐渐降低低电平的持续时间
    HAL_Delay(1);
  }
  1. 解释

下面给出提升占空比的简易示意图,对应上面的第一个for循环,上面的for循环应该会产生500个这样的渐变。这样就能实现呼吸灯的效果。

此外还有亮度递减的过程,对应上面第二个for循环,图中未画出。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhxiao2015/article/details/129421914

智能推荐

SPOOL用法_如何在spool中插入一空行-程序员宅基地

文章浏览阅读734次。对于SPOOL数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句如: select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from ssrv_sendsms_task; spool常用的设置 set colsep' ';    //域输出分_如何在spool中插入一空行

[Leetcode] 242. 有效的字母异位词 java hashmap_有效的字母异位词 hashmap-程序员宅基地

文章浏览阅读185次。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来..._有效的字母异位词 hashmap

你看得懂的海明码校验和纠错原理-程序员宅基地

文章浏览阅读693次。以下内容摘自《深入理解计算机网络》海明纠错码海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以它也仅用于信道特性比较好的环境中,如以太局域网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。 海明码的检错、纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶

非常好的web弹出层框架 -- layer-程序员宅基地

文章浏览阅读1.9w次,点赞6次,收藏35次。1,关于web弹出层之前做web弹出层,使用的是jqueryui,那个复杂,那个大。 而且样式怪怪的。而且文件很大。关于layerlayer是一款近年来口碑极佳的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验。在与同类组件的比较中,layer总是能轻易获胜。她尽可能地在以更少的代码展现更强健的功能,且格外注重性能的提升

(一〇七)第八章复习题_将box结构的引用-程序员宅基地

文章浏览阅读517次。1.哪种函数适合定义为内联函数?答:短小的,执行速度快的,占用内存小的适合。还有非递归的 2.假如song()函数的原型如下:void song(const char* name, int times);a.如何修改原型,使times的默认值为1?b.函数定义需要做哪些修改?c.能否为name提供默认值“O.My Papa”? 答:a。 修改成:void son_将box结构的引用

矩阵运算-克罗内克积⨂ Hadamard乘积 2022年3月24日_克罗克内积求旋转矩阵-程序员宅基地

文章浏览阅读641次。目录一 ⨂-克罗内克积1. ⨂:克罗内克积,是张量积的一种特殊形式。2. 举例3. 应用-CNN卷积运算一 ⨂-克罗内克积1. ⨂:克罗内克积,是张量积的一种特殊形式。2. 举例3. 应用-CNN卷积运算X为输入,W为卷积核,Y为输出:..._克罗克内积求旋转矩阵

随便推点

关于cisco路由器串口配置DHCP的问题-程序员宅基地

文章浏览阅读161次。拓扑很简单R1作为DHCP服务器模拟为ISP,R2作为DHCP客户端,作为公司链接ISP的出口按道理来说,这种配置是相当容易的R1的配置R1#conf tR1(config)#int s2/0R1(config-if)#ip add 10.1.1.1 255.255.255.0R1(config-if)#no shR1(config-if)#exitR1(config)#ip..._串口无法开启dhcp

门诊叫号系统系列-1.语音叫号 .net c#-程序员宅基地

文章浏览阅读575次。最近收到一个需求,朋友诊室需要做到门诊叫号,流程如下:病人选择医生-刷身份证排队-医生点击病人姓名叫号。经过团队的努力,一个简易的门诊叫号系统已经完成。现在把各个功能记录下来,方便以后查看。1.语音叫号叫号的DLL:DotNetSpeech.dll测试代码如下:using System;using System.Collections.Generic;u..._门诊叫号系统系列 .net c#

资源分享(nlp、kaggle、pytorch、datawhale)_kaggle pytorch-程序员宅基地

文章浏览阅读1.6k次,点赞6次,收藏17次。收藏了各种文章、github资源、赛事top方案等等_kaggle pytorch

计网第五章作业_用tcp传输256字节数据。设置接收窗口为100字节,而tcp报文段每次也是传送100字_寂静花开的博客-程序员宅基地

文章浏览阅读6.4k次,点赞13次,收藏45次。一.单选题二.简答题三.计算题一.单选题1、TCP的协议数据单元被称为( )。A、比特B、帧C、分段D、字符正确答案: C2、下列说法,错误的是( )。A、TCP协议可以提供可靠的数据流传输服务B、TCP协议可以提供面向连接的数据流传输服务C、TCP协议可以提供全双工的数据流传输服务D、TCP协议可以提供面向非连接的数据流传输服务正确答案: D3、TCP的四次挥手用于( )。A、运输层连接的释放B、运输层连接的建立C、运输层的流量控制D、运输层的拥塞控制正确答案:._用tcp传输256字节数据。设置接收窗口为100字节,而tcp报文段每次也是传送100字

verilog语言中的综合与不可综合_assign可综合吗-程序员宅基地

文章浏览阅读1.5k次,点赞5次,收藏16次。(1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。(2)所有综合工具都不_assign可综合吗

NLP之文本分词综述_江小皮不皮的博客-程序员宅基地

文章浏览阅读1.6k次。分词是自然语言处理中的一个关键任务,目的是将文本分解为语言单元(如单词、词组等),以便进一步处理。规则分词:是基于词典和语法规则的分词方法,通过在词典中查找词语,再通过语法规则对不在词典中的词语进行处理。规则分词算法具有语言知识丰富、实现简单等特点,但不能很好地处理一些未登录词(OOV)和新词。统计分词:是基于统计模型的分词方法,通过学习大量语料来建立分词模型,从而解决规则分词的一些不足。统计分词算法通常使用HMM、CRF等算法,能够更好地处理OOV和新词,但语料要求比较高,而且实现较为复杂。_文本分词