STM32F7学习笔记7:Clion开发STM32程序【以LED程序为例】

Dr.Guo
发布于 2024-02-05 / 27 阅读
0
0

STM32F7学习笔记7:Clion开发STM32程序【以LED程序为例】

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


评论