32单片机--PWM

PWM----脉冲宽度调制

在具有惯性的系统,可以通过对一系列脉冲的宽度进行调制,来等效的获取所需要的模拟参量,常应用于电机控速等领域

PWM参数:

频率:1/Ts  占空比=Tno/Ts   分辨率=占空比变化步距

 代码部分

第一步:RCC开启时钟---TIM外设和GPIO外设的时钟打开

第二步:配置时基单元,包括时钟源选择,时基单元配置

第三步:配置输出比较单元CCR,包括CCR的值,输出比较模式,极性选择,输出使能这些参数,结构体统一配置

第四步:配置GPIO,把PWM对应的IO口,初始化为复用推挽输出的配置

第五步:运行配置,启动计数器

  • 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);

配置输出引脚模块,对应第三步配置比较单元,一个函数配置一个单元

参数1:选择定时器  参数2:结构体,输出比较的参数

  • void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct)

给输出比较结构体配置默认值

 

  • 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); 

单独更改CCR寄存器值的函数比较重要,更改占空比就要用到这个

  • void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
  • void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
  • void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
  • void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);

配置强制输出模式,运行中暂停输出波形并且强制输出高或者低电平

  • void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
  • void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
  • void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
  • void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);

配置CCR寄存器预装功能,就是影子寄存器,写入的值不会立即生效,而是在更新事件才会生效

  •  void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
  • void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
  • void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
  • void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);

配置快速使能

  • void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
  • void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
  • void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
  • void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); 

外部事件清楚REF信号

  •  void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
  • void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
  • void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
  • void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
  • void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
  • void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
  • void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

单独设置输出比较的极性 

带N的是高级定时器互补通道的配置

在结构体初始化函数也可以设置极性,作用一样

  •  void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx);
  • void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN);

单独修改输出使能参数

  • void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode);

选择输出比较模式,单独更改输出比较模式函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值