STM32高级控制定时器(STM32F103):PWM输出模式
目录
概述
1 PWM模式介绍
2 PWM类型
2.1 PWM边缘对齐模式
2.2 PWM中心对齐模式
3 使用STM32Cube配置PWM
3.1 STM32Cube配置参数
3.2 生成Project
4 设置PWM占空比
4.1 函数介绍
4.3 函数源码
5 测试代码
5.1 编写测试代码
5.2 函数源码
6 运行代码
概述
本文主要介绍STM32高级控制定时器中的PWM波形功能,包括和PWM相关的寄存器配置,PWM的类型。还介绍如何使用STM32Cube配置PWM相关的参数,然后通过具体的实验来验证PWM功能。
1 PWM模式介绍
脉冲宽度调制模式允许生成频率由TIMx_ ARR寄存器的值和由TIMx_CCRx寄存器。
PWM模式可以在每个通道上独立选择(每个OCx一个PWM输出),方法是在TIMx_CCMRx寄存器。必须通过设置来启用相应的预加载寄存器TIMx_CCMRx寄存器中的OCxPE位,以及最终的自动重新加载预加载寄存器(在上计数或中心对准模式)。
因为只有当发生更新事件时,预加载寄存器才会转移到影子寄存器发生时,在启动计数器之前,用户必须通过设置UG来初始化所有寄存器位。
OCx极性可使用TIMx_CCER寄存器中的CCxP位进行软件编程。它可以编程为有效高电平或有效低电平。OCx输出通过以下组合启用CCxE、CCxNE、MOE、OSSI和OSSR位(TIMx_CCER和TIMx_BDTR寄存器)。有关更多详细信息,请参阅TIMx_CCER寄存器说明。
在PWM模式(1或2)中,TIMx_CNT和TIMx_CCRx总是进行比较,以确TIMx_CCRxTIMx_CNT或TIMx_CNT TIMx_CCRx(取决于方向计数器的)。
定时器能够在边缘对齐模式或中心对齐模式下生成PWM取决于TIMx_ CR1寄存器中的CMS位。
2 PWM类型
2.1 PWM边缘对齐模式
1)递增配置
当TIMx_CR1寄存器中的DIR位为低电平时,上计数激活。提到递增计数模式。在以下示例中,我们考虑PWM模式1。参考PWM信号只要TIMx_CNT<TIMx_CCRx,OCxREF就高,否则它变低。如果TIMx_CCRx中的比较值大于自动重新加载值(TIMx_ARR中)则OCxREF被保持在“1”。如果比较值为0,则OCxRef保持在“0”。下图显示了一个示例中的一些边缘对齐PWM波形,其中
TIMx_ARR=8。
Edge-aligned PWM waveforms (ARR=8)

2)倒计数配置
当TIMx_CR1寄存器中的DIR位为高时,递减计数激活。提到递减计数模式在PWM模式1中,只要
TIMx_CNT>TIMx_CCRx,否则它变高。如果TIMx_CCRx中的比较值为大于TIMx_ARR中的自动重新加载值,则OCxREF保持在“1”。0%PWM在此模式下不可能。
2.2 PWM中心对齐模式
当TIMx_CR1寄存器中的CMS位与“00”(所有剩余配置对OCxRef/OCx信号具有相同影响)。
计数器向上计数时、向下计数时或两者都设置比较标志根据CMS位配置向上和向下计数。中的方向位(DIR)TIMx_CR1寄存器由硬件更新,不得由软件更改。提到居中对齐模式(向上/向下计数)。
下图显示了一个示例中的一些中心对齐PWM波形,其中:
TIMx_ ARR=8
PWM模式是PWM模式1
当计数器与中心对齐相对应倒计时时,设置该标志为TIMx_CR1寄存器中的CMS=01选择模式1
中间对齐PWM 波形(ARR=8)

3 使用STM32Cube配置PWM
STM32Cube版本信息: STM32CubeMX 6.11
STM32 HAL版本信息: STM32Cube_FW_F1_V1.8.5
3.1 STM32Cube配置参数
1)使用STM32Cube配置参数,选择内部Clock,配置为输出类型PWM

2) 配置主时钟参数
分频系数配置为71
系统主频时钟为:72M Hz, 分频系数配置为71,则TIME的主频为1M Hz
计数周期为9999
计数周期为9999,则计数周期为10ms

3)PWM通道参数,需要配置Pulse,默认配置为0,如果不改变该参数,PWM的输出占空比为0

