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

【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;4 q7 S0 M8 m) ^! ^
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;" w/ z) U' q; ?& i% ]1 m+ w
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;" t  P' v* d0 }1 g7 d0 p
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    5 `! i. V# x! l' ]5 ?. m
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
    ( k/ q% o4 X) @) p/ n4 y. [
  6. # R6 S8 `0 ]: B
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;3 F3 K4 T+ R8 h$ Z
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
  T$ I9 y$ y# x: k1 g
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();7 Q: I( S6 e( g$ J6 o
  2. //        TIM_HandleTypeDef htim1;" B$ B1 C* Y7 W, `6 ?" \3 m6 @
  3.   TIM_MasterConfigTypeDef sMasterConfig;
    ( w, R5 z; Q+ c# A
  4.   TIM_OC_InitTypeDef sConfigOC;! ~7 w; c) i7 {2 ^, T9 [
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;1 {2 E* c/ o7 b, R

  6. # u, j; P9 C2 \0 _6 I
  7.   /* USER CODE BEGIN TIM1_Init 1 */3 ?5 Q3 f; `& D' b
  8. . S' Q& M; b" U" ?+ e4 l$ S
  9.   /* USER CODE END TIM1_Init 1 */
    " r9 Q& _, d. b& h9 u( d( [
  10.   htim1.Instance = TIM2;" B- `+ }3 W* H  F! r5 U, g5 w
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;- G. |# D5 A( x) B7 i( K
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;/ V/ M: d' h0 J! R( ]
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;! z) {* \. g# [) ^6 V! l$ R- e5 z+ \
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    : [( e/ l7 r! T% X0 U# j
  15.   htim1.Init.RepetitionCounter = 0;
    5 K, e" J% x9 ^. N
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    9 i' h9 E. }/ _  d3 F
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
    " R9 L, W/ l8 r/ C% s
  18.   {! E+ O" a1 [" A7 q6 m5 P$ F
  19.     Error_Handler();# ~: s$ q( x8 e' S( t: _
  20.   }8 q7 v' V! H& Y/ [% p
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    ; d$ }0 V1 y* K9 p
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;! _; I" u; Q" C' x+ c- K
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;: P6 ~+ ^* ^3 G8 p$ v) T- I
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
    1 n9 U  I/ l- c: ^+ m
  25.   {0 C( l) r8 Y$ x1 {
  26.     Error_Handler();' e7 l7 z% z7 Q" z
  27.   }
    " Q; `0 I" _0 x2 P1 A
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
    / x, ]; d1 A8 [* D4 P6 H0 v
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;
    / S- h1 _8 @! p3 E$ s. E2 o7 a
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    ! ~) V% Q% [) i4 V
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
    ( y, L* v  Z1 w! d4 b) E) b
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;; t: H2 b/ `5 n0 f5 L! h9 K1 B
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;* V4 q" b$ L$ h! X2 c5 Z
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
    6 B  V+ [; }, f& P9 B1 U% v5 h9 s
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
    % |/ s2 y; }% b
  36.   {
    9 I) [; v% n- a- d" L
  37.     Error_Handler();
    7 B1 q& i9 \$ \4 ~  G/ ?+ ^+ K4 e/ O
  38.   }
    1 p. x% E$ O6 f) [
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码
" c$ b9 G4 X' D3 K( U! X
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;
    9 a* _! y' p9 @8 w- r
  2.                  HAL_Delay(20);9 D# W# |! `: x$ U6 f
  3.                  PWM_Chang(Value);5 H$ ]8 }9 y' z9 Y# C
  4.                  if(Value>=9000)* A7 U% }) E: M
  5.                          flag =1;
复制代码
* s" `& |' Y# X) Q( f! m, `
最终效果如图所示:
8 R$ x1 E" |# j9 B0 m
# e( h3 G4 W9 [1 q6 x& b* v( k
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。+ L# t! Y  i7 l! V( a
不如把示波器的波形图也贴上来
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
5 q6 e, O& d: U9 ]  @通过调节占空比控制亮度吗

: H" ?0 c/ n8 h5 a  ^0 U是的

所属标签

相似分享

官网相关资源

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