STM32F4PWM详解

一、PWM功能概述

STM32F4PWM详解_第1张图片

1、CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。
2、CCMR1: OC1M[2:0]位:

  • 【110】:设置PWM模式1。
    在向上计数时,一旦TIMx_CNT < TIMx_CCR1时通道1为有效电平,否则为无效电平。
    在向下计数时,一旦TIMx_CNT > TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
  • 【111】:设置PWM模式2。
    在向上计数时,一旦TIMx_CNT < TIMx_CCR1时通道1为无效电平,否则为有效电平。
    在向下计数时,一旦TIMx_CNT > TIMx_CCR1时通道1为有效电平(OC1REF=0),否则为无效电平(OC1REF=1)。
    3、CCER:CC1P位:输入/捕获1输出极性。
  • 0:高电平为有效电平
  • 1:低电平为有效电平
    4、CCER:CC1E位:输入/捕获1输出使能。
  • 0:关闭
  • 1:打开
    PWM模式:脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。
    在TIMx_CCMRx寄存器中的OCxM位写入‘110’(PWM模式1)或‘111’(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。必须设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最后还要设置PIMx_CR1寄存器的ARPE为,使能自动重装载的预装载寄存器。相应的函数为:
void TIM_OCxPreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

初始化函数:

void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

设置比较值函数:

void TIM_SetCompareX(TIM_TypeDef* TIMx, uint16_t Comparex);

使能输出比较预装载函数:

void TIM_OCxPreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

使能自动重装载的预装载寄存器允许位函数:

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

二、PWM输出配置步骤:

  • 使能定时器14和相关IO口时钟。
    1、使能定时器14时钟:
RCC_APB1PeriphClockCmd();

2、使能GPIOF时钟:

RCC_AHB1PeriphClockCmd ();
  • 初始化IO口为复用功能输出。
GPIO_Init();
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
  • GPIOF9复用映射到定时器14
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);
  • 初始化定时器:ARR,PSC等
TIM_TimeBaseInit();
  • 初始化输出比较参数
TIM_OC1Init();
  • 使能预装载寄存器
TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); 
  • 使能自动重装载的预装载寄存器允许位
TIM_ARRPreloadConfig(TIM14,ENABLE);
  • 使能定时器
  • 不断改变比较值CCRx,达到不同的占空比效果
TIM_SetCompare1();

STM32的PWM配置就介绍到这里!

你可能感兴趣的:(STM32F4,stm32,嵌入式)