STM32定时器输出PWM

本文详细介绍了STM32的PWM输出,包括PWM的定义、用途以及编程细节。在编程中,通过设置TIM14的通道1实现100Hz的PWM,讲解了如何配置定时器周期和占空比,并强调了在输出PWM时不需要中断。同时提到了GPIO配置的注意事项,提供了一个设置TIMx通道1比较值的函数示例。
摘要由CSDN通过智能技术生成

一、PWM

1.定义
英文全称:PULSE WIDTH MODULATION,脉冲宽度调制。
脉冲:频率,方波
宽度:占空比(duty),高电平的宽度

2.用途
(1)控制输出的电压和电流
(2)灯光的亮度
(3)电机

二、编程细节

PWM输出是没有中断触发的,PWM由硬件输出波形,用了中断反而会影响系统定时的效率。

所以,记住以后使用定时器输出PWM都不需要使用到中断

1.如配置STM32F407的TIM14的通道1,10ms即100Hz.

1ms = 0.01s=100HZ
84000000 /8400 = 10000
10000/x = 100
x=100
得到周期8400-1,分频系数10-1

基本配置如下
在这里插入图片描述

2.然后还要再配置定时器的输出功能,可以参考固件库手册的例子TIM_PWMOutPut
这里涉及到了一个寄存器
TIMx_CCMR1:capture/compare mode register 1 --捕获/比较模式寄存器1
在这里插入图片描述
从上图可以看出,我们设置占空比是可以动态调整的,关键就在于设置中间这个比较值的大小。
我们会使用到下面这个函数设置TIMx通道1比较值函数,如果使用到通道2,改1为2即可。
假如100hz内,比较值设置为80hz,那么0-79为高电平,80-100为低电平。

void TIM_SetCompare1(TIM_TypeDef* TIMx,uint16_t Comarex);

	/* PWM1 Mode configuration: Channel1 */
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//pwm模式1,解释如上图所示
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//允许输出
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//有效的时候,输出高电平
	TIM_OC1Init(TIM14, &TIM_OCInitStructure);
	
	TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);//因为要周期性输出,所以要自动重装载初值,不断输出PWM脉冲
	TIM_ARRPreloadConfig(TIM14,ENABLE);//自动重载使能

3.下面讲一下设置gpio的注意事项
(1)将引脚设置为复用功能
(2)将引脚与定时器进行绑定,告知是复用定时器功能

GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_TIM14)

(3)最好是按照固件库手册的例程来写,有些定时器使能需要配置下面这个函数

TIM_CtrlPWMOutputs(TIM1,ENABLE)

4.主函数部分

uint32_t pwm_cmp = 0;//新建一个比较值
添加两个延时函数

while
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值