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

【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;
    ! u+ ]! v( P2 K: c9 o1 P
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;: C, P% ^: p2 r# H) Y
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;1 I& @1 }0 ?" U1 ~* r% ~4 G  e
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    - P4 k; u) _# x; s
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
      W% p( s* Q: [4 E1 L' D  w
  6. : \( Y: I- v* S! V$ f% Q; _
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;# E" T4 p( O; r8 a9 M2 W7 g1 @
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码

1 x) E  J# n8 t/ y
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();
    6 A5 x3 L. H5 |) d! G7 Z; q
  2. //        TIM_HandleTypeDef htim1;
    - {6 S  D' t" o8 G
  3.   TIM_MasterConfigTypeDef sMasterConfig;
    ' [) W- R9 t% V  {( }
  4.   TIM_OC_InitTypeDef sConfigOC;, u) _! @$ u0 `* l( N+ d) N3 {; f
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;" D& C6 Z: Z" W+ u7 A
  6. 8 s1 b* q& `1 `" B0 H( i
  7.   /* USER CODE BEGIN TIM1_Init 1 */5 G0 b% D  r& r0 p
  8. * I: I" s. T+ Q6 ~9 |6 W( Z
  9.   /* USER CODE END TIM1_Init 1 */2 M& w: V9 p- W" N% H3 J3 N
  10.   htim1.Instance = TIM2;  c0 q4 l& u0 h* b3 K6 P. P4 P2 i
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;2 H2 \( q+ [; u2 B$ h
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    9 I+ d1 G1 m* ]! V
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;) ~* t# c1 g8 k, h8 B" ^
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    3 b: k0 k: \. Y: x+ v, P5 f
  15.   htim1.Init.RepetitionCounter = 0;- B7 ]0 |7 R; a1 ?/ C
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    . c3 H, n7 n: q1 L: s* D9 K
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
    % C, ?# N* }# X; ]! ~
  18.   {8 I) f- C) b* ?& |$ E
  19.     Error_Handler();
    + U* Q7 b' _. U( {  g4 Y
  20.   }
    & F% V$ F, S3 W0 R, U
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    " c  a& a; r4 _& g' j  f' B
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;# R) Z5 J/ e, t( f) A7 y( u
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    3 M3 U' K5 U7 t  S3 g+ _
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
    8 Y0 [1 s% L/ D5 Q& o+ U$ B$ P
  25.   {
    ) Q: U1 {* Y- k. B7 k8 ~
  26.     Error_Handler();
    1 d! f; I7 O# |+ ~: o1 R9 z0 {* Y& N' ]
  27.   }  w" W" ]5 N& F: H9 I
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;9 M% I9 j* I5 p+ O
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;
    ; r8 @- `0 ~, s" V1 f  @( K
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;5 i" d% j# _5 A. a; p, |% C2 j/ S
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
    : _% ^' Z3 H$ {2 G1 r7 F" w2 T9 J
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    " H; u' R6 a- T' B$ N
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;6 ?6 N/ w( G! ~! b+ f+ P
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;  Y$ s9 L# b* r  k; V/ B
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)& E' U" r. F" e- e1 A- `
  36.   {
    7 R2 d7 G" h3 P+ R
  37.     Error_Handler();4 j8 g# Z) b$ ~' e
  38.   }3 S7 x4 u+ U8 q
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码
, I% G* X9 P  x7 P4 c/ y6 O" G
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;& }0 Z6 M+ F# o7 j
  2.                  HAL_Delay(20);
    % [1 s$ i- _, S
  3.                  PWM_Chang(Value);
    6 i8 Y; g- x( y! q
  4.                  if(Value>=9000)5 P/ u6 W2 a# a8 H3 D
  5.                          flag =1;
复制代码
& o3 k" {1 o! X% s# q
最终效果如图所示:

( j# O) N7 u* j  Q: x" m

% C! O" S# A; k, L- N3 D
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。0 a; l8 @9 \3 o, y& |
不如把示波器的波形图也贴上来
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:105 _# e8 A" j+ U8 w
通过调节占空比控制亮度吗

( n# `; ?! e* \& x" W是的

所属标签

相似技术帖

官网相关资源

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