STM32输出PWM时,PWM1和PWM2的区别

2023-10-27

TIM_OCMode_PWM2;TIM_OCMode_PWM1

首先,本人虽然初学STM32但极力反对一种误人子弟的观点:“对于STM32这样级别的MCU,有库函数就不用去看寄存器怎么操作的了!”

好了,言归正传,最近总看到很多朋友对于PWM这个实验有很多的疑惑,看到原子也在极力的回复也挺累的(体谅一下幸苦的原子大神,(*^__^*) ),所以我打算写这么一篇文字来阐述一下我个人对STM32的PWM的理解。

首先来说,你要使用PWM模式你得先选择用那个定时器来输出PWM吧!除了TIM6、TIM7这两个普通的定时器无法输出PWM外,其余的定时器都可以输出PWM,每个通用定时器可以输出4路PWM,高级定时器TIM1、TIM8每个可输出7路PWM,这里为了方便起见,我们选择与实验相同的TIM3的通道2来说明。选好定时器及通道后,下一步就是要使能定时器的时钟,根据需要看看是否需要重映射IO,然后就是配置输出PWM的IO及定时器,到这里原子的视频及例程都有详细的介绍,这里只需要提一点有些网友疑惑的TIM_TimeBaseStructure.TIM_ClockDivision = 0;这句话是什么作用?其实仔细看过技术手册后发现这句话与PWM输出实验其实是没关系的,这句话是设置定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例的(与输入捕获相关),0表示滤波器的频率和定时器的频率是一样的。至于其余部分,我就不再赘述。做完这些准备工作后,我就针对大多数朋友疑惑的地方——PWM模式的初始化设置做一个详细的阐述:先贴代码

     1       TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
     2       TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
     3       TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
     4       TIM_OC2Init(TIM3, &TIM_OCInitStructure);   //根据T指定的参数初始化外设TIM3 OC2
     5       TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器,即TIM3_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中。
     6       TIM_Cmd(TIM3, ENABLE);  //使能TIM3
这6句话就把PWM的通道配置好了,一句句来解释:
这里原子选择的PWM2模式,为什么选择的是PWM2模式呢?为什么不选择PWM1模式呢?两者又有什么区别呢?下面我们就一探究竟,PWM1和PWM2模式是由CCMR1的OC1M和OC2M来决定的,因为我们选择的是是通道2,所以设置的是OC2M,再看相关介绍
OC1M[2:0]:输出比较1模式(Output compare 1 enable)

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

 看到红色的“有效电平”了吧,那么这又是谁定义的呢?别急,再看手册,可知它是由CCER这个寄存器的CCxP来决定的这里是通道2,所以是CC2P,继续看介绍

CC1P:输入/捕获1输出极性(Capture/Compare 1 output polarity)  位1 
CC1通道配置为输出:
0:OC1高电平有效
1:OC1低电平有效
现在很清楚了吧,又因为第3句,TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高,所以这里我们设置的CC2P是0,也就是默认的OC2高电平有效。这样第3句话也捎带着解释了,哈哈!由于我们的战舰板的LED是低电平亮,而刚开始的给CC2P用来设置占空比的led0pwmval为0它是小于等于TIM3_CNT的,也就符合TIMx_CNT>=TIMx_CCR1时通道2输出有效电平,也就是高电平,所以你把原子的例程原封不动的Down到板子里,会看到刚上电,LED灯是不亮的。现在这块明白了吧!若你觉得还是不爽,我就非得用PWM1模式,那也可以,就像有个网友说“我拿原子的PWM Code就改了一个PWM1模式,按原子讲的PWM1和PWM2的输出是相反的啊,可是我上电发现LED是常亮的啊?怎么回事啊,求解释啊。。。”我们来分析一下这位朋友的代码,他把PWM2改成了PWM1,别的什么都没动,那么现在符合“PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平”
,否则为无效电平。“结果必然是就是LED长亮喽,要想得到跟原代妈一样的效果,那就把CC2P设置成1,OC2低电平有效,这样就可以了,有兴趣的朋友可以动手试试!(实践出真知吗!)
好了,废了这么多话,也不早了 洗洗睡吧!希望这篇文字对PWM有疑惑的朋友有所帮助!希望大家共同进步!分享是一种快乐,欢迎批评指正!

 遗漏了一点,第5句还没解释呢,

