ReRain
认证:普通会员
所在专题目录 查看专题
【蓝桥杯嵌入式】一、STM32之LED配置
【蓝桥杯嵌入式】二、STM32之按键+蜂鸣器
【蓝桥杯嵌入式】三、STM32之定时器配置
【蓝桥杯嵌入式】四、关于STM32的定时器配置中时钟分割的问题
【蓝桥杯嵌入式】五、STM32之通用定时器输出PWM波
【蓝桥杯嵌入式】六、关于STM32的定时器配置中时钟分割的问题
作者动态 更多
【蓝桥杯单片机】十二、底层练习
2021-04-20 17:46
【蓝桥杯单片机】十一、第十届蓝桥杯省赛失败总结加试题分析
2021-04-11 20:50
【蓝桥杯单片机】十、第九届蓝桥杯国赛之“多功能测量仪表”
2021-04-01 16:36
【蓝桥杯单片机】九、第九届省赛之彩灯控制器
2021-03-30 18:19
【蓝桥杯单片机】八、第八届省赛之电子钟
2021-03-29 18:41

【蓝桥杯嵌入式】五、STM32之通用定时器输出PWM波

导读:开启新的专栏啦~希望大家可以多多支持呀!!!《蓝桥杯嵌入式》专栏文章是博主在自学stm32期间所做的学习笔记,同时为了备战蓝桥杯比赛,博主在学习期间所用的开发板为蓝桥杯嵌入式专用开发板。菜鸟思维,写的可能会有一点繁琐,但是我觉得学习是要一步一步来的,也希望自己可以把每一点都弄懂。希望可以对初学者有些帮助,如有错误,欢迎评论区留言指正哦~

明确几个点:

  • STM32的四个通用定时器:TIM2、TIM3、TIM4、TIM5。
  • 定时器输出PWM波的几种方式:PWM输出模式、输出比较模式。
  • 每个通用定时器有4路捕获/比较通道,可产生四路PWM波。

一、利用TIM2的通道1和通道2产生PWM波的代码(PWM模式产生PWM波)

void PWM2_Init(u8 duty1, u8 duty2)//利用TIM2的通道1(左电机)和通道2(右电机)产生PWM波
{
	u32 arr;
	
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	
	arr = 1000000 / freq;//计算频率对应的周期值(计数值)
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用强推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	TIM_TimeBaseStructure.TIM_Prescaler = 72-1;//72分频
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
	TIM_TimeBaseStructure.TIM_Period = arr - 1;//周期值,自动重装载计数值
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;//不分频
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//TIM2定时器
    
	//对通道1和通道2配置为PWM输出模式
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//输出模式配置为PWM2模式
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//低极性
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//使能输出状态
	TIM_OCInitStructure.TIM_Pulse = (arr-1) * duty1 / 100;//占空比
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);//TIM2_CH1
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//输出模式配置为PWM2模式
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//低极性
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//使能输出状态
	TIM_OCInitStructure.TIM_Pulse = (arr-1) * duty2 / 100;//占空比
	TIM_OC2Init(TIM2, &TIM_OCInitStructure);//TIM2_CH2
	
	TIM_Cmd(TIM2, ENABLE);//使能TIM2
}

二、代码说明

1、PWM模式下4个通道产生的PWM波的频率只能是一致的。

2、关于arr = 1000000 / freq;//计算频率对应的周期值(计数值)这行代码的说明:定时器的设置是72分频定时器输入频率为72MHZ,那么对应的机器周期就是72/72MHZ计一个数的时间为一个机器周期,计数频率是freq,那么计数周期就是1/freq计数周期内的计数个数就等于:计数周期/机器周期,也就是1000000/freq。

3、注意端口模式为复用推挽输出,PA0和PA1是具有复用功能的GPIO口,所以要设置为复用推挽输出

4、PWM输出模式配置中,输出模式配置与极性配置:常用搭配TIM_OCMode_PWM1和TIM_OCPolarity_High、TIM_OCMode_PWM2和TIM_OCPolarity_Low,如此搭配,输出的是正逻辑(比如设占空比为60%,则高电平持续时间占60%)下面是图示(图上的占空比就是高电平占的时间)。 正逻辑:TIM_OCMode_PWM1和 TIM_OCPolarity_HighTIM_OCMode_PWM2和TIM_OCPolarity_Low

负逻辑:TIM_OCMode_PWM1和 TIM_OCPolarity_LowTIM_OCMode_PWM2和TIM_OCPolarity_High

输出模式:

PWM1:CNT<CRRx为有效电平,CNT>CRRx为无效电平。

PWM2:CNT>CRRx为有效电平,CNT<CRRx为无效电平。 

极性:

高极性:高电平1为有效状态(active),低电平0为无效状态(inative)

低极性:低电平0为有效状态(active),高电平1为无效状态(inactive)

希望大家可以多多点赞收藏,也不要忘记点一个大大的关注哦~感谢大家!!

祝您2021大吉大利,升职加薪~~

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 158
收藏 154
关注 302
成为作者 赚取收益
全部留言
0/200
  • dy-SgCRSAWd 2021-04-29 21:24
    对我很有帮助
    回复
  • dy-lZg1ikQS 2021-04-29 21:04
    请教一下
    回复
  • dy-6jaMNnKj 2021-04-29 11:05
    思路清晰,受益匪浅
    回复
  • dy-uP6R9bIG 2021-04-28 22:22
    感谢分享
    回复
  • dy-faUxdNVf 2021-04-28 22:16
    精彩,很多东西还没接触到
    回复
  • dy-ARsdJtu2 2021-04-28 16:42
    对我很有帮助
    回复
  • dy-PfBg9fHc 2021-04-28 15:18
    讲的真好!
    回复
  • dy-BntE74dS 2021-04-27 11:38
    比论文强一万倍
    回复
  • dy-AstN3YsZ 2021-04-27 11:25
    学习了
    回复
  • dy-kWQSvfcY 2021-04-26 11:28
    学习了
    回复
  • dy-IRhxrrTG 2021-04-26 11:07
    佩服楼主
    回复
  • dy-EWZRbIzj 2021-04-22 11:27
    什么时候更新
    回复
  • dy-HlVFyepq 2021-04-21 20:52
    围观学习
    回复
  • dy-fEyVNAbF 2021-04-21 15:46
    感谢博主!
    回复
  • dy-cfgdwamL 2021-04-21 12:59
    感谢分享
    回复
  • dy-ayNTwT3L 2021-04-21 12:29
    大开眼界,真是好文
    回复
  • dy-LiDZV1Qr 2021-04-20 18:10
    大开眼界,真是好文
    回复
  • dy-rfrUF2fp 2021-04-20 17:03
    感谢分享
    回复
  • dy-bHww98js 2021-04-19 23:03
    期待继续
    回复
  • dy-FPtpScGU 2021-04-19 09:07
    比论文强一万倍
    回复