软件环境
CLion
STM32CubeMX
MinGW
OpenOCD
arm-none-eabi-gcc
ST-LINK V2驱动
J-LINK 驱动
USB 串口(CH340)驱动
硬件环境
- STM32H750VBT6
- 星光 MINI_STM32H7 开发板
- ST-Link V2下载器
软件安装
官方最新版CLion + 破解
STM32CubaMX 【建议版本6.5.0 IDE选SW4STM32】
安装完成后建议修改 STM32Repository 位置(尽量不要有中文)
OpenOCD:OpenOCD是用于对STM32进行下载仿真的工具,是一个开源软件包
- Windows版本下从这里下载,下载好解压到一个目录就行
MinGW
Clion需要使用MinGW环境来配置工具链
MinGW: Minimalist GNU for Windows- 下载完成后把
Basic Setup
里面的组件全部勾选(也可也去掉不需要的语言编译器比如Objective-C)。
- 下载完成后把
Arm-none-eabi-gcc
Windows下载:https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads ,选择ZIP压缩包形式的
环境配置
配置系统的环境变量,在Path环境变量里面添加
- MinGW:
你的路径
\MinGW\bin - gcc-arm-none-eabi:
你的路径
\gcc-arm-none-eabi-10.3-2021.10\bin
完成后终端验证(有信息则成功)
- gcc -v
- arm-none-eabi-gcc -v
CLion设置配置
打开CLion设置 > 构建、执行、部署 > 工具链
建议新建一个新配置并改名为
MinGW STM32
详细配置,根据你的MinGW,gcc-arm-none-eabi(gcc,g++,gdb)进行设置
返回 CLion设置 > 构建、执行、部署 检查
CMake
确认一下工具链是否正确进入CLion设置 > 构建、执行、部署 > 嵌入式开发 设置安装完成的STM32CubeMX,OpenOCD路径
项目创建
期间弹出的板卡配置选择默认关闭
使用
CLion
创建STM32CubeMX项目,会自动生成一个【*.ioc】文件点击打开STM32CubeMX创建项目默认生成项目芯片型号是
STM32F030F4Px
,更改型号为STM32H750VBT6然后确认直接点击Project Manager
注意:就是在下面的设置中项目名称和路径一定要和在Clion中建立的一致,这样生成的工程文件才会覆盖Clion中的文件,否则会另外生成一个文件夹
- Toolchain / IDE:选择
SW4STM32
(STM32CubeMX版本高于6.5.0则没有),如果不想安装6.5.0,CLion官方文档有解决方法。STM32CubeMX项目 |CLion 文档 (jetbrains.com)
- Toolchain / IDE:选择
可以注意一下堆栈大小,一般0x200~0x400就够用了
点击
Code Generator
勾选 Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral不勾:所有初始化代码都生成在main.c
勾选:初始化代码生成在对应的外设文件。 如GPIO初始化代码生成在gpio.c中。等待代码生成完成,关闭CubeMX,回到Clion,已经重新生成了相关的HAL代码,并设置了对应的型号
在代码的根目录新建
config
目录并创建配置文件daplink.cfg
1
2
3
4
5
6
7
8# 选择ST-link
source [find interface/stlink.cfg]
# 传输格式
transport select hla_swd
# 芯片类型【根据自己需要更改相应的设置】
source [find target/stm32h7x.cfg]
# 下载频率 = 10MHz
adapter speed 10000
项目运行并烧录
CLion中组织编译规则都是基于CMakeLists.txt文件
如果熟悉CMake应该会觉得很方便很强大,不熟悉的也没事,基本不需要额外修改什么,只需要知道怎么在这个文件里面添加源码目录和include文件夹的路径就行了
1 | # include目录【*.h】 |
代码分包建议
CubeMX生成的主函数和初始化相关的文件都在Core
文件夹中,为了便于管理自己的项目,我一般会将自己的代码和CubeMX生成的代码解耦,自己创建一个User
文件夹,结构如下:
1 | User # 用户自定义代码 |
关于User文件直接将
main.c
和main.h
移动到User/Source
和User/Include
中,随后修改CMakeList
,再添加自己需要的代码另一种则是自己建立
main_user.c
和main_user.h
,分别放入两个文件夹,在main_user.c
中定义setup()
和loop()
函数,并在main_user.h
中声明,修改CMakeList
,将这俩包含进main.h
随后填入CubeMX生成的main.c
对应位置,随后到这两个函数中实现自己的初始化和主循环逻辑。
–END 至此简单编译运行HAL库代码–