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

【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;. k$ X. z( D' \" C( ^
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    + ~+ d" d5 K4 d# p9 R- f. U5 H
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;
      o- e0 n; F% u9 q& \: S( Z
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;1 ?3 v. O& Y& P( g. e  I
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
    , ?) R; n& h" [  b

  6. ' y8 s$ I! k; J) C
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;
    4 q) ^9 g# b  }2 \3 `
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
# X5 s% w" G- J9 ?: W" ~
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();
    0 _, J  J; q3 T9 O8 O5 J
  2. //        TIM_HandleTypeDef htim1;) v. [2 w# Q; T, Y& m, C8 m7 p
  3.   TIM_MasterConfigTypeDef sMasterConfig;
    % ~- Y4 `  E4 t9 h0 X* j
  4.   TIM_OC_InitTypeDef sConfigOC;
    8 L' B) W9 ~& Z& t
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;: E2 ^/ E8 x" i( ?

  6. 6 q& n7 u- [. t* p
  7.   /* USER CODE BEGIN TIM1_Init 1 */# k; Q% w! J2 F/ B! h$ r

  8. ! c& [: _3 M: E9 w$ Y9 l: [
  9.   /* USER CODE END TIM1_Init 1 */
    9 d8 u3 L/ J! J6 ]% P
  10.   htim1.Instance = TIM2;; v6 w2 L0 ^' h# }7 j$ I" t
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;7 y$ J* i& I7 ~4 f, J9 _4 |
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;! @4 v% g! j  F0 A
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;
    * C: ], F+ c$ {$ P9 T8 j0 T( l
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    * {  @/ B% B0 @) ]* }& d
  15.   htim1.Init.RepetitionCounter = 0;
    8 ^  O+ A6 R2 r  F8 `/ N
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;3 Z4 A3 d* J5 A
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)# `8 h$ z0 s4 l# c' J: A/ P$ L
  18.   {  q, n4 x3 t8 J7 U
  19.     Error_Handler();
    * i0 V& ]( R7 t
  20.   }( x5 J0 y) A% M/ k3 z
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;2 E# X0 f* c/ ]& ]; @. M
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;$ b4 H( j0 p$ Y2 w. y2 A' U  N5 U
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;& p: e( O0 p9 y; @- |6 D7 \
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)/ r, Z6 \# t9 s7 v2 V; @
  25.   {* _/ e0 P& z; q' I
  26.     Error_Handler();
    * x5 v' R- E5 d# s
  27.   }
    $ X( @( l( U; {2 S% i4 S/ @
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
    3 L# F+ V0 U6 v0 L
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;; P: V' R8 u  J3 E5 G
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;/ O% r: ?# F) \) S; C: X( ~
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;% v% {8 b# ~9 z- J* M
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    " t/ V2 Q9 h3 d" _0 H8 H9 i
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;1 X. ?, y' C. ]1 j
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
      q, B+ x# V5 Q
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
    # q0 B* q2 G9 s( R
  36.   {
    $ x/ R' G3 k. I& @% H
  37.     Error_Handler();, C  ^+ |, \) i) m+ g5 ]
  38.   }
    , `3 G1 o; @. p$ f/ S' i
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码
. @* Q- R0 m: [3 D7 m4 k2 R
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;
    " }: w7 c! g9 L7 t+ G% a
  2.                  HAL_Delay(20);/ O+ H- U/ ^) R2 w5 y
  3.                  PWM_Chang(Value);+ @, X) h& B$ L: `
  4.                  if(Value>=9000)
    1 ]5 G3 {$ X; c* w$ E
  5.                          flag =1;
复制代码
0 n2 P' ^9 P* b: E
最终效果如图所示:
  @. F( V  M/ l6 h& k
- Q, i+ F% y5 k7 [  O
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。  x. j9 Q3 {0 Y7 I9 ?% L1 G2 x
不如把示波器的波形图也贴上来
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:100 E/ `1 b; _% g0 f' i- K: A
通过调节占空比控制亮度吗

# V$ ^* f! w7 x是的

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版