初学stm32 --- PWM输出

news/2024/12/21 9:11:18/

目录

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();


http://www.ppmy.cn/news/1556885.html

相关文章

web3跨链桥协议-Nomad

项目介绍 Nomad是一个乐观跨链互操作协议。通过Nomad协议&#xff0c;Dapp能够在不同区块链间发送数据&#xff08;包括rollups&#xff09;&#xff0c;Dapp通过Nomad的合约和链下的代理对跨链数据、消息进行验证、传输。其安全通过乐观验证机制和欺诈证明制约验证者实现&…

Mac iOS、Android、Flutter、React Native开发环境配置

1.安装XCode https://apps.apple.com/cn/app/xcode/id497799835?mt12 2.安装Android Studio https://developer.android.google.cn/studio 3.安装brew 参考地址&#xff1a;https://www.jianshu.com/p/22122a1d4474 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunk…

microk8s使用

microk8s使用 在使用microk8s时&#xff0c;可以设置一些别名&#xff0c;使用起来保持与k8s习惯一样&#xff0c;具体如下 sudo snap alias microk8s.kubectl kubectl sudo snap alias microk8s.ctr ctr sudo snap alias microk8s.helm helm sudo snap alias microk8s.helm3…

DFS入门

目录 概念应用场景基本模型例题 概念 这是一种用于遍历或搜索图&#xff08;包括树&#xff0c;树是一种特殊的图&#xff09;的算法。它从起始顶点开始&#xff0c;沿着一条路径尽可能深地探索下去&#xff0c;直到无法继续&#xff0c;然后回溯到前一步&#xff0c;继续探索其…

11篇--图像边缘检测

图像梯度 要学习图像边缘检测&#xff0c;要先了解图像梯度的概念&#xff0c;我们正是通过梯度值来区分边缘像素点的 处于边缘附近的像素点与周围像素点的差距很大&#xff08;不然不会有边缘呈现&#xff09;&#xff0c;所以给边缘附近的的梯度之变化很快&#xff0c;通过…

git pull 和 git pull --rebase 区别

git pull 和 git pull --rebase 的主要区别在于如何合并远程分支的更新到当前分支。具体来说&#xff1a; 1. git pull 默认情况下&#xff0c;git pull 相当于执行 git fetch git merge。 它会将远程分支的最新提交拉取到本地&#xff0c;然后将这些提交通过**合并&#xff…

EyeSoothe荣登中国区“健康健美”类第32名! ✨

眼睛疲劳、视力变化、色盲检测、虚拟眼镜试戴……这些问题&#xff0c;EyeSoothe都能帮你解决&#xff01;作为一款全能眼健康应用&#xff0c;EyeSoothe集成了多个强大功能&#xff0c;旨在帮助你更好地保护视力&#xff0c;缓解眼部疲劳&#xff0c;随时关注眼健康。&#x1…

音频接口:PDM TDM128 TDM256

一、 PDM接口 在麦克风&#xff08;Mic&#xff09;接口中&#xff0c;PDM&#xff08;Pulse Density Modulation&#xff0c;脉冲密度调制&#xff09;和I2S&#xff08;Inter-IC Sound&#xff0c;集成电路内置音频总线&#xff09;是两种常见的数字输出接口。 1、工作原理…