5       TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器,即TIM3_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中。
这句话是说,CCR2中的预装载值何时被传送到当前的CNT寄存器中,这里我们选择的是当更新事件到来的时候才装载,追踪寄存器的设置可知,原来设置的是CCMR1的OC2PE,其实还有一种方式是立即装载看手册:
OC1PE:输出比较1预装载使能(Output compare 1 preload enable)  位3 
0:禁止TIMx_CCR1寄存器的预装载功能,可随时写入TIMx_CCR1寄存器,并且新写入的数
值立即起作用。
1:开启TIMx_CCR1寄存器的预装载功能,读写操作仅对预装载寄存器操作,TIMx_CCR1的
预装载值在更新事件到来时被传送至当前寄存器中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32输出PWM时,PWM1和PWM2的区别 的相关文章

  • 识别和检测的区别

    检测是识别的位置 识别是识别这东西是什么 虽然都是判断 但识别是分类 检测是定位
  • 数据拆分_SPSS篇——数据的拆分

    我们在进行数据处理时 有时需要将某些分类变量进行分层分析 例如对不同地区 不同城市化水平的产品销售量来进行分析 此时就需要通过数据的拆分来实现 那么在SPSS中 是如何来实现数据的拆分呢 下面我们具体来看下 Step1 在SPSS中打开数据
  • 老程序员的思想变迁

    蓦然回首自己做软件开发这个行业已经十年了 这十年中我获得了很多 技术能力 培训 出国 大公司的经历 还有很多很好的朋友 但再仔细一想 这十年中我至少浪费了五年时间 这五年可以足够让自己成长为一个优秀的程序员 可惜我错过了 我用这五年时间和很
  • 手机配合termux部署DDbot 教程

    前言 针对有闲置手机 不方便长时间开电脑 无云服务器等设备的用户 提供的一套DDbot部署方案 要求 安卓手机 持续供电 网络 流量卡或者wifi等 风险 如果是长时间的充电对手机电池有损坏 有其他up的方案是配合智能插座 通过IOT形式定
  • WSL中ADB工具无法识别设备解决方案

    WSL中ADB工具无法识别设备解决方案 楼主所使用的WSL为 wsl 18 04版本 在windows中正常使用adb调试嵌入式设备后 发现在wsl中存在adb无法识别设备问题 原因 windows 系统的adb version 必须与li
  • Dynamics 365 CRM 接入统一身份认证平台(单点登录集成)

    打算将D365 CRM接入公司统一身份认证平台 前提 D365 已IFD部署 因为要借助ADFS来完成单点登录 登录ADFS服务器 打开ADFS 本次集成 统一身份认证为上游 ADFS是下游 因为要设置统一身份认证系统添加到ADFS的声明提
  • 深入学习前端开发,掌握HTML、CSS、JavaScript等技术

    课程链接 链接 https pan baidu com s 1WECwJ4T8UQfs2FyjUMbxig pwd i654 提取码 i654 复制这段内容后打开百度网盘手机App 操作更方便哦 来自百度网盘超级会员v4的分享 课程介绍 第
  • 【项目设计】负载均衡在线OJ

    Linux 博客主页 一起去看日落吗 分享博主的在Linux中学习到的知识和遇到的问题 博主的能力有限 出现错误希望大家不吝赐教 分享给大家一句我很喜欢的话 看似不起波澜的日复一日 一定会在某一天让你看见坚持的意义 祝我们都能在鸡零狗碎里找
  • 信息学奥赛C++语言:最高分数的学生姓名

    题目描述 输入学生的人数 然后再输入每位学生的分数和姓名 求获得最高分数的学生的姓名 输入 第一行输入一个正整数N N 100 表示学生人数 接着输入N行 每行格式 分数 姓名 分数是一个非负整数 且小于等于100 姓名为一个连续的字符串
  • catkin_make出现CMake Error: The source directory “/home/ming/catkin_ws_test/src“ does not ex

    问题 catkin make出现CMake Error The source directory home ming catkin ws test src does not exist 解决 删除与src同目录下的编译文件夹build和de
  • 豆瓣api访问流程

    豆瓣api访问流程 1 https api douban com 2 通过文档查找接口Resources URI 如 v2 movie in theaters添加到1后面 3 将 apikey 0b2bdeda43b5688921839c8
  • UE中FRotator和Pitch(Roll,Yaw)以及相对朝向的关系

    前几天 看人宅的塔防视频教程 他使用了塔的成员变量rotator 我可能在哪里少写了 所以 老是朝向不对 跟踪调试了下 发现FRotator是由pitch roll yaw三个部分组成 而pitch roll yaw是局部坐标系中的朝向 那
  • 雷达水位计安装细节注意点

    近年来 随着国家防汛抗旱工作对中小河流水文监测的要求不断提高 许多流域及大中型水库 电站逐步建立了水情自动测报系统 而水位监测则是测报系统的重要组成部分 水位传感器的适用性是建立系统的重要因素 随着自动测报系统的发展 各类水位传感器在不同的
  • 卡特尔16PF性格测试与答案

    大学生在职业生涯规划时 必须充分注意到自己的性格和职业的适宜性 性格是指一个人在生活中形成的对现实的稳定的态度和行为方式 研究表明 性格影响着一个人的职业取向 由于性格的不同 每个人对工作和职业的态度也是不同的 一定的性格必然适合从事一定的
  • Java多线程实现

    Java多线程 多线程的创建方式 方式一 继承Thread类 创建一个继承Thread类的子类 重写Thread类中的run方法 创建Thread子类对象 通过此对象调用start 方法 public class ThreadDemo1 p
  • 蓝桥杯超时?给你一些小技巧

    自己在敲代码的时候碰到了超时的情况 总结了一下 1 统一定义变量 不要在循环内定义局部变量 2 把函数定义放在main函数之前 可以减少在main函数内的声明 3 循环尽量增设break条件 对循环进行剪枝可以减少不必要循环 4 尽量省略头
  • Django框架 - 路由配置全解

    Django框架学习笔记 路由配置全解 文章目录 1 初始配置 2 路由配置 2 1 一般路由 命名路由与reverse 函数 2 2 子路由 命名空间与reverse 函数 2 3 带参路由 reverse 函数 自定义path转换器 2
  • LeetCode周赛159

    1232 Check If It Is a Straight Line 检查是否为直线 暴力算斜率 但要注意分母为0的情况 class Solution public bool checkStraightLine vector
  • 重新审视Faster RCNN:优缺点与改进

    重新审视Faster RCNN Faster RCNN优点 Faster RCNN缺点 对于Faster RCNN的改进算法 特征融合 HyperNet 实例分割 Mask RCNN 全卷机网络 R FCN 级联网络 Cascade RCN
  • 使用Qt实现简单的日志记录功能(qInstallMessageHandler)

    前言 相信大家在软件开发的过程中 都有记录软件运行日志的需求 凭借日志信息来分析软件的运行状况 或者是查找 定位软件存在的未知Bug 基于C 的日志工具有log4cplus log4cxx Log4Qt等 但如果只是并非复杂的环境使用 其实

