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

初学stm32 --- PWM输出

目录

STM32 PWM工作过程​编辑

 STM32 PWM工作过程(通道1为例)

PWM模式1 & PWM模式2

 向上计数配置说明​编辑

STM32 定时器3输出通道引脚

自动重载的预装载寄存器

​编辑

PWM输出相关库函数

输出比较初始化函数:

设置比较值函数:

使能输出比较预装载:

使能自动重装载的预装载寄存器允许位:


STM32 PWM工作过程

 

 STM32 PWM工作过程(通道1为例)

  • CCR1:捕获比较()寄存器(x=1,2,3,4):设置比较值。
  • CCMR1: OC1M[2:0]位:

                对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】

  • CCER:CC1P位:输入/捕获1输出极性。0:高电平有效,1:低电平有效。
  • CCER:CC1E位:输入/捕获1输出使能。0:关闭,1:打开。

PWM模式1 & PWM模式2

寄存器TIMx_CCMR1OC1M[2:0]位来分析:

 向上计数配置说明

        这里的OCXREF是比较的结果,在PWM模式一下,向上计数,当计数值CNT<比较值CCR时,输出有效值。

        这里的CCxIF是终端触发标志位。

STM32 定时器3输出通道引脚

自动重载的预装载寄存器

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

         简单的说:

        ARPE=1,ARR立即生效。原来本来是向上计数到36,然后溢出,再回到0。

如果计数中间修改了ARR的值,比如修改到了F5,那么再计数到F5时会立即溢出。

        APRE=0,ARR下个比较周期生效。原来本来是向上计数到36,然后溢出,再回到0。

如果计数中间修改了ARR的值,比如修改到了FF,那么再计数到FF时不会溢出,他要到下个比较的周期,再到FF才会溢出。

PWM输出相关库函数

输出比较初始化函数:

void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
typedef struct
{uint16_t TIM_OCMode;  //PWM模式1或者模式2uint16_t TIM_OutputState; //输出使能 OR失能uint16_t TIM_OutputNState;uint16_t TIM_Pulse; //比较值,写CCRxuint16_t TIM_OCPolarity; //比较输出极性uint16_t TIM_OCNPolarity; uint16_t TIM_OCIdleState;  uint16_t TIM_OCNIdleState; 
} TIM_OCInitTypeDef;

实例:

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure. TIM_Pulse=100;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2

设置比较值函数:

void TIM_SetCompareX(TIM_TypeDef* TIMx, uint16_t Compare2);

使能输出比较预装载:

void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

使能自动重装载的预装载寄存器允许位:

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

总结 ---PWM输出配置步骤:

① 使能定时器3和相关IO口时钟。

        使能定时器3时钟:RCC_APB1PeriphClockCmd();

        使能GPIOB时钟:RCC_APB2PeriphClockCmd();

② 初始化IO口为复用功能输出。函数:GPIO_Init();

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      

③ 这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置,

        所以需要开启AFIO时钟。同时设置重映射。

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);

④ 初始化定时器:ARR,PSC等:TIM_TimeBaseInit();

⑤ 初始化输出比较参数:TIM_OC2Init();

⑥ 使能预装载寄存器: TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

⑦   使能定时器。TIM_Cmd();

⑧   不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2();

相关文章:

初学stm32 --- PWM输出

目录 STM32 PWM工作过程​编辑 STM32 PWM工作过程&#xff08;通道1为例&#xff09; PWM模式1 & PWM模式2 向上计数配置说明​编辑 STM32 定时器3输出通道引脚 自动重载的预装载寄存器 ​编辑 PWM输出相关库函数 输出比较初始化函数&#xff1a; 设置比较值函数&a…...

ES6学习Iterator遍历器(七)

这里写目录标题 一、概念1.1、遍历器1.2、作用1.3、遍历过程 二、代码学习 一、概念 JavaScript 原有的表示“集合”的数据结构&#xff0c;主要是数组&#xff08; Array &#xff09;和对象&#xff08; Object &#xff09;&#xff0c;ES6 又添加了 Map 和Set 。这样就有了…...

重建大师软件做任务提示引擎错误?

原因1&#xff1a;打开工程用的本地路径&#xff0c;导致访问失败&#xff1b;解决方案&#xff1a;用网络路径打开工程&#xff0c;重新提交空三。 原因2&#xff1a;引擎主机对工程目录没有访问权限&#xff1b;解决方案&#xff1a;找到相应的引擎主机设置访问权限 重建大…...

【图像分类实用脚本】数据可视化以及高数量类别截断

图像分类时&#xff0c;如果某个类别或者某些类别的数量远大于其他类别的话&#xff0c;模型在计算的时候&#xff0c;更倾向于拟合数量更多的类别&#xff1b;因此&#xff0c;观察类别数量以及对数据量多的类别进行截断是很有必要的。 1.准备数据 数据的格式为图像分类数据集…...

python的is和==运算符

在py中&#xff0c;有两个特别的运算符&#xff0c;is和分别用来判断两个变量是不是相同的和两个变量的值是不是相同。 1. is运算符&#xff1a;用来比较两个对象的身份&#xff0c;即判断两个变量是否指向内存中的同一个对象。 应用场景&#xff1a;1&#xff09;单例模式&a…...

