generated from hulk/gd32e23x_template_cmake_vscode
release dev branch
This commit is contained in:
47
Src/led.c
47
Src/led.c
@@ -1,20 +1,57 @@
|
||||
#include "led.h"
|
||||
|
||||
/**
|
||||
* @brief LED心跳指示灯功能
|
||||
* @details 实现类似心跳的LED闪烁模式:快闪两次然后暂停
|
||||
* 适合在SysTick中断中调用,通过计数器控制闪烁节拍
|
||||
* @note 假设SysTick中断频率为1ms,心跳周期约为2秒
|
||||
* 心跳模式:亮200ms->灭200ms->亮200ms->灭1400ms(循环)
|
||||
*/
|
||||
void led_heart_beat(void)
|
||||
{
|
||||
static uint16_t heart_beat_counter = 0;
|
||||
|
||||
// 心跳周期:2000ms (假设SysTick为1ms中断)
|
||||
// 模式:亮200ms -> 灭200ms -> 亮200ms -> 灭1400ms
|
||||
heart_beat_counter++;
|
||||
|
||||
if (heart_beat_counter <= 200) {
|
||||
// 第一次亮:0-200ms
|
||||
led_on();
|
||||
}
|
||||
else if (heart_beat_counter <= 400) {
|
||||
// 第一次灭:200-400ms
|
||||
led_off();
|
||||
}
|
||||
else if (heart_beat_counter <= 600) {
|
||||
// 第二次亮:400-600ms
|
||||
led_on();
|
||||
}
|
||||
else if (heart_beat_counter <= 2000) {
|
||||
// 长时间灭:600-2000ms
|
||||
led_off();
|
||||
}
|
||||
else {
|
||||
// 重置计数器,开始新的心跳周期
|
||||
heart_beat_counter = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void led_init(void) {
|
||||
rcu_periph_clock_enable(LED_RCU);
|
||||
gpio_mode_set(LED_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED_PIN);
|
||||
gpio_output_options_set(LED_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED_PIN);
|
||||
gpio_bit_reset(LED_PORT, LED_PIN);
|
||||
}
|
||||
|
||||
void led_on(void) {
|
||||
gpio_bit_set(LED_PORT, LED_PIN);
|
||||
}
|
||||
|
||||
void led_off(void) {
|
||||
void led_on(void) {
|
||||
gpio_bit_reset(LED_PORT, LED_PIN);
|
||||
}
|
||||
|
||||
void led_off(void) {
|
||||
gpio_bit_set(LED_PORT, LED_PIN);
|
||||
}
|
||||
|
||||
void led_toggle(void) {
|
||||
gpio_bit_toggle(LED_PORT, LED_PIN);
|
||||
}
|
||||
|
Reference in New Issue
Block a user