网站正在备案中,产品开发管理系统,做网站具体流程步骤,网站的ftp管理权限是什么意思目录
STM32 PWM工作过程编辑 STM32 PWM工作过程#xff08;通道1为例#xff09;
PWM模式1 PWM模式2 向上计数配置说明编辑
STM32 定时器3输出通道引脚
自动重载的预装载寄存器
编辑
PWM输出相关库函数
输出比较初始化函数#xff1a;
设置比较值函数通道1为例
PWM模式1 PWM模式2 向上计数配置说明编辑
STM32 定时器3输出通道引脚
自动重载的预装载寄存器
编辑
PWM输出相关库函数
输出比较初始化函数
设置比较值函数
使能输出比较预装载
使能自动重装载的预装载寄存器允许位 STM32 PWM工作过程 STM32 PWM工作过程通道1为例
CCR1:捕获比较(值)寄存器x1,2,3,4):设置比较值。CCMR1: OC1M[2:0]位 对于PWM方式下用于设置PWM模式1【110】或者PWM模式2【111】
CCER:CC1P位输入/捕获1输出极性。0高电平有效1低电平有效。CCER:CC1E位输入/捕获1输出使能。0关闭1打开。
PWM模式1 PWM模式2
寄存器TIMx_CCMR1的OC1M[2:0]位来分析 向上计数配置说明 这里的OCXREF是比较的结果在PWM模式一下向上计数当计数值CNT比较值CCR时输出有效值。 这里的CCxIF是终端触发标志位。 STM32 定时器3输出通道引脚 自动重载的预装载寄存器 void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);简单的说 ARPE1,ARR立即生效。原来本来是向上计数到36然后溢出再回到0。
如果计数中间修改了ARR的值比如修改到了F5那么再计数到F5时会立即溢出。 APRE0ARR下个比较周期生效。原来本来是向上计数到36然后溢出再回到0。
如果计数中间修改了ARR的值比如修改到了FF那么再计数到FF时不会溢出他要到下个比较的周期再到FF才会溢出。
PWM输出相关库函数
输出比较初始化函数
void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
typedef struct
{uint16_t TIM_OCMode; //PWM模式1或者模式2uint16_t TIM_OutputState; //输出使能 OR失能uint16_t TIM_OutputNState;uint16_t TIM_Pulse; //比较值写CCRxuint16_t TIM_OCPolarity; //比较输出极性uint16_t TIM_OCNPolarity; uint16_t TIM_OCIdleState; uint16_t TIM_OCNIdleState;
} TIM_OCInitTypeDef;实例
TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM2; //PWM模式2
TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure. TIM_Pulse100;
TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC2Init(TIM3, TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2设置比较值函数
void TIM_SetCompareX(TIM_TypeDef* TIMx, uint16_t Compare2);使能输出比较预装载
void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
使能自动重装载的预装载寄存器允许位 void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);总结 ---PWM输出配置步骤 ① 使能定时器3和相关IO口时钟。 使能定时器3时钟RCC_APB1PeriphClockCmd(); 使能GPIOB时钟RCC_APB2PeriphClockCmd(); ② 初始化IO口为复用功能输出。函数GPIO_Init(); GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; ③ 这里我们是要把PB5用作定时器的PWM输出引脚所以要重映射配置 所以需要开启AFIO时钟。同时设置重映射。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); ④ 初始化定时器ARR,PSC等TIM_TimeBaseInit(); ⑤ 初始化输出比较参数:TIM_OC2Init(); ⑥ 使能预装载寄存器 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); ⑦ 使能定时器。TIM_Cmd(); ⑧ 不断改变比较值CCRx达到不同的占空比效果:TIM_SetCompare2();