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

【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;+ I% C' m3 Z4 s; u  n7 K; A
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;+ R4 r3 O% d  M  n- [5 i
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;1 c1 W( k0 K& F0 e" P
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;1 {6 `8 |5 c" e' G3 N- G
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;5 Z) J! z' u2 q+ H  ?* ?4 N

  6. 8 l. i6 W+ K: W/ z3 l% |
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;
    9 ~0 y0 j4 j( l) b% ^. j
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
& N7 H/ H5 S: S
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();
    $ r3 D+ V' ~5 Y3 t& \! v/ n
  2. //        TIM_HandleTypeDef htim1;! a) ?6 p) n4 q7 I7 M4 q
  3.   TIM_MasterConfigTypeDef sMasterConfig;
    / |3 u# p9 H- J% |
  4.   TIM_OC_InitTypeDef sConfigOC;
    $ t! m4 L- j. g' t7 x. {
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
    - P9 x$ C5 z, j+ l9 j- d& l
  6. 6 A: w' L4 w3 r; h
  7.   /* USER CODE BEGIN TIM1_Init 1 */
    " S, O# L1 d% v6 I: }. B

  8. , i. U( p( n* b) [
  9.   /* USER CODE END TIM1_Init 1 */# h% y* E; x7 r; c7 f4 f
  10.   htim1.Instance = TIM2;
    : {" q% {0 n$ P5 X
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;9 q( s+ G1 U& s( t# i# G0 y) x8 O
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;( c/ F/ S* t% c5 d$ ^6 i; D6 Z. ^9 h
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;1 E- A6 B) x* m4 i& r
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    ! ]9 w9 X& g# D) l. E: M! X" @
  15.   htim1.Init.RepetitionCounter = 0;
    - f/ X5 Y$ M* S! S: l5 T( b6 {, L/ |
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    % J& E) e+ H/ q$ i% g5 I
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)2 `* ]( x7 ^2 `- M5 Q
  18.   {$ I+ e7 T* T6 B. i) M
  19.     Error_Handler();
    , x7 k2 O% L& T9 R3 ], P- O7 B6 v
  20.   }, O( O7 s0 Z& F& x: ?
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    8 D. q5 E1 m6 k; c9 B
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
    : I9 H8 S  g3 f; a3 N# e5 }
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;# z- o$ T8 g; O; p, G5 e5 @' w0 {
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)/ Y) Z, e( _& A, \6 z/ W$ O
  25.   {. N3 t( W: v+ n3 h
  26.     Error_Handler();+ m& W6 d" q1 {. Z* V8 e" R# Y, z
  27.   }7 C2 N+ f$ W" s3 n
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;4 g3 _7 d8 V; O  E, e: j, Z. v. s
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;! t, z1 f3 L+ ?- g- |
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;0 \, D7 q1 g: y
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;$ K$ d- s3 I4 M9 I* h( o
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;+ r, \' I! ~# V* z; Z* W* d
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
    % F; f0 @3 Q; H6 x, o' z
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;; O, P3 l+ A+ X0 v' Q: V! Q8 B% o
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)& v3 W, w; V+ X: T4 r
  36.   {
    1 B2 V$ f6 z4 b3 r+ ]/ e
  37.     Error_Handler();
    $ }. A( I/ n5 O# d! _9 G# O
  38.   }5 Y3 f2 Z* h( r4 j
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码
, c8 i6 H1 I+ i) D# L
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;
    4 V. F& q! d2 I9 ^! p; T- O
  2.                  HAL_Delay(20);- G* p5 k5 {  y7 m2 N
  3.                  PWM_Chang(Value);4 |) v* H# r3 s8 T% s- s
  4.                  if(Value>=9000)2 ~0 D, Q9 e" @
  5.                          flag =1;
复制代码

  }+ X/ r$ T) B6 D, J( K
最终效果如图所示:

! L1 C( b: @4 }( o

  Z* m, s& N' N4 \) C% L
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。
! z. [+ U: ]% `$ t! N' c& ?6 ^  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) N2 L0 _. q  s8 t) W+ ?5 T4 X
通过调节占空比控制亮度吗

, r5 i9 s8 r% P是的
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版