stm32中如何设置PWM通道输出占空比

我们可通过一个例子来学习

eg: 假设我要PWM波的TIM3以1KHZ的频率运行(系统时钟 = 72MHZ)
且此时我们把arr = 99(即百分制),这样方便后面占空比的划分;

因为:TIM3的计数时钟/(arr+1) = 1KHZ
求得 TIM3的计数时钟=100KHZ
(psc+1)=系统时钟/TIM3的计数时钟 = 720

开始求占空比:
占空比和CCR与ARR有关即 *占空比 = (CCR/ARR)100%

例如:
TIM3_CCR1=20
则(TIM3_CCR1/ TIM3_ARR)* 100%= 20%
TIM3_CCR1=50
则(TIM3_CCR2/ TIM3_ARR)* 100% =50%
TIM3_CCR1=72
则 (TIM3_CCR3/ TIM3_ARR)* 100% = 72%
TIM3_CCR1=99.9
则 (TIM3_CCR4/ TIM3_ARR)* 100% = 99.9%

下面设置TIM3_CH1在PA6输出占空比为20%的PWM波:

 void TIM3_PWM_Init(void)
 {
 GPIO_InitTypeDef GPIO_InitStructure;
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 TIM_OCInitTypeDef  TIM_OCInitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); // 使能GPIOB时钟
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
 // 配置IO模式
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;// 复用推挽复用输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);			
 //初始化TIM3的计数模式、分频值、重装载值等
 TIM_TimeBaseStructure.TIM_Period = 99;  //ARR
 TIM_TimeBaseStructure.TIM_Prescaler = 719; //PSC
 TIM_TimeBaseStructure.TIM_ClockDivision = 0;
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;// 向上计数模式 
 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

 /*TIM3_CH1输出占空比为20%的PWM波的定时配置*/
 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;// 选择定时器模式:TIM脉冲宽度调制模式1
 TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;// 比较输出使能
 TIM_OCInitStructure.TIM_Pulse = 20;  //CCR
 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;// 输出极性:TIM输出比较极性高
 TIM_OC1Init(TIM3, &TIM_OCInitStructure);

 TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);// 使能TIM3在OC1上的预装载寄存器
 
 TIM_Cmd(TIM3, ENABLE);//使能TIM3时钟




如有错误请指正!!!

  • 20
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
stm32是一款常用的微控制器,支持通过PWM模块实现互补输出,并且可以通过调整占空比来控制输出信号的电平。 PWM输出又称脉冲宽度调制输出,它是通过调整脉冲的高电平时间和低电平时间的比例来实现模拟信号的一种方法。 在stm32,可以通过使能PWM输出的互补模式来得到一个互补的PWM信号。互补输出意味着有两个相反的PWM信号同时输出,一个是正相位的PWM信号,另一个是反相位的PWM信号。 要调整PWM输出占空比,可以通过改变PWM信号的高电平时间和周期时间来实现。 首先,我们需要配置PWM输出模块的基本参数,如PWM周期,分辨率等。在stm32,可以使用CubeMX来生成相应的配置代码,也可以手动编写配置代码进行配置。 然后,根据具体的需求,可以通过编程的方式修改PWM占空比stm32提供了相应的寄存器用于设置PWM的脉冲宽度。 例如,使用TIMx_CCRx寄存器来设置PWM占空比,其x表示相应的PWM通道,CCR表示脉冲宽度寄存器。可以通过改变该寄存器的值来改变PWM输出占空比。 具体的操作步骤是:首先使能PWM输出,然后在适当的时机改变相关寄存器的值,以改变占空比。最后需要更新PWM输出的状态,使改变生效。 综上所述,我们可以通过适当地配置和改变PWM输出的相关寄存器的值,来实现stm32PWM互补输出,并通过调整占空比来控制输出信号的电平。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值