feat(bootloader): 添加了完整的系统休眠和唤醒机制,包括:

- 实现深睡眠模式下的功耗优化
- 添加PB8引脚的外部中断唤醒功能
- 新增Flash区域用于睡眠状态管理
- 实现睡眠配置的自动检查和恢复逻辑

同时重构了OTA_SET函数,改进了Flash配置参数的写入机制,
解决了GD32 Flash特性导致的0到1写入问题,并添加了详细的
调试信息输出和错误处理。
This commit is contained in:
cbb
2026-01-12 01:06:05 +08:00
parent aefb7d4ee4
commit 1e6d47ddae
16 changed files with 1697 additions and 1439 deletions
+12 -2
View File
@@ -4,6 +4,7 @@
#include "gd32c10x.h"
#include "initial.h"
#include "sys/OTA.h"
#include "sys/initial.h"
#include "sys/systick.h"
#include <cstdio>
#include <gd32c10x_fmc.h>
@@ -14,9 +15,10 @@ extern OTAHandler ota;
void BootloaderSystem::initHardware() {
systick_config(); // 系统时钟初始化
USART0_init(); // 调试串口初始化
// USART0_init(); // 调试串口初始化
CAN0_transmiter.init();
check_sleep();
}
void BootloaderSystem::run() {
@@ -26,12 +28,16 @@ void BootloaderSystem::run() {
u32 app_check = *flash_ptr;
if (app_check == OTA_AVAL and
app_enable == OTA_AVAL) { // APP已确认且激活,直接进入
#if OTA_DEBUG
printf("Normal Mode\r\n");
#endif
// 正常模式:跳转到APP
ota.jumpToApplication();
} else if (app_check == OTA_AVAL and
app_enable == OTA_NOT_AVAL) { // 手动禁用APP,进入OTA模式
#if OTA_DEBUG
printf("OTA Mode1\r\n");
#endif
// OTA模式
while (1) {
CAN0_transmiter.communication_check();
@@ -44,12 +50,16 @@ void BootloaderSystem::run() {
u32 back_check = *flash_ptr;
if (back_check == OTA_AVAL and
back_aval == OTA_AVAL) { // backup已确认且激活,复制到主APP区域
#if OTA_DEBUG
printf("OTA Mode3\r\n");
#endif
CAN0_transmiter.sendBackup();
move_app_data(); // 恢复BACKUP
ota.jumpToApplication(); // 跳转到APP
} else { // backup无效,进入OTA模式
} else { // backup无效,进入OTA模式
#if OTA_DEBUG
printf("OTA Mode4\r\n");
#endif
// OTA模式
while (1) {
CAN0_transmiter.communication_check();