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

【STM32G4 NUCLEO G431RB】2.PWM呼吸灯

[复制链接]
jundao721 发布时间:2019-9-6 17:36
想来定时器PWM实现呼吸灯也是挺有意思的一件事情。其实呼吸灯的原理还是挺简单的,就是不断的调整信号的占空比,来实现信号灯的逐渐变亮变暗的效果。
查看Datasheet,正好板卡上的LED脚PA5对应TIM2_CH1,这样实现起来就方便多了。
这次必须说一下时钟,程序使用的传统的HSI 16M时钟。预分频器16,这样实现100HZ的频率就能计算周期和占空比了。剩下的就都是套路了。
引脚初始化:
  1. GPIO_InitStruct.Pin = GPIO_PIN_5;% c7 V# u, L, i7 A, \9 ]  g1 @
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    , x1 c, ]9 O- W" r
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;+ y' P- u" W) x
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    * b! F) O6 E$ P& M( J
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
    0 C) {# `" |$ Z; t* x

  6. ; B) A/ ~  p+ |9 A* c" W
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;0 d6 f1 y& ?$ Y+ n
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码

$ A7 F6 t8 F) D; u# @& |4 Q3 ~1 D
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();
    # S7 [6 T8 k0 j0 J( b, w1 f6 s3 y
  2. //        TIM_HandleTypeDef htim1;1 C4 K1 `+ o% }9 p0 |6 q
  3.   TIM_MasterConfigTypeDef sMasterConfig;
    + y; z4 d8 s) w* v, W$ Z- [, s
  4.   TIM_OC_InitTypeDef sConfigOC;$ _6 [: N, M; f7 X5 ~4 R& g
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
    & ~) v! c* o  j' M. O
  6. ; Y) W1 n1 E. t9 }" n& ?, T) _9 J
  7.   /* USER CODE BEGIN TIM1_Init 1 */
    # M. c& s, h7 Q& J) y5 w5 b" Y

  8. + ~# O5 S* w" _0 {% z9 {
  9.   /* USER CODE END TIM1_Init 1 */" [. X0 G1 X. K* w% ~2 B, ^
  10.   htim1.Instance = TIM2;! j% R9 Y+ Z, \$ C( c
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;# z5 Q  T: |! G- w' V& g
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
      Y7 Q' l2 H6 w' T; q0 ?
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;0 ^# F$ ^! W2 ]. C) G/ o3 _. \& h
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    + e" l4 J6 g$ S, o8 ], {: Q! v
  15.   htim1.Init.RepetitionCounter = 0;! x3 g* K  H! z7 e) b7 B/ _
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;6 `/ x5 a0 F# I5 Y6 b
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
    ' \/ {) b2 B- Q! a: [0 X* j
  18.   {
    + Z( Y! y# ~- j8 |3 d; V' _
  19.     Error_Handler();- O6 Z! E3 `8 Y. r0 h' E. T7 p
  20.   }" O& S0 _% Z0 r1 G& s
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
      Z' j  K% d: |9 O7 H
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;7 B9 T/ z6 a4 z- {1 e' r/ k3 w  L0 f
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    4 Y* H' c2 I- K
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
    & u( \. p0 N4 R9 D4 x( h2 Z
  25.   {
    4 l' @7 N3 d0 ]
  26.     Error_Handler();
    5 @3 W  c7 B2 n
  27.   }2 ^1 \1 Y1 F, f# S1 w
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;: x6 j. o/ c1 B7 K3 i9 X* {/ M" a
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;
    % Y) |, h; K& o5 a0 t* J; a5 N
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;- d" c6 @! j- v- k( @. f2 }1 A2 P
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
    % E7 t( e* Q7 z" d- Z/ ^4 c
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    8 b$ G4 c% K5 m
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;4 H- c* M  e' l) r- Y& q! h
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;4 Q6 |+ u: G* C$ P% m
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
    5 `7 `; l9 ]5 `  ^+ L% x
  36.   {
    ' k2 C# p" C: L: x
  37.     Error_Handler();9 a( e6 s" |8 Y! e5 I  j
  38.   }( N) b( F' T7 v5 `- C
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码

: H4 z, p! B: x4 f) R+ u5 h" Y
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;
    3 x3 O( p+ _% b# C1 S+ E/ v
  2.                  HAL_Delay(20);6 f, _* v+ W, [# [1 e, l' l6 H
  3.                  PWM_Chang(Value);
      ^5 z, w* K4 y5 M0 X
  4.                  if(Value>=9000)2 K& Y- y+ M6 \8 M
  5.                          flag =1;
复制代码
" y0 d- u0 F) W5 K9 }: l' a
最终效果如图所示:
7 S3 k3 |) b" V, w1 e9 H
# n6 G' P' T" k; P( ]- e( G
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。4 u6 ]) M2 a. Q
不如把示波器的波形图也贴上来
wolfgang 回答时间:2019-11-8 11:24:38
1000HZ吧?
294479435@qq.co 回答时间:2019-11-8 14:10:50
通过调节占空比控制亮度吗
jundao721 回答时间:2019-11-8 14:29:16
00-405686 发表于 2019-11-8 14:10
% K! @0 z, L5 |5 H' F; y" m, B! U" L通过调节占空比控制亮度吗

, W/ g# O( K  e是的

所属标签

相似技术帖

官网相关资源

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