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

【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;$ G1 \, q4 E1 R  c% F* A
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    2 o4 O: _% U$ O
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;
    # n+ v' W# ~* {
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    3 W) ~" O" i+ G$ a. y. S# i9 d( y6 V- v
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;; d* M: L; E; f9 Q
  6. - m% }) z% Q4 J9 l4 r0 b
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;
    3 c# r( W# m2 ?  a& }) r( X
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
& m9 J7 f9 K, p- U4 w
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();
    # E' @4 ^' {* n1 g$ ~9 U1 _
  2. //        TIM_HandleTypeDef htim1;  O7 w, O, b" Y5 W4 @% y9 |
  3.   TIM_MasterConfigTypeDef sMasterConfig;
    ( M1 U# m0 y; s/ H0 N4 Q
  4.   TIM_OC_InitTypeDef sConfigOC;
    * L; W. Q+ `" _" n, e$ Y% m0 R0 I
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
    4 p; h7 d% A8 z) ?& C

  6. , g% N8 X; \  d; n& f7 E
  7.   /* USER CODE BEGIN TIM1_Init 1 */
    - I5 T- d, L  H7 W, X2 T4 m* c
  8. 1 t7 d$ \- e& @- g( a( B! M6 X( l
  9.   /* USER CODE END TIM1_Init 1 */
    + L0 o" _% k! K: `
  10.   htim1.Instance = TIM2;
    1 A0 k: r8 p& `
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;. F1 n  D, _8 [, W$ M4 ?: h3 Y$ i, P; U
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;4 \  y& h8 o( u3 G/ Z5 W
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;1 W& o2 h0 q: P/ s; p6 j9 d
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    , X) ^% o% |) ~$ a6 |/ z
  15.   htim1.Init.RepetitionCounter = 0;( l6 V6 r7 v3 O" |
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;! d' K& c, v- T* C+ `* W8 k
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
      Y5 c* k4 u+ F1 E' A! b
  18.   {
    ! |+ B9 v/ p9 N8 Z' x
  19.     Error_Handler();# q! F# A- Y4 b
  20.   }
    ; H; [3 \  w2 [$ n, l5 \
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    : T  N# g+ s; E7 d2 [
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
    . b0 Z$ V5 `0 H+ _' `
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    9 r/ J- H* I3 x/ S! o) v; e. k
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)2 |/ ]. T) T1 w. ~
  25.   {6 g" g- Q+ G* x" k
  26.     Error_Handler();4 }$ r2 M( Z; f: K, U" K! B4 v
  27.   }
    & {; ~  H8 x* d, W$ C- L0 ~* |: L
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;" z. J( b9 Q7 ^1 L" r: z
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;/ N+ T' S5 [$ ^- S
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;" j! F! ?  f1 L0 O0 P; v
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;; i+ J# [  q& x% x! I
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    - L5 u$ u4 U3 y$ m- Y- y6 r
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;. I$ n7 X8 Y' s. t9 \, p
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
    + Z9 f1 R) }, h
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
    / _/ c+ |% x5 e, r
  36.   {5 E! g4 f, \. s
  37.     Error_Handler();, _3 b$ m. Y8 m8 I* {4 _2 D5 H# Z6 }7 N
  38.   }$ G$ _0 f. C. q) T4 k$ e& L6 G
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码

/ \1 x. M( {' T+ {: e& m$ K
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;
    8 _- F+ d+ L& r3 z9 a" K
  2.                  HAL_Delay(20);* v. Q+ q5 L  o& S5 g8 U3 }
  3.                  PWM_Chang(Value);
    4 ?6 n" c( J# ~  q
  4.                  if(Value>=9000)
    3 `: Y+ D0 `8 `3 |5 h2 {
  5.                          flag =1;
复制代码

. X2 S5 N, E, v/ E
最终效果如图所示:
) R0 s) \! y6 g) _- @$ }

; ~( w" b  _  q6 b2 l- Q# \
VID_H.gif
赞 收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。
! R& F- f6 x+ [2 |& m4 H  U不如把示波器的波形图也贴上来
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
, j) U- C4 {$ D" ?通过调节占空比控制亮度吗

  b# f% S3 m) h/ u% \7 `是的

所属标签

相似技术帖

官网相关资源

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