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 运行代码

编译代码,然后将代码下载到板卡中,运行代码,并使用逻辑分析仪捕捉波形

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/719670.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

29. 透镜阵列

导论&#xff1a; 物理传播光学&#xff08;POP&#xff09;不仅可以用于简单系统&#xff0c;也可以设计优化复杂的光学系统&#xff0c;比如透镜阵列。 设计流程&#xff1a; 透镜阵列建模 在孔径类型中选择“入瞳直径”&#xff0c;并输入2 在视场设定中。设置一个视场&…

将自己md文件发布到自己的博客园实现文件的持久化存储

上传markdown文件到博客园 目录 【0】需求原因【1】功能【2】环境【最佳实践测试】 &#xff08;1&#xff09;查看 Typora 设置&#xff08;2&#xff09;配置 pycnblog 配置文件 config.yaml&#xff08;3&#xff09;运行 pycnblog 中的文件 cnblog_markdown.cmd&#xff0…

win11电脑桌面设置倒计时提醒教程

在日常工作中&#xff0c;我们经常需要处理大量的工作任务&#xff0c;而且很多任务都有时间限制。如果将这些任务记录在桌面上&#xff0c;并设置倒计时提醒&#xff0c;无疑会大大提高我们的工作效率。想象一下&#xff0c;在繁忙的工作间隙&#xff0c;你只需一瞥桌面&#…

如何经营好中医诊所?方法有哪些

在当今竞争激烈的医疗市场中&#xff0c;要想成功经营一家中医诊所&#xff0c;并不仅仅是提供传统的医疗服务&#xff0c;更需要与时俱进的战略思维和精细化的管理。过去被动获客、低效管理的模式已经不再适用&#xff0c;而如何拓展客源、提升服务质量、优化业务模式成为了中…

图书管理系统代码(Java)

1、运行演示 QQ2024528-205028-HD 详细讲解在这篇博客&#xff1a;JavaSE&#xff1a;图书管理系统-CSDN博客 2、所建的包 3、Java代码 3.1 book包 3.1.1 Book类代码 package book;/*** Created with IntelliJ IDEA.* Description:* User: dings* Date: 2024-05-13* Time:…

linux驱动学习(八)之内核定制与裁剪

一、内核的配置 1) 把相关硬件平台的配置文件拷贝给.config 2) 执行make menuconfig命令 关于内核配置说明:Arrow keys navigate the menu. 方向键对菜单有效<Enter> selects submenus --->. 如果有该符号"--->",则按Enter表示进入子菜单Highlighted …

【Ambari】Python调用Rest API 获取集群状态信息并发送钉钉告警

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1f338;文…

路由控制和策略路由

文章目录 一、路由控制&#xff08;1&#xff09;、前言1.1.1-路由策略 &#xff08;2&#xff09;、正反掩码和通配符1.2.1-通配符 &#xff08;3&#xff09;、ACL1.3.1-ACL步长1.3.2-步长的作用1.3.3-TCP/UDP端口号 实验1:实验2: 二、前缀列表实验1:2.1.1-前缀列表的表达式2…

全功能知识付费小程序源码系统 界面支持万能DIY装修 带完整的安装代码包以及搭建部署教程

系统概述 在当今数字化时代&#xff0c;知识付费已经成为一种重要的商业模式。为了满足市场对于便捷、高效、个性化的知识付费解决方案的需求&#xff0c;小编给大家分享一款全功能知识付费小程序源码系统。这一系统不仅具备界面支持万能 DIY 装修的独特优势&#xff0c;还配备…

NetSarang Xshell Xftp v7 解锁版 (SSH远程终端工具)

前言 Xshell 7是一款SSH远程终端工具&#xff0c;轻松管理远程服务器&#xff0c;会话管理器&#xff0c;支持多选项卡管理主机&#xff0c;支持远程协议Telnet、Rlogin、SSH/SSH PKCS&#xff03;11、SFTP、Serial&#xff0c;具有Unicode编码支持、动态端口转发、自定义键盘…

【机器学习】——【线性回归模型】——详细【学习路线】

