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

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

[复制链接]
STMCU小助手 发布时间:2022-1-22 18:54
STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定, f% Q  C: d7 T; ?: y2 g
时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 48 s/ M* U# S8 C4 i5 S' t; R& Y( T
路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出!
  要使 STM32 的通用定时器 TIMx 产生 PWM 输出,分别需要用到3个寄存器:捕获 /比较模式寄存器# ]4 }6 H: [  Q6 W) a
(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。
0 }, G+ f0 f6 Z% E9 m, K4 n, }
这几个寄存器在《stm32中文参考手册》288页到293页有
1) 开启 TIM3 时钟以及复用功能时钟,配置 PB5 为复用输出。
5 Q( Y4 y. y9 P+ ]
  1. <div align="left">RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器 3 时钟
    ! D* E$ F7 }! Q% {6 l5 F; S" Y
  2. </div><div align="left">RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //复用时钟使能</div>
复制代码
4 v0 c1 u3 A, e( H; ^+ O
5 ]: @) g  M: L- P3 K7 C4 x
2) 设置 TIM3_CH2 重映射到 PB5 上。
, _8 Z& Y' z! s# m6 R) w
& N0 B$ s- K% Q, z. M
  1. <div align="left">GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
    3 ?9 z3 \3 `- A2 D# \$ y( x' n
  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; //复用推挽输出/ u; J( H4 m, q
  3. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHZ
    $ U9 ]7 Y# \5 d) M. a
  4. GPIO_Init(GPIOB, &GPIO_InitStructure); //①初始化 GPIO</div>
复制代码

! |3 n- w1 s$ a# o7 n1 G& O- T: i
3) 初始化 TIM3,设置 TIM3 的 ARR 和 PSC 。
$ s! D* o" A3 [; ^3 ~
  1. TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载值
    " h, n+ ^: b1 T9 V2 w' g( ~" l5 F) r: x
  2. TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值
    + E6 u& E+ q9 R, T
  3. TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    ) q$ q8 i; F* R3 l! Z  Q# w, Z5 b! a
  4. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
    0 J& z6 r8 Y0 w
  5. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化 TIMx 的
复制代码
% \, y2 C) K8 S8 X) B- ~9 R" N; C- W
4) 设置 TIM3_CH2 的 PWM 模式,使能 TIM3 的 CH2 输出。3 h+ p" p/ A7 K1 o
  1. <div align="left">void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
    3 y% \1 H4 G: d! P( N
  2. </div>- z/ Z+ q, y) |% S1 f
  3. <div align="left">TIM_OCInitTypeDef TIM_OCInitStructure;9 n2 r- a( M3 L! T2 n- T
  4. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2 ; 模式1是输出比较
    4 y, a7 T6 u7 R# e0 ?8 X* }
  5. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能" m2 m; ]; X2 o+ I7 {
  6. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高;还有一个是输出极性低
    , z" J9 q% w! Q5 B, U# w; O! P- {
  7. TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC2</div><div align="left">//TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能预装载寄存器</div>
复制代码
+ O: k  S: _+ ~7 _$ ^0 @
5) 使能 TIM3。- ?' N" v, g  V0 P  u6 O* t
TIM_Cmd(TIM3, ENABLE); //使能 TIM3
5 n. ?9 G  \9 k% Z8 S% p% Q, Q
6) 修改 TIM3_CCR2 来控制占空比。
0 ^/ u3 ]. q" ?1 d* m8 @& tvoid TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);

0 S1 ?) R3 @5 X4 C
赞 收藏 评论0 发布时间:2022-1-22 18:54

举报

0个回答

所属标签

相似技术帖

官网相关资源

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