STM32定时器PWM
  pbfHt7yP3Hym 2023年11月02日 51 0

个人估计理解这个图片就差不多明白PWM了。用定时器的加减也一样

STM32定时器PWM_初始化

使用PWM的时候要看PWM的相关IO引脚。CH1-CH4 对应OC配置的OC1-OC4

频率计算可以看前面的定时器文章。

PWM配置过程:

1:初始化相关的PWM引脚

2:初始化配置定时器   TIM_TimeBaseInit(TIM3,&TIM3_TimeBaseInitStruct);

3:配置OC  TIM_OC3Init(TIM3,&TIM3_OCInitStruct);这个要看相关引脚

4:开启定时器就可以了。CMD

配置占空比函数 :TIM_SetCompare3(TIM3,0)

选项:开启影子寄存器://void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

计算设置占空比时,是马上写入CCR,还是下一个周期写入。

GPIO配置:

/*

函数名:void rgb_init(void)

功能:初始化GPIOB

形参:

*/

void rgb_init(void)

{

 GPIO_InitTypeDef GPIOB_InitStruct;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//开启GBIOB的时钟

 GPIOB_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//GPIO模式 复用推挽//手册有说明

 GPIOB_InitStruct.GPIO_Pin=GPIO_Pin_0;//引脚选择

 GPIOB_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;//输出速度

 GPIO_Init(GPIOB,&GPIOB_InitStruct);

GPIO_SetBits(GPIOB,GPIO_Pin_0);//初始化时电平置高//电路驱动默认不启动

}

定时器和OC配置及开启(PWM配置)

/*

函数名:void time3_init(void)

功能:初始化定时器3

形参:

*/

void time3_init(void)

{

TIM_TimeBaseInitTypeDef TIM3_TimeBaseInitStruct;

TIM_OCInitTypeDef TIM3_OCInitStruct;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//开启定时器2的时钟

TIM3_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;//定时器不分频  分频 系统时钟/分频

TIM3_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//计时模式 向上

TIM3_TimeBaseInitStruct.TIM_Period=99;//ARR 重装载

TIM3_TimeBaseInitStruct.TIM_Prescaler=719;// PSC预分   实际计算 定时器时钟/arr+1/per+1=时间    1/时间=

TIM_TimeBaseInit(TIM3,&TIM3_TimeBaseInitStruct);

 

TIM_OCStructInit(&TIM3_OCInitStruct);

TIM3_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//设置为PWM模式1,

TIM3_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//PWM口的输出极性//高级定时器有空闲极性。


TIM3_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//开启PWM输出

TIM3_OCInitStruct.TIM_Pulse=0;//CCR的第一次比较值

TIM_OC3Init(TIM3,&TIM3_OCInitStruct);

TIM_Cmd(TIM3,ENABLE);//定时器开始定时

TIM_SetCompare3(TIM3,0);//设置PWM占空比    50和重装载是有点关系的,CCR的值不能超过重装载。 现在是占空比50.

 

// 备注:这个函数会决定CCR的值是马上更新还是下一个周期更新 TIM_SetCompare3(TIM3,50);

//void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

//ARPE:自动重装载预装载允许位 (Auto-reload preload enable)  

//0:TIMx_ARR寄存器没有缓冲;

//1:TIMx_ARR寄存器被装入缓冲器。

}

到此就可以用TIM_SetCompare3函数去设置占空比了,占空比和ARR是有关系的,设置的占空比比可以超过ARR,

PWM可以用到步进驱动器;频率为速度。占空比一般为50,要开启中断。TIM_IT_CCX。比较寄存器的中断,看是那个,选择那个。



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  QtpjMRSUUfXb   2023年12月08日   49   0   0 引脚#include看门狗
  tprTMCWDkFAR   2023年12月07日   31   0   0 头文件#include初始化
  UYSNSBVoGd8R   2023年12月08日   26   0   0 引脚#include#define
pbfHt7yP3Hym