STM32F7学习笔记7:Clion开发STM32程序【以LED程序为例】
1. Clion嵌入式开发
1.1 支持的硬件类型
CLion 支持与 GCC 或 IAR 工具链兼容的任何硬件的嵌入式开发。例如:基于 ARM 的 MCU,如 STM32 系列、Xtensa(ESP8266、ESP32)、mips32(pic32)、AVR8(Arduino)、RISC-V。
对于 STM32 MCU 和板,CLion 已经与 STM32CubeMX 集成。可以创建并打开 .ioc 项目,并将它们自动转换为 CMake。
2. 编译器工具链
- 对于ARM Coretex-M 和Cortex-R MCU,使用GNU ARM toolchain。
- 还支持与 GCC 兼容的非 ARM 芯片,工具链设置类似于 ARM
3. 下载和调试
Clion支持基于OpenOCD和GDB Server的片上调试。
GDB 服务器是一个更通用的选项。它涵盖了各种特定于供应商的案例,例如 ST-Link/V2、Segger J-Link、QEMU、独立 OpenOCD GDB 服务器、PE-Micro 等。
在 CLion 中,这两个选项都有特殊的运行/调试配置:分别是 OpenOCD 下载和运行和嵌入式 GDB 服务器。对于 STM32CubeMX 项目,会自动创建 OpenOCD 配置。
这些配置允许切换客户端调试器。您可以直接在配置设置中选择工具链的 GDB 或 CLion 的捆绑 GDB(适用于 ARM 设备)。
当您启动调试会话时,CLion 将调试器连接到 MCU 并上传二进制文件。之后,可以使用整套 CLion 调试功能来调试片上运行的固件,其中包括内存和反汇编视图、ARM 设备的外设视图以及芯片重置操作。
PlatformIO 项目可以使用 PIO 统一调试器进行调试,并且还可以使用所有调试功能。
缺乏 GDB 支持的平台不支持调试。在这种情况下,应该使用特定的实用程序(例如 AVR 的 Avrdude)来刷新目标芯片。
3. 安装Arm GNU Toolchain
在https://developer.arm.com/Tools%20and%20Software/GNU%20Toolchain中点击Download Arm GUN Toolchain,进入下载界面后,选择arm-gnu-toolchain-13.2.rel1-mingw-w64-i686-arm-none-eabi.exe下载。
安装完成后,在终端运行 arm-none-eabi-gcc -v
如下图:
在下载界面,会看到很多版本的交叉编译工具,具体区别如下表
名称 | 说明 |
---|---|
abi(application binary interface) | 二进制程序接口 |
eabi(embedded) | 嵌入式二进制程序接口 |
arm-none-eabi | 无操作系统,不支持系统调用的函数,如fork等。其使用专用于嵌入式开发的C程序库 |
arm-none-linux-eabi | 用于linux,使用glibc。 |
对应的GCC编译器区别如下:
名称 | 说明 | 适用场景 |
---|---|---|
arm-none-eabi-gcc | 编译裸机程序或系统 | ARM7/Cortex-M/Cortex-R,可调用newlib库 |
arm-none-linux-gnueabi-gcc | 编译ARM架构的Linux程序 | 有uboot/linux kernel/linux应用,适用于ARM9/ARM11/Cortex-A。 |
arm-linux-gnueabi-gcc | 编译armel架构的Linux程序 | 适用于armel架构 |
arm-linux-gnueabihf-gcc | 编译armhf架构的Linux程序 | 适用于armhf架构 |
arm-eabi-gcc | android编译器 | |
armcc | 功能同arm-none-eabi-gcc,Keil MDK内置,收费。 |
4. 安装OpenOCD
下载地址:https://gnutoolchains.com/arm-eabi/openocd/
2. Clion创建项目
1. Clion设置路径
然后点击Create,Clion自动打开STM32CubeMX。
2. STM32CubeMX设置项目
如上一节所述
最后一步设置时,编译器选择 STM32CubeMXIDE,如下图:
注意事项:
- 设置Project Name要与CLion设置的工程名字相同
- 设置Project Location为包括工程文件夹的路径,而不是工程文件夹内
- Toolchain/IDE要选择 STM32CubeIDE 勾上Generate Under Root
- Application Structure Basic或者Advanced均可
- Base就是直接在项目根目录下生成Inc和Src目录和.s文件,而Advanced是多了一个Core目录,将.s文件放在Startup目录里面,本质上没有区别
- Code Generator 选择 Copy only the necessary library files
- 勾上 Generate peripheral initializtion as a pair of '.c/.h' files per peripheral
点击右上角 GENERATE CODE,要提示覆盖才是正确的!
3. Clion 项目工具链
Clion中项目如下图所示:
配置相应的STM32工具链:
Cmake设置工具链,如下图
设置后,可看到cmake信息,如下图:
4. 编译
编译有错误,建议删掉除了ioc文件以外的所有文件重新生成
5. 配置调试
在Run/Debug Configuration 新增一个OpenOCD项目,配置如下:
在Board Config file中新建一个 stm32f7.cfg
# 选择 dap-link调试器
adapter driver cmsis-dap
# 使用 swd 调试接口
transport select swd
# 0x10000 = 64K Flash大小(可省略,openocd会自动识别容量)
# set FLASH_SIZE 0x20000
# 目标芯片设定为 STM32F1 系列
# source [find target/stm32f1x.cfg]
# 目标芯片设定为 STM32F4 系列
#source [find target/stm32f4x.cfg]
# 目标芯片设定为 STM32F7 系列
source [find target/stm32f7x.cfg]
# 下载速度10MHz(可省略,默认是2MHz)
adapter speed 10000
# 如果是调试 STM32F1 系列,取消注释这一条
# reset_config trst_and_srst
reset_config srst_only
设置后可以调试程序。
参考文献:
https://www.jetbrains.com/help/clion/embedded-overview.html#build-system