概述


本文档说明用JetBrains CLion搭建普冉半导体PY32系列单片机的开发环境的基本步骤,以PY32F030型号为例进行详细说明。

选择CLion作为主要开发工具基于以下考虑:

  • 开发效率提升:相较于Keil μVision等传统嵌入式IDE,CLion提供更强大的代码编辑、智能补全、实时错误检查和重构功能,能够显著提高代码编写和调试效率。
  • 现代化开发支持:CLion支持集成各类AI代码辅助插件(如JetBrains AI Assistant),为代码生成、解释和优化提供智能建议,该功能在Keil μVision环境中难以实现。

本文档将详细说明从工具链配置、工程创建、编译调试到利用CLion进行高效开发的完整流程,以提供标准化、可复用的开发环境配置方案。

软件安装


Clion


从 JetBrains官网下载并安装,本文以2025.2.1为例。

PY32_GCC_SDE


这是普冉公司对于PY32系列单片机的GCC软件开发环境工具包,内容包含了交叉编译工具链、SDK、openocd以及相关配置文件,这是关键的工具包,可以从官网下载。

安装时注意:安装路径不要包含空格,以尽量避免潜在的问题,例如:安装路径设置为`C:\PuyaSDE`。安装完成后,会自动将必要的路径添加到环境变量中。

在Clion中进入设置界面,在“构建、执行、部署”栏的“工具链”页面中,点击“+”,添加工具链,配置如下:

  1. 名称:可以自行指定。
  2. C编译器:配置为通过PY32_GCC_SDE安装的编译器。
  3. C++编译器:配置C编译器后,会自动检测。
  4. 调试器:配置为通过PY32_GCC_SDE安装的调试器。
  5. 其它内容可以保留默认值。

项目配置


本文以PY32_GCC_SDE附带的PY32F0xx_Firmware_V1.4.7为例,说明创建和配置项目的过程,可据此自行修改,建立自己的项目。

创建项目


文件准备

  1. 建立一个项目文件夹。
  2. 复制`PY32F0xx_Firmware_V1.4.7\Templates\PY32F030xx_Templates`下的Src和Inc文件夹到项目文件夹。
  3. 复制`PY32F0xx_Firmware_V1.4.7`下的Drivers文件夹到复制到项目文件夹。
  4. 复制链接文件:从PY32_GCC_SDE安装目录下的`sdk\ld`文件夹复制py32f030x8.ld到项目文件夹。
  5. 复制启动文件:从PY32_GCC_SDE安装目录下的`sdk\startup`文件夹复制startup_py32f030xx.s到项目文件夹。

新建项目

  1. 在Clion中新建项目,位置选择前面建立的项目文件夹,语言标准选择C11。
  2. 项目类型选择C可执行文件。
  3. 点击“创建”按钮,在弹出的对话框中点击“从现有的源创建”。
  4. 新建项目后,删除自动创建的main.c文件。

添加CMake配置

  1. 进入配置,在“构建、执行、部署”栏的CMake界面中,单击“+”,添加配置文件。
  2. 名称可以自行指定,构建类型选择“Debug”,工具链选择前面创建的工具链。

修改CMakeLists.txt

删除原有内容,添加以下内容。

# CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(demo_project C CXX ASM)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

# 处理器和浮点单元设置
set(MCU_CPU "-mcpu=cortex-m0plus")
set(MCU_THUMB "-mthumb")
set(CPU_FLAGS "${MCU_CPU} ${MCU_THUMB}")
set(FPU_FLAGS "")

# debug设置
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g")
set(CMAKE_ASM_FLAGS_DEBUG "${CMAKE_ASM_FLAGS_DEBUG} -g")

# 全局编译flags
set(CMAKE_C_FLAGS "${CPU_FLAGS} -fdata-sections -ffunction-sections -Og -Wall -g -gdwarf-2")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")

# 编译启动汇编代码选项,缺少会报错!
set(CMAKE_ASM_FLAGS "${CPU_FLAGS} -x assembler-with-cpp -DUSE_HAL_DRIVER -DPY32F030x8")

# 目标芯片
add_definitions(-DUSE_HAL_DRIVER -DPY32F030x6)

