[应用相关] ST32之PWM

[复制链接]
720|17
 楼主| 欢乐家园 发表于 2021-3-28 23:22 | 显示全部楼层 |阅读模式
1. 通用定时器PWM概述
  1) ST32PWM工作过程:
1421560609f3d25f22.png
 楼主| 欢乐家园 发表于 2021-3-28 23:23 | 显示全部楼层
工作过程:TIM_xARR(自动重装载寄存器)控制PWM的频率,TIMx_CCRx(捕获比较寄存器)控制PWM的占空比。当CCRxTIM_CNT,IO口输出高电平,如此往复输出(CNT的值一直在0~ARR之间变换),输出PWM波.

评论

注:至于高低电平有效,是根据TIMx_CCER(捕获比较使能寄存器)的CCEP位来决定的  发表于 2021-3-28 23:24
 楼主| 欢乐家园 发表于 2021-3-28 23:24 | 显示全部楼层
2)PWM模式1和PWM模式2 4971960609fa01d183.png
 楼主| 欢乐家园 发表于 2021-3-28 23:25 | 显示全部楼层
 楼主| 欢乐家园 发表于 2021-3-28 23:25 | 显示全部楼层
2. 库函数配置
     1) ①PWM输出库函数
  1. void TIM_OCxInit(TIM_TypeDef* TIM_OCInitTypeDef* TIM_OCInitStruct);

  2.      typedef struct
  3.    {
  4.        uint16_t TIM_OCMode;//PWM模式1或者模式2
  5.        uint16_t TIM_OutputState;//比较输出使能
  6.        uint16_t TIM_Pulse;//  设置CCRx的值
  7.        uint16_t TIM_OCPolarity;//比较输出极性
  8.      }TIM_OCInitTypeDef;

  9. TIM_OCInitStructure. TIM_OCMode=TIM_OCMode_PWM2; //PWM2模式
  10. TIM_OCInitStructure. TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
  11. TIM_OCInitStructure. TIM_Pulse=100;
  12. TIM_OCInitStructure. TIM_OCPolarity;=OCPolarity_High;//输出极性,TIM输出比较极性高
  13. TIM_OC2Init(TIM3,&TIM_OCInitStructure);//根据指定参数初始化外设TIM3 OC2
 楼主| 欢乐家园 发表于 2021-3-28 23:26 | 显示全部楼层
2) PWM输出配置步骤:
 楼主| 欢乐家园 发表于 2021-3-28 23:27 | 显示全部楼层
① 使能定时器3和相关GPIO口时钟:RCC_APB1PeriphClockCmd();
                                                 RCC_APB2PeriphClockCmd();
 楼主| 欢乐家园 发表于 2021-3-28 23:27 | 显示全部楼层
  ② 初始化IO口为复用功能输出:GPIO_Init();
 楼主| 欢乐家园 发表于 2021-3-28 23:28 | 显示全部楼层
③ 这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置,所以需要开启AFIO时钟,同时设置重映射:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENZNLE);
           GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
 楼主| 欢乐家园 发表于 2021-3-28 23:29 | 显示全部楼层
④ 初始化定时器:ARR,PSC等:TIM_OC2Init();
 楼主| 欢乐家园 发表于 2021-3-28 23:29 | 显示全部楼层
⑤ 初始化输出比较参数:TIM_OC2Init();
 楼主| 欢乐家园 发表于 2021-3-28 23:30 | 显示全部楼层
⑥ 使能预装载寄存器:TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
 楼主| 欢乐家园 发表于 2021-3-28 23:31 | 显示全部楼层
⑦ 使能定时器:TIM_Cmd();
 楼主| 欢乐家园 发表于 2021-3-28 23:31 | 显示全部楼层
⑧ 不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2();
 楼主| 欢乐家园 发表于 2021-3-28 23:32 | 显示全部楼层
3. PWM输出实验
  1)TIM3_PWM_Init(u16 arr,u16 psc)    //包含上步①~⑦步骤
 楼主| 欢乐家园 发表于 2021-3-28 23:33 | 显示全部楼层
 楼主| 欢乐家园 发表于 2021-3-28 23:33 | 显示全部楼层
2)主函数:
748316060a1bdd2ded.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

114

主题

1067

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部