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

【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;; ?  o! B1 z% M& _8 {: J% J
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    " I; C$ H( V; X. d4 x
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;
    ; m. v% Z/ A  Z/ L% }  m6 o
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;1 J9 K# T5 K. t2 `; t5 j
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;  ~1 b& R0 C: \) N& x& ]
  6. ! T9 A6 B" L$ J3 w1 M  S. ^
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;! R( E7 ?- ]* m, [
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
5 C; u) J' V' k+ d9 y( T
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();3 m  G* ?  ~$ [4 t, r, J, ~, [
  2. //        TIM_HandleTypeDef htim1;
    : e. s9 C8 q0 [$ P/ n0 W2 @
  3.   TIM_MasterConfigTypeDef sMasterConfig;$ ?$ a" G6 y8 ?* @2 v8 o- e$ U0 I
  4.   TIM_OC_InitTypeDef sConfigOC;) b' [& s) Z& ^! l% y) h; w2 A- l
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
    7 [# q( t5 n. t" I6 Z1 o& Y

  6. 5 a# O1 P% g8 J' j8 }. H( x
  7.   /* USER CODE BEGIN TIM1_Init 1 */
    % r; |/ @+ ~1 q5 X' G  l

  8. . u# c4 ?, F, o/ [3 k; U
  9.   /* USER CODE END TIM1_Init 1 */
    2 G* R' H5 h# q) N4 x0 M
  10.   htim1.Instance = TIM2;# s( Y: w  m' X
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;. {/ O$ J7 @. P, @
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    % n) X4 ]3 C* C. v2 N( o
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;
    ) U$ {  O" P" K) g
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    : j( g- u3 U8 o: Q" }0 R( J5 E
  15.   htim1.Init.RepetitionCounter = 0;
      D8 e- p% w. s9 D
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;$ i1 `5 C: u9 m/ ]1 D( u7 ?, J
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)$ l! R" i+ U  t% ~: x6 \! c5 B
  18.   {
    & f/ k1 n+ }/ s, u/ j7 G& c2 U
  19.     Error_Handler();6 ~' \7 L% F# y! f
  20.   }
    ; x  W, t2 h& o& f# e( |
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;3 M3 K- I8 Y: z8 _4 K
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;6 Y, a1 T7 N9 G5 }
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;4 q2 D" \2 v, @" H8 c4 Z
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
    - }% H. I2 ?' }' {* s
  25.   {
    0 D* ?  r5 M8 j# P, E7 p# {
  26.     Error_Handler();
    9 A$ U0 b* |# Y. l
  27.   }0 {, B. V  V; e
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
    " M5 i% s2 F6 o, c
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;. j! j8 E2 A2 F* [3 G
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;" j! S6 k" K/ z
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
    ' @) ~* P$ v% F5 J, K
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    8 x, w( p; U; y$ f  Y. m
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;* A1 u: v  D" b9 N! R6 I
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
      E. r8 p: O6 {- s
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)( R9 Q3 O) n& @* O" L* A
  36.   {
    0 [4 b& U- C, M' f7 t# i0 A
  37.     Error_Handler();' I! B6 O2 Y2 j3 D5 V) ~) _
  38.   }) O) i* g2 I# n$ _3 ^
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码

0 \6 V9 i) f1 D2 h9 o3 [
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;: u6 a: ~) H+ H" O$ f; |% [
  2.                  HAL_Delay(20);
    ' [2 P- a( s& x  |4 [5 i
  3.                  PWM_Chang(Value);
    + e( }4 H( o& E3 t  {
  4.                  if(Value>=9000)7 F9 W) Y: y5 z7 d2 @. ?* e" K6 H
  5.                          flag =1;
复制代码

! X+ \8 |6 m7 @4 U0 `
最终效果如图所示:

, j* k7 B9 W) E5 q- o5 i
, u7 z3 j8 W' K* H+ A
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。: W' `$ y; b' b  a9 O& Y$ g
不如把示波器的波形图也贴上来
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
3 P1 q% U- ^$ I1 I& T# U: T通过调节占空比控制亮度吗
! l% @. V9 R/ u4 l3 U# ]. |# r. B
是的
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版