stm32g431rbt6呼吸灯
时间: 2023-10-12 17:05:12 浏览: 106
stm32呼吸灯
以下是一个基于STM32G431RBT6的呼吸灯程序示例:
```
#include "stm32g4xx.h"
#define LED_PIN GPIO_PIN_13
#define LED_PORT GPIOA
void delay_ms(uint32_t ms) {
uint32_t ticks = ms * (SystemCoreClock / 1000);
for (volatile uint32_t i = 0; i < ticks; i++);
}
void init_led() {
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN;
GPIOA->MODER &= ~GPIO_MODER_MODE13_Msk;
GPIOA->MODER |= GPIO_MODER_MODE13_0;
}
void breath_led() {
for (int i = 0; i < 100; i++) {
GPIOA->BSRR |= LED_PIN;
delay_ms(i);
GPIOA->BRR |= LED_PIN;
delay_ms(100 - i);
}
for (int i = 100; i > 0; i--) {
GPIOA->BSRR |= LED_PIN;
delay_ms(i);
GPIOA->BRR |= LED_PIN;
delay_ms(100 - i);
}
}
int main() {
init_led();
while (1) {
breath_led();
}
return 0;
}
```
该程序使用PA13作为LED控制引脚,使用PWM技术模拟呼吸效果。程序中通过调整PWM占空比来实现呼吸灯的效果。在呼吸灯的过程中,LED的亮度会逐渐增加和减小。程序中使用了一个简单的延时函数来控制呼吸灯的速度,但是在实际应用中建议使用定时器来更精确地控制呼吸灯的周期和占空比。
阅读全文