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

【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;4 l8 R) p( P' P4 c4 w: ]
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    # n# D9 T  r, }9 @& j/ A- n% e
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;
    % q$ G* L; f7 |  b2 x3 K/ |
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    + m" Z" l! l& u4 B
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
    & S) q! y( j' W6 b5 e, q, t

  6. ( C/ j. }0 U4 `) u( Q# B
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;0 k. o- _7 h: I% D5 c
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
- H2 X) Z) D" e8 ?; }
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();
    # L# [: E8 c; X) v* m# u
  2. //        TIM_HandleTypeDef htim1;$ s' N1 v' b# R
  3.   TIM_MasterConfigTypeDef sMasterConfig;4 [' d) ]8 {/ o- {* g1 k
  4.   TIM_OC_InitTypeDef sConfigOC;5 }+ i( p0 s) p. U1 _
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
    . x7 w7 _4 c3 R+ E( {7 H
  6. % j6 k, y5 n+ X3 V$ u; I
  7.   /* USER CODE BEGIN TIM1_Init 1 */' v1 r3 ]( T6 t- b

  8. % s1 D7 r- g' Q2 x4 p
  9.   /* USER CODE END TIM1_Init 1 */2 C( v! Z: W$ M, N3 ?
  10.   htim1.Instance = TIM2;# ], C  y+ q* \6 P) i4 f
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;
    / B: S0 I: z/ K# t
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;& M1 ^8 J- H: {' G) A5 v
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;9 c# Z$ d6 `- ?& ?( B% @5 S+ j
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    . U) @4 ~, {6 T! H1 s" g
  15.   htim1.Init.RepetitionCounter = 0;; |+ N: P# t% d( {
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    - |& m* P) H- k* J5 F  t/ G) i
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)0 m! V! t. @6 `  u; H2 w6 K0 X: g" Z
  18.   {
    1 @9 t$ u/ P  d2 H
  19.     Error_Handler();6 W) {8 h* p# ~$ Q: M0 _; ]( p
  20.   }
    ! f3 [3 R9 i! Q. k. S: o$ N. t6 C: b
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    + r8 E+ p7 T9 Z" L9 N
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
    9 Q8 N" n& K/ A9 h+ a* m" Q+ V
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    $ L8 y* y$ X6 f& p6 B
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)& G' }/ Q5 o/ e4 j6 X
  25.   {
    7 ^4 n5 x$ F0 l0 O! m, x& M
  26.     Error_Handler();
    6 z) k" `' r. s0 I- z" w& o
  27.   }
    ; G, l+ Q0 E2 K3 U! y5 o9 N
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;2 @- I" ~2 j5 E7 f5 F4 _- R. P5 T
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;
    $ v/ i" W2 r6 U! p
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;5 s  }* h/ a  p9 z5 V- J
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;- ?. }" s+ M1 |! n1 c- T( g
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;; I* M5 B& ~: l7 @
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;, D, b* }  @/ ~9 i; P" p
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
    8 I2 a+ I9 R% s. _
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
    ) G- [7 E! m# a# u
  36.   {0 C5 k1 P1 f6 q' L8 i; d
  37.     Error_Handler();9 c& S0 W. `8 _2 K0 p
  38.   }
    4 L, K* V/ f: i1 t( y' S4 q
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码

' A: ?; [# g  q( ]0 l. D
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;' u2 w# ]) d5 ~. o: T! ]* b, `
  2.                  HAL_Delay(20);. y# @. h" ], d+ f
  3.                  PWM_Chang(Value);
    2 `8 d0 o' `( [% [2 Q) B
  4.                  if(Value>=9000)- s' p; J9 E5 s% I, O
  5.                          flag =1;
复制代码
* A7 K$ }& a' F8 L. d' q- B) S5 }
最终效果如图所示:

6 _( E8 A* W5 l# ^2 h

% b0 U! F& ?' |5 [/ L
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。: E- ~) U7 |; y" |% _' z
不如把示波器的波形图也贴上来
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
4 |! F. K6 p/ F$ R4 J' i( B, j0 b通过调节占空比控制亮度吗
& [5 _" z2 Z/ X
是的
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版