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

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

[复制链接]
STMCU小助手 发布时间:2022-1-22 18:54
STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定) S& y' F$ b; E  p" r5 g+ A6 l4 ~
时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4
; `: e/ l6 Z. p! C4 V7 X路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出!
  要使 STM32 的通用定时器 TIMx 产生 PWM 输出,分别需要用到3个寄存器:捕获 /比较模式寄存器
! @0 H, i: J& ^- M3 Q, f(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。! Y; w8 w  {2 y' Q
- [5 q( o1 e# T8 j3 A8 j' s
这几个寄存器在《stm32中文参考手册》288页到293页有
1) 开启 TIM3 时钟以及复用功能时钟,配置 PB5 为复用输出。
/ i2 k. e8 s% C" y# @
  1. <div align="left">RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器 3 时钟
    + n' p! w1 s" {$ B& b& \/ V; a
  2. </div><div align="left">RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //复用时钟使能</div>
复制代码

; k) h) }6 a  N. \/ H. q3 _, ^

! `* w1 g* a% p- [4 i
2) 设置 TIM3_CH2 重映射到 PB5 上。
+ u* K7 p5 J8 Q) o. E

1 E' E2 K" |/ N- F, R
  1. <div align="left">GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);/ v( ~4 ~& J) J( d+ p- {' `% P; S; v9 Z
  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; //复用推挽输出5 ~: x6 |1 P, U8 s# _
  3. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHZ
    * K4 e# i) ?+ A+ ~
  4. GPIO_Init(GPIOB, &GPIO_InitStructure); //①初始化 GPIO</div>
复制代码

6 v+ U: w1 J0 r. t8 @0 e
3) 初始化 TIM3,设置 TIM3 的 ARR 和 PSC 。
: ]+ |2 B- H7 ^5 e( ^
  1. TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载值
    8 k7 X7 e7 U% p
  2. TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值6 b. c* @) u0 f! r: g
  3. TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    5 O+ R; R, r" d  q0 K0 q. m8 f
  4. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
    0 i1 S+ v" `) _& S, m& j
  5. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化 TIMx 的
复制代码
' E: D( b% M$ |4 X3 g
4) 设置 TIM3_CH2 的 PWM 模式,使能 TIM3 的 CH2 输出。
3 ?3 c  C! g& K' r
  1. <div align="left">void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
    . u. O- G" P1 \) }
  2. </div>
    * g& k6 b& R# J3 o! j# @
  3. <div align="left">TIM_OCInitTypeDef TIM_OCInitStructure;
    $ n( ]/ ~# N; i$ G! t0 r8 v
  4. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2 ; 模式1是输出比较
    7 b! w# U& i9 ^
  5. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    ' M. P9 K4 ?# R
  6. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高;还有一个是输出极性低$ P( G* e+ F$ D3 Y/ ]" \$ S
  7. TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC2</div><div align="left">//TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能预装载寄存器</div>
复制代码
+ Z8 r* b" t0 Q
5) 使能 TIM3。  V! i* A5 j/ D" v- Y, ?  E- E
TIM_Cmd(TIM3, ENABLE); //使能 TIM3

/ p6 O" J  B7 E2 O* I6) 修改 TIM3_CCR2 来控制占空比。
( a$ m& S$ p# S: f; _! evoid TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);

9 y, T( N2 W; [* A
赞 收藏 评论0 发布时间:2022-1-22 18:54

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版