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

【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;
    % i9 u2 n9 [0 R
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;) X9 O2 I; k- L/ {) g2 x
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;
    $ b6 c$ U# m  J# l6 z" s
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    - B) ~- M% n9 B: h9 B0 h
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;/ v/ H4 Z& ~) A9 {0 L% d
  6. ' ^" A- M, d; _0 Y" Z
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;
      O, U4 h: z! f
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码

. E& Q5 v' p- X6 z) C
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();$ A1 E0 V3 [3 F6 R4 A
  2. //        TIM_HandleTypeDef htim1;
    ; K0 m6 z$ t$ z( h# E& l
  3.   TIM_MasterConfigTypeDef sMasterConfig;1 \- N4 A. f1 d5 R3 k# f
  4.   TIM_OC_InitTypeDef sConfigOC;& C3 k; A1 @; q7 s, p8 q: r
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
    , f2 l) R$ p  W. H# f+ x
  6. ( C& v) }# W  T& d
  7.   /* USER CODE BEGIN TIM1_Init 1 */
      p" T( }+ l4 o7 }0 t# Y

  8. ( B; V( J8 R# j* ~
  9.   /* USER CODE END TIM1_Init 1 */
    ' P1 d& C) n+ u6 u& E
  10.   htim1.Instance = TIM2;
    2 M+ n! }0 y  k! R5 S
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;
    1 ~: i& J- r2 q/ o
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;8 h% r$ F5 H+ k  |( U
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;
    ; U/ }; I; d' q* W2 {0 D
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;5 p+ y; Y' [$ S; Z; L4 W' ^
  15.   htim1.Init.RepetitionCounter = 0;
    5 a" X' {# g' ?
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    . [- L& B7 ~! g- a) w
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
    ' v( r4 o  U) H4 g& s' }
  18.   {, g% @, W% E( X# T2 N) m' Z
  19.     Error_Handler();
    ' e( ~3 ]9 U! u
  20.   }8 j3 L6 x5 [8 O8 D0 Y
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    & z, m0 K2 k, T3 G- n
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;  }! S1 C0 U! W  i  R. ^* _8 e
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    ) A) e, ?5 Z/ Z1 I2 Z+ O4 c" _
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
    7 ]6 k8 V3 S$ g+ J8 }5 V
  25.   {/ R# c& n( H! j3 c, w4 G& v8 l
  26.     Error_Handler();& ~' Y3 ]" N- `; W
  27.   }
    0 W8 e8 l! U0 g7 m1 e3 ~* p6 d2 D
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;" z- w8 c' ?  R' b8 a( I$ `3 f' `
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;! B; U9 X% b# f( m" J
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;  g; \8 t2 j' Y
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
      U' k  y, L+ w& g- n
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    * }/ I2 F3 v  _! u3 X- p- g
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;* j8 M+ H  Y9 b0 u& C5 g) O# P
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
    ; d9 P0 B: G& V3 O. U7 y, m- i
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)3 K7 H1 C( u( C; m$ D8 `' S# _  ^/ U
  36.   {& i3 n. |( ?: e# S. l4 p
  37.     Error_Handler();. J. v: z" n/ G: K! [5 N& y
  38.   }
    1 z3 Y( `- B/ ^- ?4 |  X0 z
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码
5 W8 k0 ~( V% E; }9 x+ ^% a
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;
    ( J: y* n: y+ f0 _* K0 c5 v
  2.                  HAL_Delay(20);
    2 {( G0 _% o3 h5 _; G. @
  3.                  PWM_Chang(Value);/ I# o% m1 ~; |) |' Z
  4.                  if(Value>=9000)) `, l" @$ `, G) R" f1 ^9 K$ w4 M0 `( ^
  5.                          flag =1;
复制代码

( ]: w5 r4 ?  L" G
最终效果如图所示:

, }* i- Q4 J# u& b6 {" O

* u5 K7 P' D. @" r7 W' U
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。
6 k6 ~  h8 K9 S不如把示波器的波形图也贴上来
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
& ]# B- _7 m& j3 z通过调节占空比控制亮度吗
8 S, J; s3 q1 H/ s: {% H
是的

所属标签

相似分享

官网相关资源

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