3.2 生成Project
配置完成工程后,就可以生成工程。tim.c是自动生成和Timer相关的函数库

4 设置PWM占空比
4.1 函数介绍
参数介绍:
Pluse: 占空比
Channel: PWM输出通道

4.3 函数源码
在tim.c文件中编写如下代码:
void HAL_TIM_SetPWM_Pulse( uint32_t Pulse, uint32_t Channel)
{TIM_OC_InitTypeDef sConfigOC = {0};sConfigOC.OCMode = TIM_OCMODE_PWM1;sConfigOC.Pulse = Pulse;sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, Channel) != HAL_OK){Error_Handler();}
}
5 测试代码
5.1 编写测试代码
创建Product文件夹,其和项目相关,创建pwm_ctrl.c文件,编写如下代码
代码第22行: 启动定时器
代码第23行:启动对应通道CH1的PWM
代码第24行:启动对应通道CH2的PWM
代码第26行:设置CH1占空间比为0
代码第27行:设置CH1占空间比为2500/10000

5.2 函数源码
在pwm_ctrl.c文件,编写如下代码:
/* USER CODE BEGIN Header */
/********************************************************************************* @file : pwm_ctrl.c* @brief : pwm control library******************************************************************************* @attention** Copyright (c) tangmingfei2013@126.com 2024~2029.* All rights reserved.*********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/#include "pwm_ctrl.h"#include "tim.h"void pwm_ctrl_Init( void ){HAL_TIM_Base_Start( &htim8 );HAL_TIM_PWM_Start( &htim8, TIM_CHANNEL_1);HAL_TIM_PWM_Start( &htim8, TIM_CHANNEL_2);HAL_TIM_SetPWM_Pulse( 0, TIM_CHANNEL_1);HAL_TIM_SetPWM_Pulse( 2500, TIM_CHANNEL_2);}/* End of this file */
6 运行代码
编译代码,然后将代码下载到板卡中,运行代码,并使用逻辑分析仪捕捉波形

