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

【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;
    0 ?/ r/ B# R3 L% ^8 O3 K
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;7 {% K* C: I6 Z; x' i7 x: B
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;2 |' X; D0 c% ?
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;2 u8 z. z. l( h7 P0 x
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;  U( \+ N! B5 R$ Z0 }

  6. / I, z9 \% X7 h1 B0 v
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;; i3 s& ]3 \! a1 ?5 X- Y: G( B
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码

8 h$ N4 P/ w7 L) d) V/ \" U( F
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();' G0 O& H  F0 B3 ?" f2 @4 M
  2. //        TIM_HandleTypeDef htim1;( q% X. }- m& [: {: t: U5 X
  3.   TIM_MasterConfigTypeDef sMasterConfig;) ^! `/ a. g$ v3 ~3 Z" _1 A
  4.   TIM_OC_InitTypeDef sConfigOC;% S1 b/ j) b$ y
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;0 F( g5 J+ v/ O) Y% w
  6. & N( U5 J# ^; k
  7.   /* USER CODE BEGIN TIM1_Init 1 */
    5 J5 ^# }1 J& L! B' O0 v6 P( a- M
  8.   o6 t; b/ W, F& a9 V7 V* {# L5 a
  9.   /* USER CODE END TIM1_Init 1 */
    - ?8 \" G. S& b5 g$ |
  10.   htim1.Instance = TIM2;% A& Y+ e* a9 k! Q( x7 v
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;
    1 F; f) s* `/ \" @) [
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    - N& s- n; i. w& N) o
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;
    ! Z( d' t5 O! ^& m8 b2 ~
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;8 X: c! W! Y: w% C  O) g
  15.   htim1.Init.RepetitionCounter = 0;! D0 v$ ]6 P  r& p  ?+ e
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    * p8 h0 D0 ]' ]  `/ J
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)1 ?8 D; v$ b* h9 {# @% V4 B
  18.   {& Q. Q; X( M' ]  p% \
  19.     Error_Handler();
    . f' Z( Y$ J. z, A
  20.   }
    " |3 R$ N5 c4 _" H. H
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;- M' |( k1 z$ G" @$ l" G9 @
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
    5 z, ~! t" Q! S' ~2 n- D; n
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;6 V2 E0 V, ^. s8 H- U1 r
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)# h  B1 U: U/ W  r/ s
  25.   {
    4 k4 O7 E7 ^; e- b7 o1 C8 z( O
  26.     Error_Handler();
    4 @2 `4 Z. W1 X+ q+ @
  27.   }
    7 a# ~! H+ {& `& {  r, w: u; |# {" }1 \
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
    - i. E( C1 Z% Q" R. J5 L1 J/ }
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;
    % o1 r7 B2 g' b
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    9 V6 s# _) v7 Z, j7 R% |  v- |
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
    6 G6 ~6 z. n, i* \& l+ c: |7 U% p
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;5 [3 c9 X% I8 z
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
    " _& |6 a' q  O
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
    ( K9 e$ r7 g# m1 o/ c; Q
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)8 l* V2 v0 e6 B/ a$ ^
  36.   {
    # |% y. }- _( e  g
  37.     Error_Handler();: X6 q( X- Z! C5 z# e  }% k) y
  38.   }
    + M& e3 x, m" n0 J
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码
6 b& f7 I6 l$ c  J7 l
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;
    % p7 x: U" Q8 h
  2.                  HAL_Delay(20);
      A; y$ j" z/ H6 i4 q
  3.                  PWM_Chang(Value);
    ! B0 x5 U' i9 j2 W8 a
  4.                  if(Value>=9000)
      J( @+ d4 A& {( e) D
  5.                          flag =1;
复制代码
# N6 l: `% P8 P) R; O* V: t
最终效果如图所示:

( j: L- F* O- E
( C/ r5 {0 n+ h2 [* w# ^+ l0 ^
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。3 q9 Q) i4 q+ O8 M8 k
不如把示波器的波形图也贴上来
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 ?/ k9 w& A( r0 ~& X/ E
通过调节占空比控制亮度吗

6 s6 l# k* k" s8 r- I2 x0 H是的

所属标签

相似技术帖

官网相关资源

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