# 链接选项
set(LD_SCRIPT ${CMAKE_SOURCE_DIR}/py32f030x8.ld)
set(CMAKE_EXE_LINKER_FLAGS "${CPU_FLAGS} -T${LD_SCRIPT} ${MCU_SPECS} -Wl,--gc-sections -Wl,-Map=${PROJECT_NAME}.map")

# 添加头文件包含目录
include_directories(
        Inc
        Drivers/PY32F0xx_HAL_Driver/Inc
        Drivers/CMSIS/Device/PY32F0xx/Include
        Drivers/CMSIS/Core/Include
        Drivers/CMSIS/Include
)

# 自动包含Src目录和Drivers目录下的所有源文件
file(GLOB_RECURSE SRC_FILES
        Src/*.c
        Drivers/PY32F0xx_HAL_Driver/Src/*.c
)

# 查找汇编启动文件
file(GLOB_RECURSE ASM_FILES
        startup_py32f030xx.s
)

# 汇编启动文件
set(STARTUP_ASM_SOURCE "startup_py32f030xx.s")

add_executable(${PROJECT_NAME}
        ${SRC_FILES}
        ${STARTUP_ASM_SOURCE}
)

# 设置输出目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

# 添加自定义目标用于生成二进制和hex文件
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
        COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${PROJECT_NAME}> ${PROJECT_NAME}.bin
        COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${PROJECT_NAME}> ${PROJECT_NAME}.hex
        COMMAND ${CMAKE_SIZE} $<TARGET_FILE:${PROJECT_NAME}>
        COMMENT "Generating binary and hex files"
)


交叉编译配置


建立交叉编译工具链文件


在项目根目录下建立名为toolchain-arm-none-eabi.cmake的文件,内容如下。

# 设置目标系统为通用嵌入式系统
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR ARM)

set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_SIZE arm-none-eabi-size)
# 此项必须,否则Clion加载配置文件会失败。
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)


指定叉编译工具链文件

  1. 进入设置,进入“构建、执行、部署”栏的CMake配置界面。
  2. 在“CMake选项中”输入:-DCMAKE_TOOLCHAIN_FILE=toolchain-arm-none-eabi.cmake

编译

  1. 在Clion主界面底部左侧栏中点击CMake按钮,在工具栏中点击“重新加载CMake项目”。
  2. 在菜单栏中依次点击:构建、构建项目,应该可以成功编译。

调试配置


配置OpenOCD路径

  1. 进入设置,点击“构建、执行、部署”栏的“嵌入式开发”。
  2. 在“OpenOCD位置”中,输入PY32_GCC_SDE安装路径下的OpenOCD可执行文件路径,例如:`C:\PuyaSDE\openocd\bin\openocd.exe`。

OpenOCD配置

采用ST-Link作为调试工具。在项目根目录下建立OpenOCD配置文件,内容如下。


# py32f030_openocd.cfg
# 指定调试探头接口
source [find interface/stlink.cfg]

# 设置适配器速度
adapter speed 500

# 指定目标芯片
source [find target/py32f030.cfg]

# 此项必须注释掉,否则无法进行调试!
#reset_config srst_only

# 连接后执行的初始化脚本
$_TARGETNAME configure -event reset-init {
# 确保复位后立即暂停
halt  
echo "*** Target halted after reset ***"
}


运行/调试配置

  1. 依次点击菜单栏上的“运行”、“编辑配置”,进入运行/调试配置界面。
  2. 点击“+”,添加新配置,选择“OpenOCD下载并运行”。
  3. 目标和可执行文件:都选择编译生成的文件。
  4. 调试器:选择PY32_GCC_SDE安装目录下的调试器。
  5. 面板配置文件:选择前面建立的文件。
  6. 重置:选择“停止”。

完成后,可以删除现有的自动生成的运行配置,只留新建的配置。

调试


开始调试

  1. 将ST-Link连接到目标板,上电。
  2. 在代码中设置断点。
  3. 在工具栏中点击“调试”按钮,应该会先下载固件,然后自动运行到断点。

加载SVD文件

  1. 在调试工具栏中,点击“外设”。
  2. 点击界面上的“加载.svd文件”,在PY32_GCC_SDE的安装目录下的svd文件夹中,找到目标芯片的svd文件。
  3. 在弹出的“选择要显示的外设”界面中,勾选最顶部的svd文件名,选择所有外设, 然后关闭界面。
  4. 在调试界面的“外设”标签页,即可看到各外设的寄存器值。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