PWM驱动呼吸灯

发布时间 2023-04-20 13:55:38作者: 整点薯条拯救一切

【PWM初始化函数】

  1. RCC开启时钟。同时开启TIM外设和GPIO外设时钟
  2. 配置时基单元和时钟源选择
  3. 配置输出比较单元(CCR的值,输出比较模式,极性选择,输出使能等)
  4. 配置GPIO,把PWM对应的GPIO口,初始化为复用推挽输出的配置
  5. 运行控制

【查看库函数】

1.配置输出比较模块(OC,Output Compare,输出比较):

void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

2.单独更改CCR寄存器值的函数

void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);

3.高级定时器输出PWM时调用这个函数使能主输出,否则PWM将不能正常输出

void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);

【初始化定时器】

第一步:配置时基单元

 

 关键点1:通用定时器TIM2是APB1总线的外设

 关键点2:需要包括(开启时钟RCC_APB1PeriphClockCmd+设置RCC定时器内部时钟TIM_InternalClockConfig构成内部时钟模式+利用结构体配置时基单元TIM_TimeBaseInit)。

其一,定时器默认是RCC内部时钟工作,除此以外,还有ETR外部时钟,ITRx其他定时器作为时钟源。

其二,结构体配置时基单元需要包括预分频器PSC,自动重装器ARR和计数器CNT

 第二步:配置比较单元

 

 关键点1:要给结构体赋初值,改变个别参数值。不然万一遇到需亚将通用定时器改为高级定时器的情况,会因为个别参数没有赋值而出错。

第三步:配置GPIO口

 

 关键点1:TIM2的OC1通道到底借用了哪个GPIO口

 关键点2:输出方式要使用复用推挽输出

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

开漏/推挽输出引脚的控制权来自于输出数据寄存器,复用开漏/推挽输出的输出控制权则移交给片上外设