随机推荐

  • ubuntu18.04安装后没有wifi图标,并且无法安装wifi驱动

    网上绝大部分的解决方案是安装wifi驱动 当你发现无法安装wiifi驱动时 可以试试这个办法 1 给笔记本电脑插入网线 联网 或着采用手机USB网络共享功能 给笔记本联网 2 打开 软件与更新 选择更新源 将软件更新一下 在 开发者选项 那
  • 软件工程综合实训日志

    前期准备阶段 1 注册 heroku com 在注册heroku时需要爬墙 2 注册github 在注册github时 由于电脑网络问题出现注册不成功 还有密码问题一定不要设置自己最常用的数字 不然也会注册不成功 3 安装git bash
  • Win 2003系统传真功能的配置及使用

    传真在现 公中应用极为广泛 随着电脑的普及 我们可用电脑方便地进行传真的收发 下面以Windows 2003系统为例介绍其传真的使用 供需要的朋友参考 注意 首先要正确安装了调制解调器 并确保您的调制解调器支持传真功能 操作系统 Windo
  • 汇编指令之MOV

    汇编指令之 MOV 传送字或字节 学习来自 汇编语言MOV指令 mov指令详解 Assembly Addressing Modes 汇编用户指南 MOV 简单格式 mov dst src 扩展格式1 MOV S cond Rd Operan
  • Dynamic Hierarchical Reasoning with Language Model and Knowledge Graph for Question Answering

    本文是LLM系列文章 针对 Dynamic Hierarchical Reasoning with Language Model and Knowledge Graph for Question Answering 的翻译 DRLK 基于语
  • Python中XGBoost的特性重要性和特性选择

    使用像梯度增强这样的决策树方法的集合的一个好处是 它们可以从经过训练的预测模型中自动提供特征重要性的估计 在这篇文章中 您将发现如何使用Python中的XGBoost库估计特性对于预测建模问题的重要性 读完这篇文章你就会知道 如何使用梯度增
  • 深度学习进入芯片领域,揭秘寒武纪神经网络处理器

    深度学习进入芯片领域 揭秘寒武纪神经网络处理器 2016 03 16 19 34 原创 铁流 10条评论 就在全世界媒体的焦点锁定于谷歌AlphaGo连续3盘战胜李世石的同时 中国科学院计算技术研究所陈云霁 陈天石课题组提出的深度学习处理器
  • 自动化测试一套完整的解决方案:自动化测试工具Python3.6.3 + Robot Framework3.1.2 环境搭建

    自动化测试Python3 6 3 Robot Framework3 1 2 环境搭建 一 环境搭建 简单介绍 Robot Framework是一个基于Python可扩展地关键字驱动的测试自动化框架 使用Apache License 2 0
  • IDEA项目打包几种方式

    IDEA项目打包几种方式 第一种 最常见的使用maven 项目的pom文件中引入spring boot maven plugin插件
  • 获取第几天时间的日期

    获取过去第几天的日期 param past return public static String getPastDate int past Calendar calendar Calendar getInstance DAY OF YEA
  • Java将数据写入Excel

    引入Maven依赖
  • Magento订单管理列表扩展字段

    扩展Magento订单管理列表成功 为了方便管理订单 应要求对Mangeto后台的订单管理列表进行扩展 在原有的基础上增加一些字段 比如 产品名称 产品型号 数量等 这是没有扩展之前的Magento 订单管理列表 这是扩展后的图片 上图片中
  • 阿里云ECS部署L2TP/IPSEC,访问服务器内网

    阿里云ECS部署L2TP IPSEC 访问服务器内网 准备工作 自建NAT网关 添加路由 地址转换 部署xl2tpd 安装服务 修改配置 将vpn网段添加到白名单 win10连接vpn 完成 参考链接 准备工作 三台阿里云ECS服务器 操作
  • Linux环境下安装maven

    一 下载maven压缩包 官网地址 http maven apache org download cgi 二 上传到Linux的usr local目录 cd usr local 可以使用rz目录上传 三 解压压缩包 tar zxvf apa
  • 12V转5V稳压电路详细分析(7805三端稳压,LM2596稳压)

    7805线性三端稳压 DCDC的意思是直流变到直流 不同直流电源值的转换 只要符合这个定义都可以叫DCDC转换器 或称之为开关电源或开关调整器 7805属于常用的线性三端稳压器 输入电压范围不大于35V 输入输出压差2V 最大输出电流1 5
  • idea安装scala

    目录 一 前期准备 先在windows下安装好jdk 才可以安装scala 二 Widows下安装SCALA 二 idea下安装scala插件 一 前期准备 先在windows下安装好jdk 才可以安装scala 在安装之前 确保你的电脑上
  • * RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 08B5H BYTE (108%) *

    keil uVsion4的编译的时候出现 RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT 博主今天在使用keil uVsion4的编译的时候出现 RESTRICTED VERSION W
  • 【8005】如何设置idea汉化中文?

    问题场景 自IntelliJ Idea 2020 1 正式发布了 重要的是开始支持中文 虽然支持 但不是默认中文 你还需要下载插件安装 如果想使用中文汉化 先把版本升升级哦 今天有个同学问我怎么汉化 就写个博客算了 纪念一下 解决方案 总步
  • DOS攻击工具介绍

    DoS Denial Of Service 攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源 目的是让目标计算机或网络无法提供正常的服务或资源访问 使目标系统服务系统停止响应甚至崩溃 然而随着网络上免费的可用
  • STM32输出PWM时,PWM1和PWM2的区别

    TIM OCMode PWM2 TIM OCMode PWM1 首先 本人虽然初学STM32但极力反对一种误人子弟的观点 对于STM32这样级别的MCU 有库函数就不用去看寄存器怎么操作的了 好了 言归正传 最近总看到很多朋友对于PWM这个