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

【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;
  2.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  3.     GPIO_InitStruct.Pull = GPIO_PULLUP;
  4.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  5.     GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;

  6. //  GPIO_InitStruct.Pin = GPIO_PIN_5;
  7.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码

定时器初始化如下:
  1. __HAL_RCC_TIM2_CLK_ENABLE();
  2. //        TIM_HandleTypeDef htim1;
  3.   TIM_MasterConfigTypeDef sMasterConfig;
  4.   TIM_OC_InitTypeDef sConfigOC;
  5.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;

  6.   /* USER CODE BEGIN TIM1_Init 1 */

  7.   /* USER CODE END TIM1_Init 1 */
  8.   htim1.Instance = TIM2;
  9.   htim1.Init.Prescaler = 16;//PRESCALER_VALUE;
  10.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  11.   htim1.Init.Period = 10000-1;//PERIOD_VALUE;
  12.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  13.   htim1.Init.RepetitionCounter = 0;
  14.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  15.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  16.   {
  17.     Error_Handler();
  18.   }
  19.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  20.   sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
  21.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  22.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  23.   {
  24.     Error_Handler();
  25.   }
  26.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
  27.   sConfigOC.Pulse = 5000-1;//PULSE1_VALUE;
  28.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  29.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  30.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  31.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  32.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  33.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  34.   {
  35.     Error_Handler();
  36.   }
  37. HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
复制代码

在while循环中不断的修改占空比,部分修改如下:
  1. Value+=200;
  2.                  HAL_Delay(20);
  3.                  PWM_Chang(Value);
  4.                  if(Value>=9000)
  5.                          flag =1;
复制代码

最终效果如图所示:


VID_H.gif
收藏 评论4 发布时间:2019-9-6 17:36

举报

4个回答
奏奏奏 回答时间:2019-9-6 17:53:26
都可以正常输出了,还夹着示波器监控脉宽。
不如把示波器的波形图也贴上来
wolfgang2015 回答时间:2019-11-8 11:24:38
1000HZ吧?
00-405686 回答时间:2019-11-8 14:10:50
通过调节占空比控制亮度吗
jundao721 回答时间:2019-11-8 14:29:16
00-405686 发表于 2019-11-8 14:10
通过调节占空比控制亮度吗

是的

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

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