你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 PWM输出(映射)

[复制链接]
STMCU小助手 发布时间:2022-1-22 18:54
STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定
时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4
路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出!
  要使 STM32 的通用定时器 TIMx 产生 PWM 输出,分别需要用到3个寄存器:捕获 /比较模式寄存器
(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。

这几个寄存器在《stm32中文参考手册》288页到293页有
1) 开启 TIM3 时钟以及复用功能时钟,配置 PB5 为复用输出。
  1. <div align="left">RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器 3 时钟
  2. </div><div align="left">RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //复用时钟使能</div>
复制代码


2) 设置 TIM3_CH2 重映射到 PB5 上。

  1. <div align="left">GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
  2. </div><div align="left">GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //端口PB5</div><div align="left">GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
  3. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHZ
  4. GPIO_Init(GPIOB, &GPIO_InitStructure); //①初始化 GPIO</div>
复制代码

3) 初始化 TIM3,设置 TIM3 的 ARR 和 PSC 。
  1. TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载值
  2. TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值
  3. TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  4. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
  5. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化 TIMx 的
复制代码

4) 设置 TIM3_CH2 的 PWM 模式,使能 TIM3 的 CH2 输出。
  1. <div align="left">void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
  2. </div>
  3. <div align="left">TIM_OCInitTypeDef TIM_OCInitStructure;
  4. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2 ; 模式1是输出比较
  5. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  6. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高;还有一个是输出极性低
  7. TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC2</div><div align="left">//TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能预装载寄存器</div>
复制代码

5) 使能 TIM3。
TIM_Cmd(TIM3, ENABLE); //使能 TIM3

6) 修改 TIM3_CCR2 来控制占空比。
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);

收藏 评论0 发布时间:2022-1-22 18:54

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版