STM32F1的TIM输出比较(PWM)

目录

1.  OC(Output Compare)输出比较

2.  PWM简介

3.  输出比较通道(高级)

4.  输出比较通道(通用)

5.  PWM基本结构

6.  配置介绍

6.1  输出比较模块配置

6.2  给输出比较结构体赋一个默认值

6.3  配置强制输出模式

6.4  配置CRR寄存器的预装功能

6.5  配置快速使能

6.6  清除手册有介绍

6.7  单独设置输出比较极性

6.8  单独修改输出使能

6.9  选择输出比较模式

6.10  单独更改CCR寄存器值

7.  程序配置

7.1  初始化结构体

7.2  给结构体赋初始值

7.3  输出比较模式

7.4  输出比较极性

7.5  输出状态(使能还是失能)

7.6  CCR值设定

7.7  整体配置


1.  OC(Output Compare)输出比较

        输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形。

        每个高级定时器和通用定时器都拥有4个输出比较通道

        高级定时器的前3个通道额外拥有死区生成和互补输出的功能。

2.  PWM简介

天下武功,唯快不破,增加频率,频闪。

PWM(Pulse Width Modulation)脉冲宽度调制

        在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域。

PWM参数:      频率 = 1 / TS            占空比 = TON / TS           分辨率 = 占空比变化步距

3.  输出比较通道(高级)

老规矩,这个先放一放,暂时不懂

4.  输出比较通道(通用)

整体流程

输出控制器的工作模式

5.  PWM基本结构

以PWM模式1为例:

CNT<CCR时,REF置有效电平(高电平)

CNT≥CCR时,REF置无效电平(低电平)

根据上图,我们就可以配置占空比

假如CCR的大一些,REF高电平时间增多,占空比增大

假如CCR的小一些,REF高电平时间减少,占空比变小

        从图中,我们可以看出CCR的值,应该设计在0~ARR+1这个范围内,若是CRR大于ARR+1则相当于Duty>1,即占空比大于1,也就是>100%,相当于占空比一直是100%。

        ARR越大,CCR的取值范围就越大,分辨率就越大。

6.  配置介绍

6.1  输出比较模块配置

void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

TIM_TypeDef* TIMx:选择定时器

TIM_OCInitTypeDef* TIM_OCInitStruct:输出比较参数

6.2  给输出比较结构体赋一个默认值

<
  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
定时器8输出PWM的代码如下所示: ```c #include "PWM.h" int main() { u16 led0pwmval = 0; u8 dir = 1; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // NVIC初始化分组 LED_Init(); // LED初始化 delay_init(); // 延时初始化 TIM_PWM_Init(899, 0); // 不分频。PWM频率=72000000/900=80Khz while(1) { delay_ms(10); if(dir) { led0pwmval++; } else { led0pwmval--; } if(led0pwmval > 300) { dir = 0; } if(led0pwmval == 0) { dir = 1; } // 往CCR2寄存器写入不断变化的led0pwmval值,调整比较值,就能输出不断变化的占空比了 TIM_SetCompare2(TIM8, led0pwmval); } } ``` 在这段代码中,我们使用了定时器8来输出PWM信号。首先,我们需要进行一些初始化工作,包括设置NVIC分组、LED初始化和延时初始化。然后,我们调用TIM_PWM_Init函数来初始化定时器8,设置不分频,使得PWM频率为80KHz。接下来,我们进入一个循环,每隔10毫秒调整led0pwmval的值,从而改变占空比。最后,我们使用TIM_SetCompare2函数将led0pwmval的值写入CCR2寄存器,实现PWM输出。 #### 引用[.reference_title] - *1* [STM32F103C8T6---定时器1&定时器8输出PWM信号注意事项](https://blog.csdn.net/weixin_51134981/article/details/129971600)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32F1定时器-PWM输出](https://blog.csdn.net/weixin_46251230/article/details/126796005)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光の尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值