相关文章:
STM32高级控制定时器(STM32F103):PWM输出模式
目录 概述 1 PWM模式介绍 2 PWM类型 2.1 PWM边缘对齐模式 2.2 PWM中心对齐模式 3 使用STM32Cube配置PWM 3.1 STM32Cube配置参数 3.2 生成Project 4 设置PWM占空比 4.1 函数介绍 4.3 函数源码 5 测试代码 5.1 编写测试代码 5.2 函数源码 6 运行代码 概述 本文主…...
TikTok达人背后的品牌影响力与用户增长
TikTok独特的算法和广泛的用户基础,使得品牌在TikTok上的推广活动变得尤为重要。在这种背景下,TikTok达人合作成为品牌推广、用户增长和社交影响力的重要工具。本文Nox聚星将和大家探讨TikTok达人合作在这些方面的作用。 一、对品牌推广的作用 1. 增加…...
零撸广告创业项目:撸包小游戏对接广告联盟app开发
“撸包小游戏”APP是一款专注于小游戏的应用软件,它为用户提供了丰富多样的小游戏选择,并允许开发者通过广告变现的方式获取收益。以下是关于“撸包小游戏”APP的一些关键信息: 广告变现: 广告变现是“撸包小游戏”APP中开发者获…...
【Web3初识系列】如何连接 Binance Smart Chain通过交易对绘制 k 线?
连接 Binance Smart Chain通过交易对绘制 k 线 安装 web3 pip install web3连接到 Binance Smart Chain 使用公共的 BSC 节点 URL。 from web3 import Web3# 连接到 BSC 公共节点 bsc_url "https://bsc-dataseed.binance.org/" web3 Web3(Web3.HTTPProvider(bs…...
STM32——定时器
一、定时器简介: 1.最大59.65s定时: 因为预分频器和自动重装寄存器的最大存储值都是65536,当预分频器设置为65536时,就是当有65536个波形输入到预分频器时,预分频器才会输出一个波形到计数器,然后跟自动重装…...
[20] Opencv_CUDA应用之 关键点检测器和描述符
Opencv_CUDA应用之 关键点检测器和描述符 本节中会介绍找到局部特征的各种方法,也被称为关键点检测器关键点(key-point)是表征图像的特征点,可用于准确定义对象 1. 加速段测试特征功能检测器 FAST算法用于检测角点作为图像的关键点,通过对…...
支持离线翻译任意语言的桌面应用程序;单张图像高效生成高质量的 3D 模型;2500种色彩映射的集合,适用于matplotlib和seaborn
✨ 1: Lingo Lingo是一款支持离线翻译任意语言的桌面应用程序 Lingo 是一款支持离线翻译的桌面应用程序,用户可以在不连接互联网的情况下进行多语言翻译。这款软件利用了Meta公司提供的nllb-200-distilled-600M 多语言模型,以实现高效的翻译功能。 没…...
BC-Linux 8.6最小化安装的服务器启用GNOME图形化界面
本文记录了BC-Linux 8.6最小化安装的服务器如何启用GNOME图形化界面的过程。 一、服务器环境 1、系统版本 [rootlocalhost ~]# cat /etc/os-release NAME"BigCloud Enterprise Linux" VERSION"8.6 (Core)" ID"bclinux" ID_LIKE"rhel fe…...
数据库 复习题
有一个关系模式:工程关系(工程号,工程名称,职工号,姓名,聘期,职务,小时工资率,工时),公司按照工时和小时工资率支付工资,小时工资率由…...
web前端——CSS
目录 一、css概述 二、基本语法 1.行内样式表 2.内嵌样式表 3.外部样式表 4.三者对比 三、选择器 1.常用的选择器 2. 选择器优先级 3.由高到低优先级排序 四、文本,背景,列表,伪类,透明 1.文本 2.背景 3.列表 4.伪类 5.透明 五、块级,行级,行级块标签, dis…...
STM32学习-HAL库 串口通信
学完标准库之后,本来想学习freertos的,但是看了很多教程都是移植的HAL库程序,这里再学习一些HAL库的内容,有了基础这里直接学习主要的外设。 HAL库对于串口主要有两个结构体UART_InitTypeDef和UART_HandleTypeDef,前者…...
【Linux】进程信号_1
文章目录 八、进程信号1.信号 未完待续 八、进程信号 1.信号 信号和信号量之间没有任何关系。信号是Linux系统提供的让用户/进程给其他进程发送异步信息的一种方式。 常见信号: 当信号产生时,可选的处理方式有三种:①忽略此信号。②执行该…...
Vue71-嵌套(多级)路由
一、需求 二、开发步骤 2-1、编写路由组件 2-2、编写路由规则 2-3、编写路由标签<router-link>、<router-view> 三、小结...
Elk安装及使用
es安装及使用 单机版安装 集群安装 132 node-01 133 node-02 135 node-03 日志用户权限有问题 看日志 解决方案: 出现错误后,再次重启前,需要删除三个节点/data/下的内容 9300-http 9300-tcp logstasha安装及使用 Ssh错误 Yum安装默认路…...
【代码随想录】【算法训练营】【第50天】 [1143]最长公共子序列 [1035]不相交的线 [53]买卖股票的最佳时机III [392]判断子序列
前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 50,周三,无法坚持~ 题目详情 [1143] 最长公共子序列 题目描述 1143 最长公共子序列 解题思路 前提: 思路: 重点: 代码实现 C语…...
【摄像头标定】双目摄像头标定及矫正-opencv(python)
双目摄像头标定及矫正 棋盘格标定板标定矫正 棋盘格标定板 本文使用棋盘格标定板,可以到这篇博客中下载:https://blog.csdn.net/qq_39330520/article/details/107864568 标定 要进行标定首先需要双目拍的棋盘格图片,20张左右,…...
PostgreSQL 高可用性与容错性(十三)
1. 备份与恢复策略 1.1 数据备份 1.1.1 基于 pg_dump 的逻辑备份 pg_dump -U username -d dbname -f backup_file.sql 1.1.2 基于 pg_basebackup 的物理备份 pg_basebackup -U username -D /path/to/backup/directory -Ft -Xs -P -R 1.2 恢复数据库 1.2.1 恢复逻辑备份 …...
RabbitMQ的WorkQueues模型
WorkQueues模型 Work queues,任务模型。简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。 当消息处理比较耗时的时候,可能生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,…...
【LeetCode】每日一题:最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 解题思路 要注意最小值是整个前缀,主要是cumsum然后按照买卖股票的思路做的&a…...
什么是进程?
前言👀~ 上一章我们介绍了计算机组成的入门知识,了解这些之后,今天来聊聊进程 进程 PCB pcb中的常见属性 进程调度 进程的状态 进程的优先级 上下文 记账信息 虚拟地址空间 如果各位对文章的内容感兴趣的话,请点点小赞&a…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
