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

【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;" |+ }6 K- S5 C% E+ ?
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;3 @% X3 G3 h: D& h# y2 D
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;
    . O1 k6 \' B% f2 f# C2 T1 h, J
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    / {% @9 X2 k% X4 ?2 m1 B8 I
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
    6 C  u5 g, a8 ~! W8 V8 u6 ~
  6. 3 u; Z3 v# d/ u0 p9 ]
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;
    ) H1 K  {0 H+ T9 o, v3 s
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码

6 _/ r& z8 p* b- X$ |
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();( [3 |2 N1 Z' |' V% X" Q
  2. //        TIM_HandleTypeDef htim1;6 E1 c9 S) R! E
  3.   TIM_MasterConfigTypeDef sMasterConfig;3 r& U  @  u3 e& V) b
  4.   TIM_OC_InitTypeDef sConfigOC;
    2 o) a: ~/ }2 [
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;$ v3 U: T& F6 M# f2 W9 k

  6. 7 }3 h4 U& g1 ~- X, P5 d0 P
  7.   /* USER CODE BEGIN TIM1_Init 1 */
    / I6 {) t6 B4 ^6 P

  8. 4 l9 U5 l) L" y( l* P
  9.   /* USER CODE END TIM1_Init 1 */1 @4 C/ a! P5 N8 l+ N5 A. O% d
  10.   htim1.Instance = TIM2;
    + ^8 \5 T5 ^( Y7 S
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;& @8 v4 p# ~  I( T
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;* s, M3 W7 j0 p5 K& C! C
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;
    8 N- q2 d3 d) T+ P. }% V4 I
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;: E% u. d8 C& ?. V2 h
  15.   htim1.Init.RepetitionCounter = 0;; W' S* t: ~1 B8 |1 t
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    . C# h3 i3 b) Q5 M% Z
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
    ( [6 A. X5 {' E
  18.   {
    5 K% @5 [0 Z0 o$ u
  19.     Error_Handler();
    ( V) D( q3 r5 Q+ W- {
  20.   }
    # F8 O1 B! H3 d7 s( u! c
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;+ X3 x4 ^8 b5 l$ o! O( G" |
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;+ P1 B8 `0 O! R- }
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    0 a% e: G' X  P) t. H+ v+ u& k6 @
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK); @# S- Y" z& \5 k
  25.   {& q$ i( h; H) L& L- x- B
  26.     Error_Handler();
    * ]$ ~: K; ~9 U( Y
  27.   }3 p( {) f' V. j( \8 W
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;0 c' B; e5 [4 Y
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;
    ; B: k% n8 v4 L5 l8 ~9 T% O
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    $ }) T9 ?, @) j7 E4 P, a
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
    : h- \6 N  @# D- o3 V
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    + a+ s. w0 r8 I- A8 c* h
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
    + n: d; o$ ~9 X$ Z
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
    ! q* G' u: k# y& E. K5 {
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)& L* S! m3 c  ~* A5 Y
  36.   {% X/ K/ p6 {% T2 Y) T4 r! w% s
  37.     Error_Handler();
      d4 P3 y% a. Y8 Y, l, V
  38.   }
    6 Y# g' [( W" H0 e3 X4 G% ?3 K' K2 j
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码
9 S+ @' R; T: C4 j: g/ K; z
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;( _5 x- k  s& U% f1 s  r% ]; [
  2.                  HAL_Delay(20);
    5 l6 x6 {3 e, _% B; V
  3.                  PWM_Chang(Value);
    7 |9 h) Y% D( U! ?) t. X9 I
  4.                  if(Value>=9000)
    ( Z+ l* Y, X# M1 ^% j1 j- f! A& f
  5.                          flag =1;
复制代码

! h+ ?, X% O( k  e
最终效果如图所示:

" K; V+ C& }/ G3 C% Q) K
) h. b  }( u6 }( W- F
VID_H.gif
赞 收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。9 W* }& t! G0 S8 p- b
不如把示波器的波形图也贴上来
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:109 O3 a* @6 m! w6 T* K( \" F! f, q
通过调节占空比控制亮度吗
  H* r3 g2 u+ N
是的

所属标签

相似技术帖

官网相关资源

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