stm32用delay函数实现呼吸灯代码
时间: 2024-11-03 10:22:26 浏览: 33
STM32微控制器系列中,我们常常用`Delay()`函数或定时器来实现周期性的动作,比如呼吸灯效果。这里是一个简单的示例,使用`HAL_Delay()`函数来控制LED闪烁,模拟呼吸灯效果:
```c
#include "stm32f1xx_hal.h"
#include "led.h" // 假设这是包含LED宏定义的头文件
// 定义延时时间间隔
#define DELAY_PERIOD 500 // 每次亮灭的时间,单位是毫秒
void led_breath_light(uint32_t period) {
LED_ON(); // 开启LED
HAL_Delay(period); // 等待一段时间
LED_OFF(); // 关闭LED
// 深度呼吸:更长的暗期来模拟深呼吸
uint32_t deep_delay = period * 2;
LED_OFF();
HAL_Delay(deep_delay);
LED_ON();
}
int main(void) {
// 初始化硬件和系统
SystemClock_Config();
GPIO_InitTypeDef GPIO_InitStruct;
// 配置LED GPIO
GPIO_InitStruct.Pin = LED_PIN; // LED对应的GPIO pin
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 输出推挽模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上拉下拉
HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
while (1) {
led_breath_light(DELAY_PERIOD); // 开始呼吸灯循环
}
return 0;
}
```
在这个例子中,`led_breath_light()`函数会点亮LED,然后等待指定的时间后再关闭。深度呼吸部分则是在常规亮灭之间插入一段更长的黑暗状态。你可以通过调整`DELAY_PERIOD`值来改变亮灯和暗灯的速度。
阅读全文