generated from hulk/gd32e23x_template_cmake_vscode
58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
#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_set(LED_PORT, LED_PIN);
|
||
}
|
||
|
||
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);
|
||
}
|