feat(can): CAN休眠唤醒移动到BOOT以进行以支持40k硬件看门狗

- 更新深度睡眠实现,在跳转到bootloader前记录睡眠状态到Flash
- 添加gd32c10x_fmc.h头文件以支持Flash内存控制功能
- 将prepare_deep_sleep重命名为app_prepare_deep_sleep以提高命名清晰度
- 在CAN通信检测中添加应用层休眠准备功能
- 在接收OTA启动ID时解锁FMC、设置APP为非激活状态并锁定FMC
- 移除main.cpp中的看门狗复位休眠逻辑
- 在config.h中添加睡眠配置相关的常量定义
- 改进OTA_SET函数的Flash写入逻辑,优化数据更新流程
- 在OTA初始化和应用移动过程中添加FMC解锁锁定操作
This commit is contained in:
cbb
2026-01-12 01:03:43 +08:00
parent 72506ce87d
commit 9f84c85a28
8 changed files with 132 additions and 98 deletions
+5 -1
View File
@@ -8,6 +8,7 @@
#include "gd32c10x.h"
#include "gd32c10x_can.h"
#include "gd32c10x_dma.h"
#include "gd32c10x_fmc.h"
#include "gd32c10x_gpio.h"
#include "motor.h"
#include "systick.h"
@@ -611,10 +612,13 @@ void CAN_transmiter::communication_check() {
Vel_kalman.init(0); // 角度滤波
}
if (eigth_byte & 0x80 >> 7) {
prepare_deep_sleep(true);
app_prepare_deep_sleep(true);
// CAN_Sleep();
}
} else if (receive_message.rx_efid == CANFD_BOOT_ID) {
fmc_unlock();
OTA_SET(n_APP_LATEST_EN_ADDR, OTA_NOT_AVAL); // 设置APP为不激活
fmc_lock();
jumpToBOOT();
} else if (receive_message.rx_efid == 0x00000102) {
volatile u32 *flash_ptr = (volatile u32 *)n_APP_LATEST_EN_ADDR;