STM32定时器输出pwm的几种模式
目录
定时器
输出脉冲模式:
PWM模式(PWM Mode)
输出比较模式(Output Compare Mode)
总结
占空比:
输出比较模式与占空比
PWM模式与占空比
输出比较模式与PWM模式的结合
输出比较模式实例:
问题记录:
参考:
定时器
定时器分类:
高级定时器
通用定时器
基本定时器
三种定时器都可以输出pwm,但是常用高级和通用定时器,功能更多。
输出脉冲模式:
常用的四种输出脉冲模式:
1.定时器中断里面设定电平高低进行脉冲输出,简单的翻转。
2.PWM1
3.PWM2
4.输出比较模式(也是一种翻转)
第一种很少用。
pwm1和pwm2的区别还没有搞懂。
PWM模式(PWM Mode)
PWM模式是定时器模块的一种重要功能,用于生成周期性变化的脉冲信号。STM32的定时器模块通常支持两种PWM模式:PWM1和PWM2。
- PWM1模式:在PWM周期内,当定时器的计数值小于比较值时,输出为高电平;当计数值大于比较值时,输出为低电平。
- PWM2模式:与PWM1相反,在PWM周期内,当定时器的计数值小于比较值时,输出为低电平;当计数值大于比较值时,输出为高电平。
优点:
- 高效生成连续波形:硬件生成周期性PWM信号,不需要CPU干预,适用于需要连续波形输出的场景。
- 灵活控制占空比:通过改变比较值可以灵活控制PWM信号的占空比,适用于调光、调速等应用。
- 多用途:广泛应用于电机控制、LED调光、音频信号生成等领域。
缺点:
- 配置相对复杂:需要正确设置定时器的频率、周期和比较值,初次使用可能需要花时间理解。
- 频率和分辨率限制:PWM信号的频率和分辨率受限于定时器的硬件规格和时钟源,可能无法满足所有应用需求。
用途: PWM广泛用于电机控制、模拟信号生成、电源管理等领域,需要精确控制输出功率或电压
输出比较模式(Output Compare Mode)
输出比较模式是STM32定时器的一种功能,可以用来生成精确的时间事件。当定时器计数器的值与预设的比较值匹配时,定时器可以输出一个信号,改变输出引脚的状态(例如设为高电平、低电平或翻转)。STM32定时器的输出比较模式通常包括:
- 冻结(Frozen)模式
- 主动电平设置(Set Active Level on Match)
- 电平复位(Set Inactive Level on Match)
- 翻转(Toggle)模式
- 强制高电平(Force Active Level)
- 强制低电平(Force Inactive Level)
优点:
- 精确控制:可以精确控制输出引脚的状态变化时刻,适用于时间敏感的应用。
- 多种模式:提供多种输出模式,灵活应对不同的应用需求。
- 低CPU开销:通过硬件实现,不占用CPU资源,适合实时性要求高的应用。
缺点:
- 配置复杂:需要理解并正确配置定时器和相关寄存器。
- 功能局限:主要用于生成单次或周期性的事件,对连续波形生成支持不如PWM。
总结
在STM32的定时器模块中,输出比较模式和PWM模式各有其特定的应用场景和优缺点。
输出比较模式适用于需要精确控制输出引脚状态变化时刻的应用,如生成定时事件、测量时间间隔等。
PWM模式适用于需要生成连续周期性波形的应用,如电机控制、LED调光、音频信号生成等。
如果需要精确控制单次或周期性的时间事件,选择输出比较模式。
如果需要生成连续的PWM信号,并灵活控制占空比,选择PWM模式(PWM1或PWM2)。
占空比:
在STM32的定时器模块中,输出比较模式和PWM模式是紧密相关的,尤其在PWM模式下,占空比的控制是核心功能。然而,严格来说,标准的输出比较模式本身并不是为控制占空比设计的。让我们深入探讨这个问题。
输出比较模式与占空比
输出比较模式本质上是通过比较定时器的计数值和预设的比较值(CCRx寄存器)来触发特定的行为,例如改变输出引脚状态。例如上文中的6种模式,尽管这些模式中部分可以改变输出引脚的状态,但它们并不是专门设计来控制占空比的。而占空比控制是PWM模式的核心功能。
PWM模式与占空比
PWM模式专门设计用于生成占空比可调的周期性信号。在PWM模式下,定时器的计数值在一个周期内连续计数(从0到预设的ARR值)。通过设置比较值(CCRx),可以定义在一个周期内高电平和低电平的时间,从而实现占空比的控制。
配置方法
- 设置周期:通过设置自动重装载寄存器(ARR)的值确定PWM信号的周期。
- 设置占空比:通过设置捕获/比较寄存器(CCRx)的值确定PWM信号的占空比。
例如,在PWM1模式下,当计数器值小于CCRx时,输出为高电平;当计数器值大于CCRx时,输出为低电平。这样,通过调整CCRx的值可以灵活控制占空比。
输出比较模式与PWM模式的结合
在一些特定的应用场景中,可以利用输出比较模式和PWM模式的结合来实现更复杂的占空比控制。例如,通过配置多个输出比较通道,可以在一个周期内多次改变输出引脚的状态,从而实现非标准的PWM信号。
结论
- 输出比较模式:主要用于生成精确的定时事件或单次/周期性引脚状态变化,不适合直接控制占空比。
- PWM模式:专门用于生成占空比可调的周期性信号,适合控制电机速度、LED亮度等。
如果您的应用需要控制占空比,建议使用PWM模式(PWM1或PWM2)。输出比较模式适合用于需要精确时序控制的其他场合,但不适合用于生成占空比可调的信号。
输出比较模式实例:
//输出引脚配置
static void PWM_TIM_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(MOTOR_PUL_GPIO_CLK, ENABLE);GPIO_InitStructure.GPIO_Pin = MOTOR_PUL_PIN;// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ;//GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(MOTOR_PUL_GPIO_PORT, &GPIO_InitStructure);}
//中断配置
static void PWM_TIM_NVIC_Config(void)
{NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = PWM_TIM_CC_IRQn ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}
//对定时器配置成输出比较
void PWM_TIM_Mode_Config(void)
{ TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //时间基 结构体变量TIM_OCInitTypeDef TIM_OCInitStruct; //通道初始化 结构体变量 PWM_TIM_APBxClockCmd(PWM_TIM_CLK,ENABLE); //使能TIM1定时器时钟线//时间基设定参数TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; //这里跟TIM1 产生PWM波功能无关TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计时模式//不知道为什么这里要设成65535才行,不是说比较输出模式和TIM_Period没关系吗TIM_TimeBaseInitStruct.TIM_Period = 0XFFFF - 1; //0xFFFF - 1 TIM_TimeBaseInitStruct.TIM_Prescaler = PWM_TIM_Prescaler; //最高频率72MHZ 这里定义 预分频720 TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(PWM_TIM,&TIM_TimeBaseInitStruct);//初始化函数 让刚刚配置的参数 输入到对应寄存器里面//pwm输出模式设定参数TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_Toggle; //比较输出模式TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;//输出极性低TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //CER的CC1N,输入/捕获输出使能TIM_OCInitStruct.TIM_Pulse = 0; //初始化占空比0 占空比可以依照TIM_Period进行配置 在它范围内就好了TIM_OC4Init(PWM_TIM,&TIM_OCInitStruct); //初始化函数 让刚刚配置的参数 输入到对应寄存器里面TIM_ITConfig(PWM_TIM, PWM_TIM_IT_CC, ENABLE);//使能通道4中断 TIM_OC4PreloadConfig(PWM_TIM,TIM_OCPreload_Disable);//输出比较时,要禁能 //TIM_ARRPreloadConfig(TIM1,ENABLE);//没搞懂影响TIM_ClearITPendingBit(PWM_TIM, TIM_IT_CC4 ); //清除中断标志//TIM_SetCompare4(TIM1, temp_data_06); //放在这里会影响第一个脉冲的宽度,不对}
TIM_OC4PreloadConfig(PWM_TIM,TIM_OCPreload_Disable);//输出比较时,要禁能,因为禁能时,可以随时更改ccr的值;使能时,只有计数到arr的设定值时,才可以修改ccr的值,这样可以让脉冲更稳定,
//中断处理部分
void PWM_TIM_IRQHandler(void)
{ if(TIM_GetITStatus(PWM_TIM, TIM_IT_CC4) != RESET){// 清楚定时器中断TIM_ClearITPendingBit(PWM_TIM, TIM_IT_CC4 );//不知道放在中断开头还是结尾好 capture = TIM_GetCapture4(PWM_TIM);//一定要先读取计数值,TIM_SetCompare4(PWM_TIM, capture + temp_data_06);//在计数值基础上加上时间,等待计数值到达这个数}
}
一定要先读取计数值,想加后,再使用TIM_SetCompare4设定比较值
//初始化pwm用到的定时器,脉冲引脚
void motor_pwm_Init(void)
{PWM_TIM_NVIC_Config();PWM_TIM_GPIO_Config(); PWM_TIM_Mode_Config();
}
//使用的时候,进行使能和禁能即可输出和关闭脉冲
TIM_Cmd(PWM_TIM,ENABLE); //使能计时器
TIM_CtrlPWMOutputs(PWM_TIM,ENABLE); //输出脉冲使能
设成0,定时器会被关闭,不输出脉冲。
关于到达TIM_Period设定值,会如何处理:
1. 只有对TIM_IT_Update中断使能,到达arr的值才会进入中断,因此在时候不会进入中断
2.会触发一个事件,然后对相关寄存器进行刷新,相关计数值也会刷新,因此ccr和tim->cnt的比较咩有影响。具体过程如下图
问题记录:
设置的是200us的宽度,不知道为什么第一个宽度会是400,
arr设置的是65535-1,不知道为什么,每次初始化完,在第一个脉冲前都会出现这么一段,把arr的值设小了,这一段也会变短。
参考:
STM32定时器之ARR,PSC俩兄弟
【经验分享】STM32实例-步进电机的速度控制 - STM32团队 ST意法半导体中文论坛
STM32 定时器输出比较翻转模式_stm32f4定时器输出比较翻转模式驱动代码-CSDN博客
相关文章:
STM32定时器输出pwm的几种模式
目录 定时器 输出脉冲模式: PWM模式(PWM Mode) 输出比较模式(Output Compare Mode) 总结 占空比: 输出比较模式与占空比 PWM模式与占空比 输出比较模式与PWM模式的结合 输出比较模式实例…...
5 分支结构程序-5.1 关系运算符和表达式
【例 5.1】 #include <stdio.h>main() {char c k;int i 1, j 2, k 3;float x 3e5, y 0.85;printf("%d,%d\n",a 5 < c, -i - 2 * j > k 1);printf("%d,%d\n", 1 < j < 5, x - 5.25 < x y);printf("%d,%d\n", i j…...
提升易用性,OceanBase生态管控产品的“从小到大”
2022年,OceanBase发布4.0版本“小鱼”,并首次公开提出了单机分布式一体化这一理念,旨在适应大小不同规模的工作负载,全面满足用户数据库“从小到大”全生命周期的需求。当时,我们所说的“从小到大”主要聚焦于数据库的…...
Golang——gRPC认证
一. OpenSSL 1.1 介绍 OpenSSL是一个开放源代码的软件库包,用于支持网络通讯过程中的加密。这个库提供的功能包含了SSL和TLS协议的实现,并可用于生成密钥、证书、进行密码运算等。 其组成主要包括一下三个组件: openssl:多用途的命…...
探索FPGA技术:零成本入门指南
FPGA作为一门前沿的集成电路技术,不仅在数字电子领域有着广泛的应用,而且对于硬件编程和数字电路设计的学习者来说,是一次深入了解技术原理的绝佳机会。现在,让我们看看如何不花一分钱,就能开始我们的FPGA学习之旅。 方…...
Java数据结构与算法(组合问题回溯算法)
前言 上期重点介绍了回溯算法在约束满足问题情况下应用。这期看看在组合问题场景下如何使用。 回溯算法通常用于解决以下几类问题: 1. 组合问题 需要从集合中选择一些元素,并找出所有可能的组合。例子:子集生成问题、组合数问题ÿ…...
CMake的使用方法
1 CMakeLists.txt编写 cmake_minimum_required(VERSION 3.12)project(djl_plm)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdc17 -g")add_executable(simple simple.cpp) add_executable(main main.cpp)include_directories(include) 相当于如下gcc命令࿱…...
java面试整合全套
什么是Java (定义 优点) java是一个平台,由jvm和Java应用编程接口构成的一门面向编程语言。 不仅吸收了C语言的各种优点,还摒弃了c语言里面的多继承,指针等概念,因此java的特征主要有功能强大和简单易用的特征。 jav…...
贪吃蛇小游戏简单制作-C语言
文章目录 游戏背景介绍实现目标适合人群所需技术浅玩Window API什么是API控制台程序窗口大小,名称设置 Handle(句柄)获取句柄 坐标结构体设置光标位置 光标属性获取光标属性设置光标属性 按键信息获取 贪吃蛇游戏设计游戏前的初始化设置窗口的大小和名称本地化设置 宽字符Waht …...
Oracle数据库-重点信息查询方法
文章目录 一、数据库信息及查询方法1.1是否为RAC1.2 数据库存储容量大小1.3 在线会话数1.4 最大分区数1.5 最大存储过程行数1.6 单表最大行数1.7 最大单表大小1.8 表总数量1.9 无主键表的数量1.10 字段数超过200的宽表1.11 关注CPU耗时高的SQL 一、数据库信息及查询方法 1.1是…...
【全开源】多平台租房系统源码(Fastadmin+ThinkPHP+Uniapp)
🏠多平台租房系统:一站式租房新体验🔍 🌐一、引言:租房市场的变革 在快节奏的现代生活中,租房已成为许多人解决居住问题的首选。然而,传统的租房方式往往繁琐且效率低下。随着互联网的飞速发展…...
Pythond 的 corr函数
Python corr函数科普 在数据分析和机器学习领域,数据的相关性是一个非常重要的概念。相关性可以帮助我们理解数据之间的关系,并且可以作为一种预测模型的基础。Python中的corr()函数是一个用于计算数据之间相关性的强大工具。本文将介绍corr()函数的使用方法,并通过代码示例…...
Fiddler 中文版 (强大的网络响应HTPP协议抓包工具)
前言 Fiddler Web Debugger,功能强大的抓包工具,Web调试工具,HTTP协议抓包调试工具。它能够捕获浏览器和程序的所有http/https通信连接,可以针对访问请求,分析请求数据报文、设置断点、调试web程序、解密和美化JS脚本…...
初出茅庐的小李博客之JSON格式介绍
什么是JSON JSON:JavaScript Object Notation (翻译就是JavaScript 对象表示法),是一种表示对象的方法。 JSON 是存储和交换文本信息的语法,类似 XML。但是JSON 比 XML 更小、更快,更易解析。此外JSON也易于人阅读和编写。而且主流的编程语言…...
Vue3相关语法内容,组件传值,事件监听,具名插槽。
1、Vue3相关语法内容 赋值语句(ref、reactive系列)组件传值(父子,子父)watch,watchEffect监听slot具名插槽 1、赋值语法(ref,reactive) 1.1、ref 、isRef、 shallowRef、triggerRef、customRef 支持所有的类型&…...
Linux用户,用户组,所有者权限分配,sftp用户权限分配
注意以下命令执行需要在root用户下执行 tenant命令切换至root命令 sudo -do root 删除用户信息 1.不删除用户主目录 userdel user_name 2.删除用户主目录 userdel -r user_name usermod命令修改用户账户权限 更改用户名 sudo usermod -l newusername oldusername 更…...
iFlyCode:AI智能编程助手引领未来软件开发新趋势
体验地址 在当前软件行业飞速发展的背景下,开发效率和代码质量成为了衡量软件工程师工作效能的两大关键指标。为了应对日益增长的市场需求和紧迫的发布时间,科大讯飞推出了iFlyCode2.0——一款集AI技术于一身的智能编程助手,旨在引领未来软件…...
高低温测试发现文件被篡改
背景 高低温测试-40度和85度压测,出现程序崩溃现象(挂测日志看)。设备常温后也无法恢复,重启后也无法恢复。 定位排查 先校验程序资源文件一致性是否正确 1.取出设备中的程序资源,包括执行文件和主要的so文件(可以从大的文件开始) 2.…...
高考真的不再重要了吗?
阅读本文大概需要 1.11 分钟 一年一度的高考又落幕了,看到不少人说今年的高考热度好像少了几分,不再像过去那样热闹。于是就有人纳闷,高考是不是不那么重要了。 其实你觉得高考不重要,可能是因为你家今年没考生。就像你不怎么关注…...
spring常用注解(八)@Async
一、介绍 1、介绍 二、原理 三、集成与使用 1、集成方法 (1)开启 使用以下注解开启 EnableAsync (2)使用 在需要异步处理的方法上加上 Async 2、返回值 Async注解的方法返回值只能为void或者Future<T>。 &…...
B站画质补完计划(3):智能修复让宝藏视频重焕新生
1 老片存在什么画质问题? B站作为一个拥有浓厚人文属性的平台社区,聚集了诸如《雍正王朝》、《三国演义》等经典影视剧集,同时也吸引了大量用户欣赏、品鉴这些人文经典 。但美中不足的是,由于拍摄年代久远、拍摄设备落后、数据多次…...
Spring Cloud Stream整合RocketMQ
Spring Cloud Stream整合RocketMQ 这里书接上回,默认你已经搭建好了RocketMQ主从异步集群,前面文章已经介绍过搭建方法。 1、Spring Cloud Stream介绍 Spring Cloud Stream是一个框架,用于构建与共享消息系统连接的高度可扩展的事件驱动微服…...
Web前端浪漫源码:编织梦想与爱的交织乐章
Web前端浪漫源码:编织梦想与爱的交织乐章 在数字世界的广袤宇宙中,Web前端浪漫源码犹如一段段秘密的旋律,编织着梦想与爱的交织乐章。它们不仅是技术的结晶,更是情感的载体,将浪漫与创意融入每一个像素和每一行代码之…...
【云岚到家】-day02-4-我的账户-实名认证
【云岚到家】-day02-4-我的账户-实名认证 1 我的账户设置-实战1.1 配置OSS1.2 需求分析1.2.1 服务端设置银行账户1.2.2 机构端设置银行账户1.2.3 表结构设计1.2.4 表结构相关的controller、service、mapper、entity 1.3 服务端设置银行账户接口设计1.3.1 新增或更新银行账号信息…...
MySQL复习题(期末考试)
MySQL复习题(期末考试) 1.MySQL支持的日期类型? DATE,DATETIME,TIMESTAMP,TIME,TEAR 2.为表添加列的语法? alter table 表名 add column 列名 数据类型; 3.修改表数据类型的语法是? alter table 表名 modify 列名 新…...
利用DVWA演示文件上传漏洞获取网站shell权限(二)
文件上传漏洞是网络安全中常见的一种漏洞类型,攻击者可以利用该漏洞上传恶意文件到服务器上,从而获得对网站的远程控制权限。本文将以DVWA (Damn Vulnerable Web Application) 为例,演示如何利用文件上传漏洞的Medium级别设置,绕过…...
Java---BigInteger和BigDecimal和枚举
1.简介 1.BigInteger可以支持任意长度的整数 2.BigDecimal可以支持任意精度的浮点数 3.用来做精确计算 2.创建方式 new BigInteger(); new BigInteger(参数1,进制):可以将不同进制转成10进制显示 new BigDecimal(); BigInteger.valueOf(); BigDecimal.valueOf();…...
mybatis数据批量更新
1、mybatis批量更新mapper <update id"updateBatchById"><foreach collection"list" item"s" separator";">updatetableNamesetname #{name},whereid #{id}</foreach> </update>通过在数据库连接URL中指定…...
自动驾驶#芯片-1
概述 汽车是芯片应用场景之一,汽车芯片需要具备车规级。 车规级芯片对加工工艺要求不高,但对质量要求高。需要经过的认证过程,包括质量管理标准ISO/TS 16949、可靠性标准 AEC-Q100、功能安全标准ISO26262等。 汽车内不同用途的芯片要求…...
【保姆级讲解下QT6.3】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
站点创建/中国十大关键词
PostgreSQL中生成列是从其他列计算而来的特殊列。生成列与普通列不同,不是固定的值,而是又引用表中其他列的表达式决定的。生成列在SQL标准(ISO/IEC 9075)中引入,被主流RDBMS支持,PostgreSQL12开始支持生成…...
品牌网站建设可信大蝌蚪/seo经验是什么
In [20]: pivot_df data_df.pivot(index‘userNum’, columns‘subjectCode’, values‘score’) https://blog.csdn.net/CoderPai/article/details/83584185...
东莞网站se/seo网络推广什么意思
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及 Full GC 次数过多的问题。 当然,这些问题最终导致的直观现象就是系统运行缓慢,并且有大量的报警。 本文主要针对系统运行缓慢这一问题,提供该问题…...
做网站有没有前途/怎么去推广自己的网站
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 文件读取 os.File 封装了文件相关操作 os.File Pkg Doc 读写参数 文件打开模式: const (O_RDONLY int syscall.O_RDONLY // 只读模式打开文件O_WRONLY int syscall.O_WRONLY // 只写模式…...
wordpress 如何修改导航链接/seo公司
“什么是数据产品经理”这个问题的本质其实是在问“数据产品经理和产品经理到底有什么区别?”,金老师先来看看他们之间的区别吧!用数据来指导产品设计已经不是什么新鲜事了,几乎所有的产品经理都需要依赖数据做产品决策——从早期产品开发时的用户研究&…...
wordpress调用 php文件上传/百度下载安装到手机
事件: 由于前一天的晚上加班了、第二天又接着上班、所以精神上有点不在状态;收到客户的反馈说在slave上找不到master刚刚插入的数据; 阶段1: 遇到这事的第一感觉就是这可能是主从延时、或是slave的复制出错了使得数据没有同步、于…...