From 23ea3387df0ebe7b89886193915f7c4040b3ff1d Mon Sep 17 00:00:00 2001 From: liyp Date: Tue, 25 Aug 2026 21:46:36 -0400 Subject: [PATCH] first commit --- .gitmodules | 3 + .idea/.gitignore | 10 + .idea/HelloClionStm32F10x.iml | 2 + .idea/debugServers/SEGGER_J_Link.xml | 13 + .idea/editor.xml | 346 +++++++++++++++++++++++++++ .idea/misc.xml | 8 + .idea/modules.xml | 8 + .idea/vcs.xml | 8 + App/LetterShell.c | 100 ++++++++ App/LetterShell.h | 8 + App/main.c | 21 ++ App/main.h | 8 + Board/Board.h | 39 +++ CMakeLists.txt | 177 ++++++++++++++ README.md | 17 ++ 15 files changed, 768 insertions(+) create mode 100644 .gitmodules create mode 100644 .idea/.gitignore create mode 100644 .idea/HelloClionStm32F10x.iml create mode 100644 .idea/debugServers/SEGGER_J_Link.xml create mode 100644 .idea/editor.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 App/LetterShell.c create mode 100644 App/LetterShell.h create mode 100644 App/main.c create mode 100644 App/main.h create mode 100644 Board/Board.h create mode 100644 CMakeLists.txt create mode 100644 README.md diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..ae4a6a2 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "VoiletBspStm32F10x"] + path = VoiletBspStm32F10x + url = https://git.linuxacme.com/iorebuild/VoiletBspStm32F10x.git diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..f6906f2 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 已忽略包含查询文件的默认文件夹 +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/HelloClionStm32F10x.iml b/.idea/HelloClionStm32F10x.iml new file mode 100644 index 0000000..4c94235 --- /dev/null +++ b/.idea/HelloClionStm32F10x.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.idea/debugServers/SEGGER_J_Link.xml b/.idea/debugServers/SEGGER_J_Link.xml new file mode 100644 index 0000000..6eb48bc --- /dev/null +++ b/.idea/debugServers/SEGGER_J_Link.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/editor.xml b/.idea/editor.xml new file mode 100644 index 0000000..1798069 --- /dev/null +++ b/.idea/editor.xml @@ -0,0 +1,346 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..e479d63 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1603c3e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..cbd5723 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/App/LetterShell.c b/App/LetterShell.c new file mode 100644 index 0000000..bef3076 --- /dev/null +++ b/App/LetterShell.c @@ -0,0 +1,100 @@ +#include "LetterShell.h" +#include "shell.h" +/* 板级BSP头文件 */ +#include "Bsp.h" + +#define WR_BUFFER_SIZE 512 + +/* 1. 创建shell对象,开辟shell缓冲区 */ +Shell Host; //Shell实例化 +char HostBuffer[WR_BUFFER_SIZE]; //读写缓冲区 +const COM_MAP_T *HostCom = TTY_COM; +/** + * @brief Shell写函数 + * @param ComId 串口号,ch 数据 + * @retval void + * @note void + * @example void + */ +signed short ShellWrite(char* ch, unsigned short Len) +{ + ComSendStr(HostCom, (uint8_t* )ch,Len); + return Len; +} +/** + * @brief Shell读函数 - 中断回调实现 + * @param Vector 中断向量号 + * @retval void + * @note void + * @example void + */ +void LetterShellIrqFunc(void *Param) +{ + uint8_t ch = 0x00; + ch = ComReceiveChar(Param); + shellHandler(&Host, ch); +} + + +/** + * @brief 初始化Shell + * @note void + * @param ComX 串口号,baud 波特率 + * @retval void + */ +void LetterShellInit(const COM_MAP_T *ComX, uint32_t Baud) +{ + //初始化串口 + ComStdConfig(ComX, Baud); + //设置串口回调函数 + IrqRegister(ComX->Periph.Irqn, LetterShellIrqFunc); + //设置中断等级 + IrqEnable(ComX->Periph.Irqn,1,1); + //注册写函数 + Host.write = ShellWrite; + //初始化LetterShell + shellInit(&Host, HostBuffer, WR_BUFFER_SIZE); +} + +// /** +// * @brief 打印版本号 +// * @param void +// * @retval void +// * @note void +// * @example void +// */ +// void version(void) +// { +// printf("%s,%s\r\n",HARDWARE_VERSION,SOFTWARE_VERSION); +// } +// +// /** +// * @brief 重启单片机 +// * @param void +// * @retval void +// * @note void +// * @example void +// */ +// void reboot(void) +// { +// SystemReboot(); +// } +// +// /** +// * @brief 串口测试程序 +// * @param void +// * @retval void +// * @note void +// * @example void +// */ +// +// void comTest(uint8_t ComId) +// { +// } +// +// //打印版本号 +// SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), version, version, version); +// //软重启单片机 +// SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), reboot, reboot, reboot); +// //串口测试 +// SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), comTest, comTest, comTest); diff --git a/App/LetterShell.h b/App/LetterShell.h new file mode 100644 index 0000000..3319cc9 --- /dev/null +++ b/App/LetterShell.h @@ -0,0 +1,8 @@ +#ifndef __LETTER_SHELL_H__ +#define __LETTER_SHELL_H__ + +#include "Bsp.h" + +void LetterShellInit(const COM_MAP_T *ComX, uint32_t Baud); + +#endif diff --git a/App/main.c b/App/main.c new file mode 100644 index 0000000..81491c2 --- /dev/null +++ b/App/main.c @@ -0,0 +1,21 @@ +// +// Created by anonymous on 2026/5/24. +// +/* C标准库头文件 */ +#include +#include +/* BSP文件 */ +#include "main.h" +#include "Bsp.h" + +int main(void) { + + BspInit(); + + while (1) { + LedToggle(LED0); + DelayMs(100); + } + + return 0; +} \ No newline at end of file diff --git a/App/main.h b/App/main.h new file mode 100644 index 0000000..83626a2 --- /dev/null +++ b/App/main.h @@ -0,0 +1,8 @@ +// +// Created by anonymous on 2026/5/24. +// + +#ifndef MAIN_H +#define MAIN_H + +#endif //MAIN_H diff --git a/Board/Board.h b/Board/Board.h new file mode 100644 index 0000000..ddf41d2 --- /dev/null +++ b/Board/Board.h @@ -0,0 +1,39 @@ +// +// Created by anonymous on 2026/5/28. +// + +#ifndef _BOARD_H +#define _BOARD_H + +/* Voilet Bsp */ +#include "VoiletPort.h" + +/* Chip Library Enable */ + +/* Extra Library Enable */ +#define TTY_COM COM1 +#define TTY_BAUD 115200 + +#define LED_NUM 2 //LED灯数量 +enum { + LED0 = 0, + LED1 +}; + +#define DI_NUM 0 //数字信号输入通道数量 +// enum { +// +// }; + +#define DO_NUM 0 //数字信号输出通道数量 +// enum { +// +// }; + +#define RS485_1 COM1 +// #define RS485_2 +// #define RS485_3 +// #define RS485_4 +// #define RS485_5 + +#endif //_BOARD_H diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..1ad355b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,177 @@ +# 设置交叉编译目标系统为通用(无操作系统) +set(CMAKE_SYSTEM_NAME Generic) +# 设置目标处理器架构为ARM +set(CMAKE_SYSTEM_PROCESSOR ARM) +# 设置系统版本号 +set(CMAKE_SYSTEM_VERSION 1) + +# 指定CMake最低版本要求 +cmake_minimum_required(VERSION 3.31.12) + +# [优化] 设置交叉编译查找规则 +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # 不在目标系统查找程序 +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) # 只在目标系统查找库 +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) # 只在目标系统查找头文件 +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) # 只在目标系统查找包 + +# 设置编译目标类型为静态库,跳过编译器测试 +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +# [优化] 编译器检查 +if(NOT CMAKE_C_COMPILER) + message(FATAL_ERROR "ARM GCC编译器未找到,请安装arm-none-eabi-gcc工具链") +endif() + +# 项目定义,支持C、C++和汇编语言 +project(Project C CXX ASM) + +# 设置C++标准为C++17 +set(CMAKE_CXX_STANDARD 17) +# 设置C标准为C11 +set(CMAKE_C_STANDARD 11) + +# 添加核心编译选项 +add_compile_options( + -mcpu=cortex-m3 # 指定CPU内核为Cortex-M3 + -mthumb # 使用Thumb指令集 + -mthumb-interwork # 支持ARM/Thumb指令集交互 + + # 代码段优化选项 + -ffunction-sections # 将每个函数放在独立的段中 + -fdata-sections # 将每个数据放在独立的段中 + -fno-common # 禁止未初始化变量使用公共段 + -fmessage-length=0 # 错误消息不限制长度 + + # 警告选项 + -Wall # 开启所有警告 + -Wextra # 开启额外警告 + -Wno-unused-parameter # 抑制未使用参数警告 +) + +# 启用汇编器文件预处理 +add_compile_options($<$:-x$assembler-with-cpp>) + +# [优化] 构建类型配置 +string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_UPPER) +if("${BUILD_TYPE_UPPER}" STREQUAL "RELEASE") + message(STATUS "Release模式:速度最大化优化") + add_compile_options(-Ofast) +elseif("${BUILD_TYPE_UPPER}" STREQUAL "RELWITHDEBINFO") + message(STATUS "RelWithDebInfo模式:速度优化,包含调试信息") + add_compile_options(-Ofast -g) +elseif("${BUILD_TYPE_UPPER}" STREQUAL "MINSIZEREL") + message(STATUS "MinSizeRel模式:代码大小最小化优化") + add_compile_options(-Os) +else() + message(STATUS "Debug模式:最小优化,包含完整调试信息") + add_compile_options(-Og -g -DDEBUG) +endif() + +# 添加预处理器宏定义 +add_compile_definitions( + USE_STDPERIPH_DRIVER + STM32F10X_HD +) + +# [我加的] 添加头文件搜索路径 - 根据你的项目结构调整 +include_directories( + App + Board + VoiletBspStm32F10x/Bsp/Inc + VoiletBspStm32F10x/StdLib/Inc + VoiletBspStm32F10x/System + VoiletBspStm32F10x/System/Cmsis/Inc + VoiletBspStm32F10x/ThirdParty/LetterShellV3/Inc +) + +# [我加的] 自动收集源文件(递归搜索指定目录下的所有源文件) +file(GLOB_RECURSE SOURCES + VoiletBspStm32F10x/System/Startup/Gcc/startup_stm32f10x_hd.s + App/*.c + VoiletBspStm32F10x/Bsp/Src/*.c + VoiletBspStm32F10x/StdLib/Src/*.c + VoiletBspStm32F10x/System/*.c + VoiletBspStm32F10x/System/Cmsis/Src/*.c + VoiletBspStm32F10x/ThirdParty/LetterShellV3/Src/*.c +) +# [我加的] 排除模板文件和测试套件 +list(FILTER SOURCES EXCLUDE REGEX ".*template.*") +list(FILTER SOURCES EXCLUDE REGEX ".*TestSuite.*") +list(FILTER SOURCES EXCLUDE REGEX ".*ARMCC.*") + +# [我加的] 显示找到的源文件信息 +message(STATUS "找到的源文件数量: ${SOURCES}") +foreach(source ${SOURCES}) + get_filename_component(FILENAME ${source} NAME) + message(STATUS " - ${FILENAME}") +endforeach() + +# [我加的] 排除模板文件 +list(FILTER SOURCES EXCLUDE REGEX ".*template.*") + +# [我加的] 显示找到的源文件信息 +message(STATUS "找到的源文件数量: ${SOURCES}") +foreach(source ${SOURCES}) + get_filename_component(FILENAME ${source} NAME) + message(STATUS " - ${FILENAME}") +endforeach() + +# 设置链接脚本路径 +set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/VoiletBspStm32F10x/System/LinkScripts/Gcc/stm32_flash_ze.ld) + +# 检查链接脚本是否存在 +if(NOT EXISTS "${LINKER_SCRIPT}") + message(FATAL_ERROR "链接脚本不存在,请检查路径: ${LINKER_SCRIPT}") +else() + message(STATUS "链接脚本验证成功: ${LINKER_SCRIPT}") +endif() + +# [修正] 链接器选项语法 +add_link_options( + # 链接器优化选项 + "LINKER:-gc-sections" # 垃圾回收未使用的段 + "LINKER:--print-memory-usage" # 打印内存使用情况 + "LINKER:-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map" # 生成内存映射文件 + + # CPU架构选项 + -mcpu=cortex-m3 + -mthumb + -mthumb-interwork + + # 指定链接脚本 + -T "${LINKER_SCRIPT}" + + # 标准库规格 + -specs=nano.specs # 使用精简版C库 + -specs=nosys.specs # 无系统调用支持 +) + +# 创建可执行文件目标 +add_executable(${PROJECT_NAME}.elf ${SOURCES} + App/main.c + App/main.h) + +# [优化] 添加自定义目标用于分析 +add_custom_target(size + COMMAND ${CMAKE_SIZE_UTIL} ${PROJECT_NAME}.elf + DEPENDS ${PROJECT_NAME}.elf + COMMENT "分析程序内存使用情况" +) + +# 设置输出文件路径 +set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex) +set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin) + +# 添加自定义命令生成HEX和BIN文件 +add_custom_command( + TARGET ${PROJECT_NAME}.elf + POST_BUILD + COMMAND ${CMAKE_OBJCOPY} -Oihex $ ${HEX_FILE} + COMMAND ${CMAKE_OBJCOPY} -Obinary $ ${BIN_FILE} + COMMENT "Generate HEX and BIN files: ${HEX_FILE}, ${BIN_FILE}" +) + +# [优化] 显示构建信息 +message(STATUS "目标MCU: Cortex-M3") +message(STATUS "链接脚本: ${LINKER_SCRIPT}") +message(STATUS "编译器: ${CMAKE_C_COMPILER}") diff --git a/README.md b/README.md new file mode 100644 index 0000000..06e8d15 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +1、克隆仓库 + +``` +git clone --recurse https://git.linuxacme.com/iorebuild/HelloClionStm32F10x.git +``` + +2、将子模块切换为main分支 + +``` +cd HelloClionStm32F10x +``` + +``` +git submodule foreach "git checkout main" +``` + +3、