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

【经验分享】STM32Cube 使用定时器产生PWM输出

[复制链接]
STMCU小助手 发布时间:2022-4-25 21:24
7.4 使用定时器产生PWM输出& g0 y* @$ R# w7 l; A4 Z8 ]
7.4.1 配置PWM输出通道

" h+ ]- A3 D9 A& V返回到引脚配置系统中,这次我们选用TIM3作为PWM的产生定时器,在“TIM3”界面将“Clock Source”设为“Internal Clock”内部时钟,再将通道4设为“PWM Genration CH4”。
4 c& [" Y( F" j选用定时器3通道4的原因是它与开发板LED相连,方便查看PWM情况。/ K. @# q( ?8 `5 k! @" ~' Q3 I. h

, ^, ?% k- }/ ?% x: ]  M A%(}DCX`V$Q5Z~2DWX~_GH2.png % P% k2 p3 k  r$ j

/ k: @: Y* O: o+ s! f) n接着进入TIM3的配置设置中(没显示出来的注意去刷新系统时钟)1 ~. Q# _  Q/ \1 ^; n" `

3 y* A+ Z/ x; S' G Y]90]1L0{KKSV{P}6$C}6.png : D' @8 R( @  k3 z. ]2 Q

+ x' I9 q6 e! T" C' K将系统分频设为480,得到1KHZ频率,将计数设为1000得到1000us的PWM周期。5 @0 ^7 ^2 j+ v0 G
频率 = 定时器时钟 / (Prescaler 预分频 + 1) / (Counter Period 计数值 + 1) Hz
) i6 I. _' |3 C: K占空比 = Pulse ( 对比值) / (C ounter Period 计数值) %
; Y; N- ^  A! r同时开启自动重载防止定时器溢出。点击保存并生成代码。8 X- _8 A9 Z! }( D5 e! w) o; U! p
7.4.2 PWM输出开启
. _: h" k' B* z& J; X( k在“NVIC.c”中,为中断函数初始化分别添加定时器3开启以及PWM占空比的代码即可。
( D7 p5 |) W8 o/ p3 |: z) O8 e$ ?  K. E1 v+ ]& s. x
83d250976efa4737a8e9ea7e110b7e17.png 5 A$ M/ l& O  }
* V  W0 V0 \% M! u  R5 i9 Y
由于开发板是串联红色LED接电源的方式连接,高电平时电流不导通LED为灭,又因为红色LED发出的光强较强,因此需要高占空比才能用肉眼看出差距。因此这里将“HAL_TIM_SET_CMPARE”值设为990,相较于1000的计数值占空比即为99%,使得大部分时间IO口输出为高电平。, b5 o5 C' o* }  A' C8 U: a) x
实际效果:6 T; @8 J7 w$ Q. h: Y! t# N3 R

  Y/ d% I+ o: N- S: @ CNF3LK)EXQUFB)STJSUQO1N.png
& j/ F  M+ s9 ~6 P' e& e* q  c1 y+ @0 [! C- P5 L) k
附上程序:
) @8 Z+ p* l% w
3 v* I6 i5 ?' [
  1. /** Configure pins7 R0 ^" p2 C2 x) T0 d
  2.      PB0   ------> IO_LED0_Pin
    + O" G, b+ h; C6 B6 I
  3.      PB1   ------> &htim3,TIM_CHANNEL_4
    8 `5 W1 g* m7 r3 N( \- ~
  4. */
    5 U5 {5 l$ M2 D3 t5 D( N8 r
  5. #include "NVIC.h"  ~; m. _' E7 L4 n  D2 P, u
  6. void NVIC_Init(){
    # E) J4 Y. H$ @1 F
  7.         HAL_TIM_Base_Start_IT(&htim1);                        //HAL库开启定时器1/ X' h, W; d9 i/ ]' X
  8.         HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);//HAL库开启定时器3,并使用通道4输出PWM
    9 ]/ `5 _: t0 ?# S4 U
  9.         __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, 990);//HAL库修改占空比至99%
      t2 U& ~" N1 z- _
  10. : P3 v* ]1 ^+ n% l
  11. }2 ~* W7 N. j. ?, ?- Z
  12. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {        //中断回调函数
    3 \3 k& x) L5 C; q1 k+ I! g
  13. if (htim->Instance == htim1.Instance) {                                        //判断是哪个定时器产生中断  X' M8 H4 k5 U3 r! y7 }7 m
  14.         HAL_GPIO_TogglePin(IO_LED0_GPIO_Port, IO_LED0_Pin);        //HAL库控制IO_LED0电**转
    4 i% Q( r, ~! N/ W! d+ W
  15. }2 ~8 V: n( N% L0 D& ~$ c1 q" P( Y
  16. }
复制代码

, h; [) m2 h5 I& L. z) N
; b, R+ J5 m; D( ?& n  q6 s+ r2 E8 G; D8 Q5 \
; _7 P/ f' y$ C5 e

: m& F2 h6 v& ?/ t1 z' o" f$ _. W
' U7 X# S2 A3 @" K
赞 收藏 评论0 发布时间:2022-4-25 21:24

举报

0个回答

所属标签

相似技术帖

官网相关资源

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