更改 STM32 GPIO LED 的亮度级别

问题描述 投票:0回答:2

我使用的是 STM32 NUCLEO-L432KC 微控制器。

这是我想要编程的内容:

我的 LED 应具有三个 LED 亮度级别:100、50 和 10%

微控制器上电后,灯将亮起 100%。单击按钮即可降低亮度。

此外,我可以随时按住按钮 3 秒来打开和关闭 LED。

但是,我的问题是,我不知道如何调暗 LED/亮度级别。

注意:我只知道如何使用GPIO命令。我听说过定时器,但我想首先学习仅使用 GPIO / Basic c 命令来更改亮度级别。

这是我到目前为止所拥有的:

/* USER CODE BEGIN PV */
int button = 0;
/* USER CODE END PV */

while(1) {

// Read the status of the GPIO button pin
button = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3);

// If the button is pressed
          if(!button)
          {
              HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8); // Toggles the state of the GPIO LED pin
              HAL_Delay(500);
          }
}
c stm32 microcontroller
2个回答
0
投票

您需要的是某种形式的 PWM(脉宽调制)。 通常,这是使用定时器在低级别完成的。有时,您可以使用一些库函数来为 PWM 输出提供更高级的接口。


0
投票

通常这种操作是通过使用 PWM 信号来实现的,该信号将快速切换 LED,使其看起来更暗。这样的信号可以由 MCU 上的定时器外设生成(这里有一篇关于它的示例文章:https://controllerstech.com/pwm-in-stm32/)。它不是专门针对该 MCU 的,但如果您愿意的话使用图形配置器,它应该非常相似。它还包含一些有关它的理论,以便您可以理解它是什么)。或者,您可以在了解该 MCU 上的时钟是什么的情况下,通过使用延迟在该 GPIO 输出上创建一个非常粗略的 PWM 信号。

© www.soinside.com 2019 - 2024. All rights reserved.