单节点calico性能优化

在单节点上部署calicov3273后&#xff0c;发现资源占用 修改calico以下配置是资源消耗降低 1、因为是单节点&#xff0c;没有跨节点pod网段组网需要&#xff0c;禁用overlay方式网络(ipip&#xff0c;vxlan),使用route方式网络 配置calico-node的环境变量 CALICO_IPV4POOL_I…...

React 19有哪些新特性?

写在前面 2024.12.5&#xff0c;React 团队在 react.dev/blog 上发表了帖子 react.dev/blog/2024/1… React 19 正式进入了 stable 状态 React 团队介绍了一些新的特性和 Breaking Changes&#xff0c;并提供了升级指南&#xff0c; React 19: 新更新、新特性和新Hooks Reac…...

视频生成缩略图

文章目录 视频生成缩略图使用ffmpeg 视频生成缩略图 最近有个需求&#xff0c;视频上传之后在列表和详情页需要展示缩略图 使用ffmpeg 首先引入jar包 <dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><vers…...

页面无滚动条,里面div各自有滚动条

一、双滚动条左右布局 实现效果 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Doc…...

DIY-ESP8266移动PM2.5传感器-带屏幕-APP

本教程将指导您制作一台专业级的空气质量检测仪。这个项目使用经济实惠的ESP8266和PMS5003传感器&#xff0c;配合OLED显示屏&#xff0c;不仅能实时显示PM2.5数值&#xff0c;还能通过手机APP随时查看数据。总成本70元&#xff0c;相比几百的用的便宜&#xff0c;用的心理踏实…...

【Canvas与技法】椭圆画法

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>椭圆的画法 Draft2</title><style type"text/css&quo…...

多核CPU调度是咋搞的?

其实很多情况下都有 这样的疑问 为什么多核CPU用着用着会“躺平”&#xff1f; 为什么手机有 8 核&#xff0c;跑分时性能却不是核心数的翻倍&#xff1f; 答案的钥匙&#xff0c;就藏在多核CPU的调度机制里。 为了更直观地理解&#xff0c;以一个《王者荣耀》游戏服务器为例…...

【Jenkins】pipeline 的基础语法以及快速构建一个 jenkinsfile

Jenkins Pipeline 是 Jenkins 中的一个强大功能&#xff0c;可以帮助你实现自动化构建、测试、部署等流程。Jenkins Pipeline 使用一种名为 Pipeline DSL&#xff08;Domain Specific Language&#xff09;的脚本语言&#xff0c;通常以 Jenkinsfile 形式存在&#xff0c;用于定…...

工作中如何提高技术实力?

点击“硬核王同学”&#xff0c;选择“关注/三连” 福利干货第一时间送达 大家好&#xff0c;我是硬核王同学。 其实这个问题困扰了我很久啊&#xff0c;不知道你们有没有跟我一样。 如何在工作中如何提高技术实力&#xff1f; 随着时间的增加&#xff0c;越来越觉得工作上…...

画图,matlab,

clear;close all;clc;tic;dirOutput dir(*.dat); % 罗列所有后缀-1.dat的文件列表&#xff0c;罗列BDDATA的数据 filenames string({dirOutput.name}); % 提取文件名%% 丢包统计 FILENAMES [""]; LOSS_YTJ [ ]; LOSS_RAD [ ]; LOSS_ETH [ ]…...

Java虚拟机类加载(解析阶段)[虚方法表的生成以及其存在意义]

class字节码文件中的常量池结构详解-CSDN博客Java虚拟机类加载(解析阶段)-CSDN博客...

电子元器件与电路之-MOS管的介绍和作用

一、基本概念 MOS 管&#xff0c;或MOSFET&#xff0c;全称是Metal-Oxide-Semiconductor Field-Effect Transistor&#xff08;金属 - 氧化物 - 半导体场效应晶体管&#xff09;。和三极管利用电流控制电流不同&#xff0c;它是一种利用电场效应来控制电流的半导体器件。和三级…...

python实现word转html

目录 使用mammoth库 使用spire.doc库 使用mammoth库 mammoth库支持将word转为HTML和markdown格式的文件。 import mammothdef word_html(word_file):html_save_name fr{word_file.split(.)[0]}.htmlwith open(word_file, rb) as f:data mammoth.convert_to_html(f)with o…...

nginx模块ngx-fancyindex 隐藏标题中的 / 和遇到的坑

首先下载nginx源码&#xff0c;编译时加上 --add-module/usr/local/src/ngx-fancyindex/ 例如 &#xff1a; ./configure --prefix/usr/local/nginx --with-select_module --with-poll_module --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module…...

第二十四天 循环神经网络(RNN)LSTM与GRU

LSTM&#xff08;长短期记忆网络&#xff09;和GRU&#xff08;门控循环单元&#xff09;是两种流行的循环神经网络变体&#xff0c;它们被设计来解决传统RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。这两种网络都通过引入门控机制来控制信息的流动&#xff0c;从而能…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...