Skip to content

Commit

Permalink
Upload with cmake
Browse files Browse the repository at this point in the history
  • Loading branch information
kfove committed Sep 27, 2023
1 parent 23666f2 commit 4c1242e
Show file tree
Hide file tree
Showing 12 changed files with 284 additions and 0 deletions.
93 changes: 93 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
cmake_minimum_required(VERSION 3.5)

project(HELLO C ASM)


# 启用命令输出,Vim/NeoVim 安装 LSP 时, LSP 可以正常工作:w
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)

# 源文件
file(GLOB_RECURSE C_SOURCES
Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/*.c
Libraries/CMSIS/CM3/CoreSupport/*.c
User/*.c
Libraries/STM32F10x_StdPeriph_Driver/src/*.c
EVAL/*.c
System/*.c
)


# 汇编源文件
file(GLOB ASM_SOURCES
Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_md.s
)



# 添加头文件目录
include_directories(
Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x
User
Libraries/CMSIS/CM3/CoreSupport
Libraries/STM32F10x_StdPeriph_Driver/inc
EVAL
System
)



add_executable(${PROJECT_NAME})


target_link_directories(
${PROJECT_NAME} PRIVATE
)


target_compile_definitions(
${PROJECT_NAME} PRIVATE
STM32F10X_MD
USE_STDPERIPH_DRIVER

)

target_compile_options(
${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:-Og>"
"$<$<CONFIG:Debug>:-g2>"
"$<$<NOT:$<CONFIG:Debug>>:-Os>"
"$<$<NOT:$<CONFIG:Debug>>:-g0>"
-mcpu=cortex-m3
)

target_link_options(
${PROJECT_NAME} PRIVATE
-mcpu=cortex-m3
-T
${PROJECT_SOURCE_DIR}/Libraries/LinkScript/stm32f103c8t6.ld
)
target_sources(
${PROJECT_NAME} PRIVATE
${C_SOURCES}
${ASM_SOURCES}
)


add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_SIZE} $<TARGET_FILE:${PROJECT_NAME}>
)


add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O ihex
$<TARGET_FILE:${PROJECT_NAME}> ${PROJECT_NAME}.hex
)

add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O binary
$<TARGET_FILE:${PROJECT_NAME}> ${PROJECT_NAME}.bin
)

13 changes: 13 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -219,10 +219,18 @@ clean:
TYPE_BURN := openocd_swd_flash
TYPE_DEBUG := openocd_swd_debug
TYPE_ERASE := openocd_swd_erase
TYPE_INIT := cmake_init
burn: $(TYPE_BURN)
debug: $(TYPE_DEBUG)
erase: $(TYPE_ERASE)



cbuild: $(TYPE_INIT)
@cmake --build ./build \
--config Debug \
--target all --

# ELF 文件存在调试信息,BIN 文件没有
$(TYPE_BURN): $(BUILD_DIR)/$(TARGET).bin
openocd -f interface/cmsis-dap.cfg -c "transport select swd" -f target/stm32f1x.cfg -c "init" -c "reset halt" -c "sleep 100" -c "wait_halt 2" -c "flash write_image erase $< 0x08000000" -c "sleep 100" -c "verify_image $< 0x08000000" -c "sleep 100" -c "reset run" -c shutdown
Expand All @@ -233,3 +241,8 @@ $(TYPE_DEBUG): $(BUILD_DIR)/$(TARGET).elf

$(TYPE_ERASE):
openocd -f interface/cmsis-dap.cfg -c "transport select swd" -f target/stm32f1x.cfg -c "init" -c "reset halt" -c "sleep 100" -c "stm32f1x mass_erase 0" -c "sleep 100" -c shutdown


$(TYPE_INIT):
cmake -B build -GNinja -DCMAKE_TOOLCHAIN_FILE:FILEPATH=cmake/toolchain.cmake

10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,13 @@
- ST 官方F1 标准库
- 参考 [microdynamics](https://github.com/microdynamics/microdynamics_stm32_template/tree/master)
- 参考 `STM32CudeMX` 工程文件


`Makefile``CMake` 编译出来的文件是不一样的名字

修改 CMake 的 PROJECT_NAME 或者 Makefile 的 TARGET 即可更改生成文件的最终名称, Makefile 关于烧录调试的目录, 自行做适配修改, 也就是该文件名的事


**使用说明**
- [环境配置](./doc)
- [VScode](./)
44 changes: 44 additions & 0 deletions cmake/toolchain.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
set(WINDOWS_ST_CLT_PATH "C:/ST/STM32CubeCLT/STM32CubeCLT/GNU-tools-for-STM32/bin/")
set(MAC_ST_CLT_PATH "/opt/ST/STM32CubeCLT/GNU-tools-for-STM32/bin/")
if(EXISTS "${WINDOWS_ST_CLT_PATH}")
set(TOOLCHAIN_DIRECTORIES ${WINDOWS_ST_CLT_PATH})
elseif(EXISTS "${MAC_ST_CLT_PATH}")
set(TOOLCHAIN_DIRECTORIES ${MAC_ST_CLT_PATH})
else()
# Try to find an STM32CubeIDE installation to use for the toolchain.
file(GLOB TOOLCHAIN_DIRECTORIES
"C:/ST/STM32CubeIDE_*/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.*/tools/bin/"
"/opt/st/stm32cubeide_*/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.*/tools/bin/"
"/Applications/STM32CubeIDE.app/Contents/Eclipse/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.*/tools/bin/"
)
endif()
list(LENGTH TOOLCHAIN_DIRECTORIES TOOLCHAIN_DIRECTORIES_COUNT)


