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

【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;: O6 b1 ?. G6 G: i; M
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    8 ^4 w* e9 a# I  S- ^& _
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;7 _& h+ J) w, P# s  _# h
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;- a' r1 a4 _6 a$ b0 j, ]& u: j
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;" d2 D# u& u$ [$ [
  6. : p" v. s1 }$ l* U7 \- H/ I
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;
    : `, t6 F+ U" m* n( k( X
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码

7 r. v: w- g1 `' r+ g3 M, A
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();
    % D7 v# l7 d5 r% b  ^( o
  2. //        TIM_HandleTypeDef htim1;
    $ R. Y9 L; E$ q# n+ Q# Q3 V
  3.   TIM_MasterConfigTypeDef sMasterConfig;
      ~  x) m/ D7 w) W# \2 E3 A6 q2 K
  4.   TIM_OC_InitTypeDef sConfigOC;
    ' |: u* I2 ]9 S4 ~7 g$ m4 \
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;/ e4 c/ L4 A1 v7 M) N$ _: C# j
  6. 8 ^, b# c4 v$ I6 I* j& u
  7.   /* USER CODE BEGIN TIM1_Init 1 */
    : r& x$ J8 J, X. @+ i  g
  8. 3 j; J9 f! z& G
  9.   /* USER CODE END TIM1_Init 1 */& E& P" w" I) R' _9 B' O
  10.   htim1.Instance = TIM2;" I% G3 a5 T0 I7 _/ G
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;2 M" W( z: g4 q! K& ?3 S
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;0 s3 l/ y: \% ?4 O3 Q' l
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;; D: a# ^& t: \5 s5 D8 n( P- r# |. H- Z7 m
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;- \, w# F: E/ r1 k
  15.   htim1.Init.RepetitionCounter = 0;
    , Y' Q+ u* Y- b( Y2 K; b
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;% a) x" ~( O. y: H# z
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)5 O  S# V5 g' H2 Y( {" L9 U3 U
  18.   {
    " |. r- g2 k/ R0 ~5 P
  19.     Error_Handler();
    * d7 b- t/ G1 ]+ C' ?3 I* y$ h
  20.   }
    ; V( K& J( U- o! a/ u! X4 [) p
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    ) d# r. S+ H! R; V2 r/ {6 W* c
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
    ) _  m9 P. C  N% `: h
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    ! p3 x! t. e2 \1 n1 ~( @
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)  f" }! g6 C6 M) E8 D: `7 H* O
  25.   {
    : A- x  L  [7 _
  26.     Error_Handler();7 U* H" y) b" y- U5 S5 B2 v. _
  27.   }' a3 r+ ?$ v" l+ }) C! }
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;" T; {; ]6 x' K2 Z1 \4 [2 f1 m
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;
    5 Z. ]1 ?& R! w+ y: Z/ i. d/ R8 E
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;6 Z# d7 A  z5 l
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
    ' `3 P  ]5 j/ K' {0 H
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;: @6 j0 j& S2 I( _
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
    ; }$ q) t9 f) Z# g& m
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;7 \% X; d; G! J
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
    ( g# T6 C3 L  n9 y
  36.   {
    , `! j3 X) P) K9 _
  37.     Error_Handler();* e/ p" d/ b7 ~# W" _/ l
  38.   }( `9 d7 P( i$ a: U
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码

6 C2 A( }# r/ Z' z
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;: q: O7 b6 g+ m1 p8 o
  2.                  HAL_Delay(20);
    $ Z0 Q, h% E1 p3 A0 ]- [
  3.                  PWM_Chang(Value);
    7 s" F& \: p6 Y/ g' B& p. Q5 B
  4.                  if(Value>=9000)
    6 C" `1 s- j: @
  5.                          flag =1;
复制代码
( F/ H4 d& G# B  L4 ?. F
最终效果如图所示:
) F7 y$ a; b6 X
# w4 K) v' [) X
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。! ~4 X1 T# u( R* K! H2 x- T- l
不如把示波器的波形图也贴上来
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:101 Q) I8 i& _  h  z' F  m0 @
通过调节占空比控制亮度吗

' o' f6 ~# |4 R8 I1 ~( Z是的

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版