# STM32F103C8XWOS **Repository Path**: xwos/STM32F103C8XWOS ## Basic Information - **Project Name**: STM32F103C8XWOS - **Description**: 在STM32F103C8上移植了XWOS的模板工程 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-07-08 - **Last Updated**: 2025-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 介绍 本项目可作为模板工程。此工程仅仅在单片机STM32F103C8上移植了XWOS,不具有其他功能。 + IDE:STM32CubeIDE + MCU: STM32F103C8 ## XWOS 玄武操作系统(XWOS®)开发于2015年,是一款运行在嵌入式微控制器上的通用实时操作系统, 主要面向可靠、实时、安全的应用领域,包括汽车、物联网、工控等。 + + + + # 开发指南 ## 下载源码 ```shell git clone --recursive https://gitee.com/xwos/STM32F103C8XWOS.git ``` ## 搭建开发环境 参考 ## 导入工程到STM32CubeIDE 工程需放在STM32CubeIDE的工作目录内(即STM32CubeIDE启动时指定的目录)。 + 菜单: **File --> Import... --> General --> Projects from Folder or Archive** ## STM32CubeMX配置工程 MCU的驱动是使用 **STM32CubeMX** 进行配置的,并未直接在 **STM32CubeIDE** 内配置。 **STM32CubeMX** 配置文件的路径 `STM32Cube/STM32F103C8XWOS.ioc` 。 用户修改配置时,需要注意中断优先级的要求: ``` 切换上下文的中断为系统中最低优先级中断 切换上下文的中断 <= 滴答定时器的中断 <= 调度器服务中断 ``` + NVIC设置 + 设置 **3** 个抢占优先级位和 **1** 个子优先级位; + SVC中断设置成 **最高** 优先级,即 **Preemption Priority** 为 **0** ; + PendSV中断设置成 **最低** 优先级,即 **Preemption Priority** 为 **7** ; + Systick中断设置成 **最低** 优先级,即 **Preemption Priority** 为 **7** ; + 系统Fault的优先级设置为 **0** ; + 其他中断的优先级只可在 **1~6** 之间。 ## 编译 有两种方法可以编译,两种方法结果产生一样: + 打开终端,并将当前路径切换到工程的 `Board` 目录,执行 `make` 命令。 + 在IDE中点击 **编译** 按钮。 ### 已知问题 + 平台:Windows 11 + 问题现象:STM32CubeIDE中编译时,提示错误 `make (e=3): 系统找不到指定的路径。` + 问题原因:STM32CubeIDE自带的 `make` 命令版本不兼容。 + 解决方法:使用 **XWTC** 中提供的 `make` 命令,设置方法如下: ![img](https://gitee.com/xwos/WeActMiniStm32H750XWOS/raw/main/Doc/EclipseBuilderSettings.png "EclipseBuilderSettings") ## 调试 + 菜单: **Run --> Debug Configurations...** : + **STM32F103C8XWOS-Openocd-DAPLink.launch** : **gdb** + **Openocd** + **DAPLink调试器** + **STM32F103C8XWOS-STlink.launch** : **gdb** + **STLink** + **STM32F103C8XWOS-JLink.launch** : **gdb** + **JLink** ## 运行过程 + 程序入口: `Board/main.c` + 启动流程: + `xwos_main()` 创建一个主线程 `main_task()` 。 # 客制化 ## 工程改名 1. 可通过命令 `find . -type f -name "*STM32F103C8XWOS*"` 搜索所有文件名包含 `STM32F103C8XWOS` 的文件,将其改为 **新工程名** 。 2. 可通过命令 `find . -path "./.git" -prune -o -type f -exec grep -i -H "STM32F103C8XWOS" {} \;` 搜索所有内容包含 `STM32F103C8XWOS` 的文件, 然后依次打开,将其全部替换为 **新工程名** 。 ## 连接到外部静态库 可在文件 `Board/lib.mk` 中定义外部静态库: + `EINCDIRS` :外部静态库头文件列表 + `EINCDIRS_gcc` :只对gcc编译器生效的外部静态库头文件列表 + `EINCDIRS_llvm` :只对clang编译器生效的外部静态库头文件列表 + `ELIBS` :外部静态库列表 + `ELIBS_gcc` :只对gcc编译器生效的外部静态库列表 + `ELIBS_llvm` :只对clang编译器生效的外部静态库列表 # 源码说明 ## BSP + STM32Cube模块: `STM32Cube` + STM32CubeMX配置文件: `STM32Cube/STM32F103C8XWOS.ioc` + 中断向量表: `STM32Cube/Core/Src/ivt.c` + 自动生成的脚本: `Tools/el/stm32ivt.el`