if(WIN32)
set(TOOLCHAIN_SUFFIX ".exe")
endif()

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(TOOLCHAIN_PREFIX "arm-none-eabi-")
if(DEFINED TOOLCHAIN_DIRECTORY)
set(TOOLCHAIN_PREFIX "${TOOLCHAIN_DIRECTORY}/${TOOLCHAIN_PREFIX}")
endif()
set(FLAGS "-fdata-sections -ffunction-sections --specs=nano.specs -Wl,--gc-sections")
set(ASM_FLAGS "-x assembler-with-cpp")
set(CPP_FLAGS "-fno-rtti -fno-exceptions -fno-threadsafe-statics")

set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc${TOOLCHAIN_SUFFIX} ${FLAGS})
set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER} ${ASM_FLAGS})
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++${TOOLCHAIN_SUFFIX} ${FLAGS} ${CPP_FLAGS})
set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy${TOOLCHAIN_SUFFIX})
set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size${TOOLCHAIN_SUFFIX})

set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf")
set(CMAKE_EXECUTABLE_SUFFIX_C ".elf")
set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf")

set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

Binary file added doc/image/swappy-20230927-101724.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/image/swappy-20230927-102116.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/image/swappy-20230927-102308.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/image/swappy-20230927-102501.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/image/swappy-20230927-102815.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/image/swappy-20230927-103443.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/image/swappy-20230927-103603.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
124 changes: 124 additions & 0 deletions doc/setup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# 环境配置

## ## Linux

### OpenOCD

这是一款开源的调试软件工具,可以用于芯片烧录和调试

```Bash
# ArchLinux
sudo pacman -S openocd
# Ubuntu/Debian
sudo apt-get intstall openocd

```

其他发行版可以自行搜素是否官方库纳入 `OpenOCD`

[**SourceForge**](https://sourceforge.net/p/openocd/code/ci/master/tree/)

其中 Github 提供 Mingw32 版本 [Github](https://github.com/openocd-org/openocd)

非官方 [Github](https://github.com/xpack-dev-tools/openocd-xpack/releases)

### arm-none-eabi

[GNU Arm Embedded Toolchain](https://developer.arm.com/downloads/-/gnu-rm)

为 Arm 设备的 GNU 嵌入式工具链

```bash
# ArchLinux
sudo pacman -S arm-none-eabi-gcc arm-none-eabi-gdb
# Ubuntu/Debian
sudo apt-get install gcc-arm-none-eabi
```

可移步至[官方下载](https://developer.arm.com/downloads/-/gnu-rm)



### CMake & Make

- CMake 是开源的构建系统生成工具

- Make 一款构建工具, 通过 `Makefile` 文件执行构建

正常系统都会存在 `make` , `cmake` 需要安装

```bash
sudo pacman -S make cmake # 根据自己系统包管理器, 这两一般都可以通过包管理器直接安装
```





## Window



### OpenOCD

可以通过 `MSYS2` 安装, 但是会比较麻烦

官方提供 [Getting OpenOCD](https://openocd.org/pages/getting-openocd.html)

这里以 [openocd-xpack](https://github.com/xpack-dev-tools/openocd-xpack/releases) 为例, 进入页面下载如下安装包

![image-20230927101617582](./image/swappy-20230927-101724.png)



自己选择解压到的目录, 解压

我解压在 C 盘根目录, 打开解压文件夹, 内容如下

![](./image/swappy-20230927-102116.png)

`Win` 键输入 `环境`

![](./image/swappy-20230927-102501.png)

打开面板, 点击环境变量

![](./image/swappy-20230927-102308.png)

双击 `Path` , 一般选择上面那个。上面是用户变量, 下面是系统变量, 修改用户变量只会对用户生效, 修改系统变量对所有用户生效

![swappy-20230927-102815](./image/swappy-20230927-102815.png)

依次 `新建` -> `浏览` 选择解压 openocd-xpack 下的 `bin` 目录

![swappy-20230927-103443](./image/swappy-20230927-103443.png)

确定保存

`Win` + `R` 打开命令提示符输入 `openocd --version`

有如下输出即可

![](./image/swappy-20230927-103603.png)



### arm-none-eabi

[这里](https://developer.arm.com/downloads/-/gnu-rm)下载, 根据 `OpenOCD` 安装方式就好,也是配置环境变量



### CMake 和 Make

CMake 直接去官网下载即可 , [链接在此](https://cmake.org/)

Make 在 Windows 上有 MingW提供, 这个是在电脑配置 `C/C++`环境时, 如果你用的不是 VSCode 或者 CLion, 那么请移步配置 `C/C++` 环境

Make 的命令默认为 `mingw32-make` 注意!!!!





现在基本环境就OK了

0 comments on commit 4c1242e

Please sign in to comment.