Compare commits

3 Commits

6 changed files with 86 additions and 17 deletions

View File

@@ -6,6 +6,10 @@ include(${CMAKE_SOURCE_DIR}/cmake/project.cmake)
project(${PROJECT_NAME} LANGUAGES C CXX ASM) project(${PROJECT_NAME} LANGUAGES C CXX ASM)
# Generate version header from CMake version variables
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/generated)
configure_file(${CMAKE_SOURCE_DIR}/cmake/version.h.in ${CMAKE_BINARY_DIR}/generated/version.h @ONLY)
# 添加SDK库 # 添加SDK库
add_subdirectory(SDK/CMSIS) add_subdirectory(SDK/CMSIS)
add_subdirectory(SDK/GD32E23x_standard_peripheral) add_subdirectory(SDK/GD32E23x_standard_peripheral)
@@ -47,6 +51,7 @@ project_add_target_properties(${PROJECT_NAME})
# 头文件路径 # 头文件路径
target_include_directories(${PROJECT_NAME} PRIVATE target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_SOURCE_DIR}/Inc ${CMAKE_SOURCE_DIR}/Inc
${CMAKE_BINARY_DIR}/generated
# Add new include directories here, e.g. ${CMAKE_SOURCE_DIR}/Application/User/Inc # Add new include directories here, e.g. ${CMAKE_SOURCE_DIR}/Application/User/Inc
@@ -68,7 +73,7 @@ target_link_libraries(${PROJECT_NAME} PRIVATE CMSIS)
target_link_libraries(${PROJECT_NAME} PRIVATE GD32E23x_standard_peripheral) target_link_libraries(${PROJECT_NAME} PRIVATE GD32E23x_standard_peripheral)
# 生成 bin/hex/list 文件名格式:[工程名_版本号_编译条件_编译日期] # 生成 bin/hex/list 文件名格式:[工程名_版本号_编译条件_编译日期]
set(OUTPUT_PREFIX "${PROJECT_NAME}_${VERSION}_${IIC_TYPE}_${BUILD_DATE}") set(OUTPUT_PREFIX "${PROJECT_NAME}_${VERSION}_${BUILD_VARIANT}_${BUILD_DATE}")
add_custom_command(TARGET ${PROJECT_NAME} add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD POST_BUILD

View File

@@ -1,6 +1,8 @@
#ifndef BOARD_CONFIG_H #ifndef BOARD_CONFIG_H
#define BOARD_CONFIG_H #define BOARD_CONFIG_H
#include "version.h"
#define GD32E23XF4 0x10 #define GD32E23XF4 0x10
#define GD32E23XF6 0x20 #define GD32E23XF6 0x20
#define GD32E23XF8 0x40 #define GD32E23XF8 0x40
@@ -25,6 +27,11 @@
// #define EDDY_DRIVE_CURRENT_DETECTION // Eddy Drive Current Detection : Enable // #define EDDY_DRIVE_CURRENT_DETECTION // Eddy Drive Current Detection : Enable
#undef EDDY_DRIVE_CURRENT_DETECTION // Eddy Drive Current Detection : Disable #undef EDDY_DRIVE_CURRENT_DETECTION // Eddy Drive Current Detection : Disable
/* >>>>>>>>>>>>>>>>>>>>[COMMAND DEBUG]<<<<<<<<<<<<<<<<<<<< */
// #define COM_DEBUG // Enable Command Debug Information
#undef COM_DEBUG // Disable Command Debug Information
/* >>>>>>>>>>>>>>>>>>>>>[LDC1612 DEBUG]<<<<<<<<<<<<<<<<<<<< */ /* >>>>>>>>>>>>>>>>>>>>>[LDC1612 DEBUG]<<<<<<<<<<<<<<<<<<<< */
// #define LDC_DEBUG // LDC1612 Driver Debug : Enable // #define LDC_DEBUG // LDC1612 Driver Debug : Enable
@@ -32,12 +39,6 @@
/******************************************************************************/ /******************************************************************************/
#define MCU_CODE 24U
#define FW_VERSION_MAJOR 1
#define FW_VERSION_MINOR 1
#define FW_VERSION_PATCH 3
/* Dynamic USART Configuration Structure */ /* Dynamic USART Configuration Structure */
typedef struct { typedef struct {
uint32_t rcu_usart; uint32_t rcu_usart;

View File

@@ -81,6 +81,14 @@
/** @brief 传感器周期上报使能标志 */ /** @brief 传感器周期上报使能标志 */
volatile bool g_eddy_current_sensor_report_enabled = false; volatile bool g_eddy_current_sensor_report_enabled = false;
/* Debug output control */
#ifdef COM_DEBUG
#include <stdio.h>
#define COMMAND_DEBUG(fmt, ...) printf("[COMMAND] " fmt "\n", ##__VA_ARGS__)
#else
#define COMMAND_DEBUG(fmt, ...)
#endif
/** @name 预设响应数据 /** @name 预设响应数据
* @{ */ * @{ */
static const uint8_t s_report_status_ok[] = { 'o', 'k' }; /**< 成功响应数据 */ static const uint8_t s_report_status_ok[] = { 'o', 'k' }; /**< 成功响应数据 */
@@ -197,6 +205,36 @@ static void send_response(uint8_t type, const uint8_t *payload, uint8_t len)
*/ */
static inline bool is_dec_digit(uint8_t c) { return (c >= '0' && c <= '9'); } static inline bool is_dec_digit(uint8_t c) { return (c >= '0' && c <= '9'); }
/**
* @brief 将一个无符号整数转换为字符串并追加到缓冲区。
* @param value 要转换的数字。
* @param buffer 指向目标缓冲区的指针,转换后的字符串将写入此处。
* @return uint8_t 写入的字符数。
*/
static uint8_t uint_to_str(uint32_t value, char *buffer) {
char temp[10]; // 32位无符号整数最多10位
int i = 0;
if (value == 0) {
buffer[0] = '0';
return 1;
}
// 将数字逆序转换为字符存入临时数组
while (value > 0) {
temp[i++] = (char)((value % 10) + '0');
value /= 10;
}
// 将逆序的字符串反转并存入目标缓冲区
uint8_t len = (uint8_t)i;
for (int j = 0; j < len; j++) {
buffer[j] = temp[--i];
}
return len;
}
/** /**
* @brief 从缓冲区解析十进制无符号整数。 * @brief 从缓冲区解析十进制无符号整数。
* @details 从指定位置开始连续读取十进制数字字符累加构成32位无符号整数。 * @details 从指定位置开始连续读取十进制数字字符累加构成32位无符号整数。
@@ -298,10 +336,28 @@ void handle_command(const uint8_t *frame, uint8_t len) {
// send_response(RESP_TYPE_OK, s_report_status_ok, sizeof(s_report_status_ok)); // send_response(RESP_TYPE_OK, s_report_status_ok, sizeof(s_report_status_ok));
// return; // return;
case 999u: /* ==========================================
* M999 输出固件版本号命令
* ========================================== */
case 999u: //M999: 输出固件版本号
{
char version_str[16]; char version_str[16];
int n = snprintf(version_str, sizeof(version_str), "v%u.%u.%u.%u", MCU_CODE, FW_VERSION_MAJOR, FW_VERSION_MINOR, FW_VERSION_PATCH); char *p = version_str;
send_response(RESP_TYPE_OK, (uint8_t *)version_str, (uint8_t)n);
*p++ = 'v';
p += uint_to_str(BOARD_TYPE_CODE, p);
*p++ = '.';
p += uint_to_str(FW_VERSION_MAJOR, p);
*p++ = '.';
p += uint_to_str(FW_VERSION_MINOR, p);
*p++ = '.';
p += uint_to_str(FW_VERSION_PATCH, p);
*p = '\0'; // null-terminate for printf safety
uint8_t n = (uint8_t)(p - version_str);
send_response(RESP_TYPE_OK, (uint8_t *)version_str, n);
COMMAND_DEBUG("Firmware Version: %s", version_str);
}
return; return;
case 9999u: case 9999u:

View File

@@ -1,5 +1,6 @@
# Project basic info # Project basic info
set(PROJECT_NAME "LDC1612") set(PROJECT_NAME "LDC1612")
set(BOARD_TYPE_CODE 23)
set(VERSION_MAJOR 1) set(VERSION_MAJOR 1)
set(VERSION_MINOR 0) set(VERSION_MINOR 0)
set(VERSION_PATCH 0) set(VERSION_PATCH 0)
@@ -7,10 +8,12 @@ set(VERSION "V${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
string(TIMESTAMP BUILD_DATE "%Y-%m-%d") string(TIMESTAMP BUILD_DATE "%Y-%m-%d")
# 编译条件如IIC类型等 # 编译条件如IIC类型等
# set(IIC_TYPE "AutoDetectDriveCurrent") # Example: HW-IIC_APP / HW-IIC_Bootloader
set(IIC_TYPE "HW-IIC") # set(BUILD_VARIANT "AutoDetectDriveCurrent")
# set(BUILD_VARIANT "HW-IIC")
set(BUILD_VARIANT "APP")
# 其它自定义宏 # 其它自定义宏
add_definitions(-DIIC_TYPE=${IIC_TYPE}) add_definitions(-DBUILD_VARIANT=${BUILD_VARIANT})
add_definitions(-DPROJECT_VERSION="${VERSION}") add_definitions(-DPROJECT_VERSION="${VERSION}")
add_definitions(-DBUILD_DATE="${BUILD_DATE}") add_definitions(-DBUILD_DATE="${BUILD_DATE}")

7
cmake/version.h.in Normal file
View File

@@ -0,0 +1,7 @@
#pragma once
/* Auto-generated from CMake VERSION_* variables. Do not edit directly. */
#define BOARD_TYPE_CODE @BOARD_TYPE_CODE@
#define FW_VERSION_MAJOR @VERSION_MAJOR@
#define FW_VERSION_MINOR @VERSION_MINOR@
#define FW_VERSION_PATCH @VERSION_PATCH@

View File

@@ -1,3 +0,0 @@
@echo off
set OPENOCD_SCRIPTS=
start "" "D:\Microsoft VS Code\Code.exe"