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

【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 O2 S! b) k/ `; E! d3 [( n: p. e
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;' ~" D: }# g$ m7 d7 @- I
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;
    : B/ E% I& l" N  I' P; d
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    6 Z2 E2 _6 w. M# d) R7 N) _
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;( s: H% J* `" J( N2 ]& {  e4 a
  6. 1 x" J* W; \% B% A& L9 J
  7. //  GPIO_InitStruct.Pin = GPIO_PIN_5;
    5 ]9 y8 G) F2 b+ b
  8.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
- c& P) X* I+ g. Y8 C; C$ r  R) J% C
定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();
    . ~/ L5 l3 D# }, \/ |
  2. //        TIM_HandleTypeDef htim1;9 e4 x& p! R# L7 v
  3.   TIM_MasterConfigTypeDef sMasterConfig;
      R+ K& X9 s2 h% W) o8 `  l3 j% \( C
  4.   TIM_OC_InitTypeDef sConfigOC;
    & o/ r; D0 y. O+ e
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;
    " ]. b" |% `. `) i

  6. ' [: F! _& V" x/ W% U; q8 s+ W! _( O
  7.   /* USER CODE BEGIN TIM1_Init 1 */
    9 u- E" h9 E% {  U
  8. ( s4 @9 ^; o4 J& N
  9.   /* USER CODE END TIM1_Init 1 */
    # w+ }# R" C! h" h/ V: z# z  J  l
  10.   htim1.Instance = TIM2;
    4 B) ^3 ~! a8 ?4 m7 w+ H
  11.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;
    0 \7 Y. u- C( Q
  12.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;0 c2 r9 A7 [6 h
  13.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;7 c* C& }/ N0 ]% @2 A% K; w  H1 p
  14.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    9 q- C% g4 P; J" {' K2 h' s
  15.   htim1.Init.RepetitionCounter = 0;
    : b- U' d$ y  b8 t
  16.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;6 @( n, D" l5 ^8 U9 ]& |! e2 y% |& I
  17.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)% f& s6 c1 t; r# W
  18.   {+ Z; P2 F$ o$ G8 I+ D$ T. x
  19.     Error_Handler();0 Q+ T9 p5 Q! Z/ j6 i
  20.   }
    : a$ u# I# j7 ]' h1 |& B
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
      H6 O0 S3 @3 |. N
  22.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;3 }- @1 T+ J$ q5 w( c3 m/ m
  23.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    6 S% i% m/ y7 t0 w
  24.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
    # l4 q: d8 n2 R- P, o! m
  25.   {- m4 D' _" h* u0 b. t
  26.     Error_Handler();
    2 R: U# l1 g5 {" k. J
  27.   }. r, M3 J; V" ]/ J( Q/ S( z
  28.   sConfigOC.OCMode = TIM_OCMODE_PWM1;- V# f! J( |" C& W$ v
  29.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;3 L2 {5 j3 F1 K. M
  30.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    . }) c/ d" x, y& v% e
  31.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
    ) D' Y7 V, K( v
  32.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;2 M! ~7 P% a$ [
  33.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;* ?; @' p& j6 B
  34.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;$ m* |% u' \2 ]1 @
  35.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
    7 ?9 r1 D( t- |0 E& ^3 h  V
  36.   {
    7 [6 ]* r5 t# ?' c7 ]# f7 {
  37.     Error_Handler();& U; w' _% o2 y! ]9 H
  38.   }$ r# W0 S, o' F- H$ L7 ~5 F5 N
  39. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码

  W; ~' o+ K0 m* F; x
在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;- w9 S1 e6 Z3 L$ B4 c3 r
  2.                  HAL_Delay(20);* Z% ?' T  ~/ H! S0 V- c% l7 H- o8 d
  3.                  PWM_Chang(Value);* p; P( T4 {% U" d/ j
  4.                  if(Value>=9000)7 n# e! r4 B& [2 ?  z
  5.                          flag =1;
复制代码

  w; M9 c0 }, ?) n7 y
最终效果如图所示:
7 ~6 P% y  T% s7 k" L% G0 R

" q: I3 C7 F2 N; @3 H
VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。) _) i' V: K, d8 Y# J5 w3 p1 Z" W# `
不如把示波器的波形图也贴上来
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  W6 H  K* ?3 i! F/ n7 Y" |
通过调节占空比控制亮度吗
$ J& U' R; ?/ Q  R0 m$ X1 ?
是的

所属标签

相似分享

官网相关资源

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