目录 1. 引言 2. 线性回归理论基础 2.1 线性模型概述 2.2 最小二乘法 3. 数学基础 3.1 矩阵运算 3.2 微积分 3.3 统计学 4. 实现与应用 4.1 使用Scikit-learn实现线性回归 4.2 模型评估 5. 深入理解 5.1 多元线性回归 5.2 特征选择 5.3 理解模型内部 6. 实战与项…

MacOS - 3 招快速去除桌面上的图标文件

在平时用 Mac 电脑的时候&#xff0c;会产生许多我们不用的或废弃的图标、文件&#xff0c;在 Mac 桌面上显得很乱&#xff0c;不仅影响美观也直接影响了我们工作的心情。下面我们分享 3 招快速去除桌面上的图标或文件的方法&#xff0c;有需要的朋友可以试一试。 1. 右键删除&…

Linux常用操作大全(上)

Linux常用操作 文章目录 Linux常用操作一、各类小技巧**1.ctrl c 强制停止****2.ctrl d 退出或登出**3.历史命令搜索4.光标移动快捷键5.清屏6.复制Ctrlshiftc7.粘贴Ctrlshiftv 二、软件安装1.概念2.yum与apt 三、systemctl控制服务四、软链接ln五、日期时区1.date查看日期2.修…

LN6291 2.5A 高效率升压 DC/DC 电压调整器芯片IC

产品概述 LN6291H是一款微小型、高效率、升压型DC/DC调整器。电路由电流模COT控制环路&#xff0c;误差放大器&#xff0c;斜坡补偿电路&#xff0c;比较器和功率开关等模块组成。该芯片可在较宽负载范围内高效稳定的工作&#xff0c;内置一个2.5A的功率开关和软启动保…

如何利用Python处理站点数据、格点观测数据、再分析ERA5;GLDAS、遥感数据、水文数据、气象数据、陆面模式数据、气候变化数据等

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;Python能够运行在Linux、Windows、Macintosh、AIX操作系统上及不同平台&#xff08;x86和arm&#xff09;&#xff0c;Python简洁的语法和对动态输入的支持&#xff0c;再加上解释性语言的本质&…

关于IOMMU问题的扩展

关联CSDN&#xff1a; Steam Deck OLED WLAN下载速率过低问题的排查和解决-CSDN博客 前言 如前所述&#xff0c;Steam Deck OLED WLAN速率低问题和IOMMU有一定的关系&#xff0c;这里我们对IOMMU为什么会对速率有影响进行一个较深入的理解。 对于IOMMU我相信大家通过网上的…

游戏开发丨基于PyGame的消消乐小游戏

文章目录 写在前面PyGame消消乐注意事项系列文章写在后面 写在前面 本期内容&#xff1a;基于pygame实现喜羊羊与灰太狼版消消乐小游戏 下载地址&#xff1a;https://download.csdn.net/download/m0_68111267/88700193 实验环境 python3.11及以上pycharmpygame 安装pygame…

linux下编译安装和使用cURL库(含有openssl)

cURL是一个利用URL语法指定各种协议(如HTTP、HTTPS、FTP等)进行数据传输的工具,它以客户端的身份,允许用户通过命令行与服务器交互。cURL库(libcurl)是cURL的编程接口(API),提供了一套丰富的函数,供开发者在自己的应用程序中实现网络传输功能 cURL库是网络编程中不可…

群辉USB Copy套件的使用

目录 一、套件安装 二、插入USB设备 三、使用 四、故障排除 有了群辉NAS后,很多U盘、移动硬盘的数据需要备份到NAS中,这时就可以考虑使用USB Copy这个套件了。 USB Copy 乃是群晖上可用于和外接存储设备进行文件复制的一个工具,我常常借助它把外置存储设备的文件拷贝至…

react+ts实现 父子组件通信

创建tsreact的命令 npx create-react-app react-ts --template typescript 使用React和TypeScript进行开发与使用JavaScript进行开发在逻辑上是相同的&#xff0c;但TypeScript增加了类型安全性&#xff0c;这在大型应用中可以减少错误&#xff0c;提高代码的可维护性。下面我…