当前位置: 首页 > news >正文

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_CCRxTIMx_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独特的算法和广泛的用户基础&#xff0c;使得品牌在TikTok上的推广活动变得尤为重要。在这种背景下&#xff0c;TikTok达人合作成为品牌推广、用户增长和社交影响力的重要工具。本文Nox聚星将和大家探讨TikTok达人合作在这些方面的作用。 一、对品牌推广的作用 1. 增加…...

零撸广告创业项目:撸包小游戏对接广告联盟app开发

“撸包小游戏”APP是一款专注于小游戏的应用软件&#xff0c;它为用户提供了丰富多样的小游戏选择&#xff0c;并允许开发者通过广告变现的方式获取收益。以下是关于“撸包小游戏”APP的一些关键信息&#xff1a; 广告变现&#xff1a; 广告变现是“撸包小游戏”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——定时器

一、定时器简介&#xff1a; 1.最大59.65s定时&#xff1a; 因为预分频器和自动重装寄存器的最大存储值都是65536&#xff0c;当预分频器设置为65536时&#xff0c;就是当有65536个波形输入到预分频器时&#xff0c;预分频器才会输出一个波形到计数器&#xff0c;然后跟自动重装…...

[20] Opencv_CUDA应用之 关键点检测器和描述符

Opencv_CUDA应用之 关键点检测器和描述符 本节中会介绍找到局部特征的各种方法&#xff0c;也被称为关键点检测器关键点(key-point)是表征图像的特征点&#xff0c;可用于准确定义对象 1. 加速段测试特征功能检测器 FAST算法用于检测角点作为图像的关键点&#xff0c;通过对…...

支持离线翻译任意语言的桌面应用程序;单张图像高效生成高质量的 3D 模型;2500种色彩映射的集合,适用于matplotlib和seaborn

✨ 1: Lingo Lingo是一款支持离线翻译任意语言的桌面应用程序 Lingo 是一款支持离线翻译的桌面应用程序&#xff0c;用户可以在不连接互联网的情况下进行多语言翻译。这款软件利用了Meta公司提供的nllb-200-distilled-600M 多语言模型&#xff0c;以实现高效的翻译功能。 没…...

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…...

数据库 复习题

有一个关系模式&#xff1a;工程关系&#xff08;工程号&#xff0c;工程名称&#xff0c;职工号&#xff0c;姓名&#xff0c;聘期&#xff0c;职务&#xff0c;小时工资率&#xff0c;工时&#xff09;&#xff0c;公司按照工时和小时工资率支付工资&#xff0c;小时工资率由…...

web前端——CSS

目录 一、css概述 二、基本语法 1.行内样式表 2.内嵌样式表 3.外部样式表 4.三者对比 三、选择器 1.常用的选择器 2. 选择器优先级 3.由高到低优先级排序 四、文本,背景,列表,伪类,透明 1.文本 2.背景 3.列表 4.伪类 5.透明 五、块级,行级,行级块标签, dis…...

STM32学习-HAL库 串口通信

学完标准库之后&#xff0c;本来想学习freertos的&#xff0c;但是看了很多教程都是移植的HAL库程序&#xff0c;这里再学习一些HAL库的内容&#xff0c;有了基础这里直接学习主要的外设。 HAL库对于串口主要有两个结构体UART_InitTypeDef和UART_HandleTypeDef&#xff0c;前者…...

【Linux】进程信号_1

文章目录 八、进程信号1.信号 未完待续 八、进程信号 1.信号 信号和信号量之间没有任何关系。信号是Linux系统提供的让用户/进程给其他进程发送异步信息的一种方式。 常见信号&#xff1a; 当信号产生时&#xff0c;可选的处理方式有三种&#xff1a;①忽略此信号。②执行该…...

Vue71-嵌套(多级)路由

一、需求 二、开发步骤 2-1、编写路由组件 2-2、编写路由规则 2-3、编写路由标签<router-link>、<router-view> 三、小结...

Elk安装及使用

es安装及使用 单机版安装 集群安装 132 node-01 133 node-02 135 node-03 日志用户权限有问题 看日志 解决方案&#xff1a; 出现错误后&#xff0c;再次重启前&#xff0c;需要删除三个节点/data/下的内容 9300-http 9300-tcp logstasha安装及使用 Ssh错误 Yum安装默认路…...

【代码随想录】【算法训练营】【第50天】 [1143]最长公共子序列 [1035]不相交的线 [53]买卖股票的最佳时机III [392]判断子序列

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 50&#xff0c;周三&#xff0c;无法坚持~ 题目详情 [1143] 最长公共子序列 题目描述 1143 最长公共子序列 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语…...

【摄像头标定】双目摄像头标定及矫正-opencv(python)

双目摄像头标定及矫正 棋盘格标定板标定矫正 棋盘格标定板 本文使用棋盘格标定板&#xff0c;可以到这篇博客中下载&#xff1a;https://blog.csdn.net/qq_39330520/article/details/107864568 标定 要进行标定首先需要双目拍的棋盘格图片&#xff0c;20张左右&#xff0c;…...

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&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息。 当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于消息的消费速度。长此以往&#xff0c;消息就会堆积越来越多&#xff0c;…...

【LeetCode】每日一题:最大子数组和

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组中的一个连续部分。 解题思路 要注意最小值是整个前缀&#xff0c;主要是cumsum然后按照买卖股票的思路做的&a…...

什么是进程?

前言&#x1f440;~ 上一章我们介绍了计算机组成的入门知识&#xff0c;了解这些之后&#xff0c;今天来聊聊进程 进程 PCB pcb中的常见属性 进程调度 进程的状态 进程的优先级 上下文 记账信息 虚拟地址空间 如果各位对文章的内容感兴趣的话&#xff0c;请点点小赞&a…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...