秋风清,秋月明;落叶聚还散,寒鸦栖复惊。相思相见知何日,此时此夜难为情
在mac下进行stm32的开发,我选择的方式是STM32CubeMX + Clion
这个具体来说就是STM32CubeMX进行配置生成HAL库的c代码,随后导入Clion,通过Clion的STM32CubeMX + openOCD的插件进行导入,最后通过Cmake + gcc-arm交叉编译链构建,通过openOCD进行下载调试(这里由于我水平有限,并且是临时借了一个较为小众的下载器,只能下载而不能在线调试,这个问题在最后会说明)
一些背景知识:
交叉编译:使用Cmake工具构建,使用arm-none-eabi-gcc编译。Cmake是用来构建整个工程的,由于是在电脑端编写c语言程序,想要编译二进制到单片机上就必须需要交叉编译,这就是为什么都用c语言但是可以生成不同机器能够运行的二进制代码。arm-none-eabi-gcc就相当于编译器,Cmake就是构建工具。所以,如果使用了别的第三方库,则需要在Cmakelist文件中修改,可以添加头文件(.h)的查询位置等其他参数命令
整个的程序编写下载流程我认为是这样的:
如果你够强,可以只下载标准库或者HAL库的所选芯片的包,然后一行一行自己全码出来
但是更为便捷和快速容易上手的方式是通过CubeMX做一些基础配置并生成代码,生成的代码中能够包含Cmake工具进行构建所需的配置文件,所以在导入Clion后根据CubeMX的配置文件进行构建(要安装一个插件)就可以完全将工程转入Clion环境下。CubeMX生成的代码会提供出个人用户修改的余地,能够添加自己的逻辑函数。随后只要c语法没有问题就能够构建编译生成出单片机可执行的二进制代码,再通过OpenOCD进行下载或者调试
首先下载安装STM32CubeMX,这个直接从官网上下载就可以
但是在mac上安装的时候直接双击是不行,要右键显示包内容,然后在打开一个终端程序,这一部分百度经验上都有
建立工程选择芯片/开发板,随后配置引脚等等
我使用的是最新版的Cube,但是其内容都与之前的类似,具体的配置也与之前版本的大概相同可以参见这位大哥的博客
https://blog.csdn.net/toopoo/article/list/4?t=1& 以及一些别的Cube配置教程
在最后projrct manager的时候,一定要选择SW4STM32的Toolchain/IDE
再导入工程前在Clion的Configure->Plugins中直接搜索stm32
这个插件
随后导入刚刚生成的代码
全选所有的代码剩下都默认
导入后不用管他的自动构建
先在Clion -> Preferences 中添加一个交叉编译链,gcc-arm的交叉编译链可以通过brew安装可以参考https://gist.github.com/joegoggins/7763637
brew是mac下的一个包管理软件,通过terminal命令行执行
交叉编译链也可以直接下载安装
总之就是Clion中新添加的交叉Toolchains(这里我命名是stm32-gcc-arm)的C Compiler与C++ Compiler要改为arm-none-eabi-gcc和g++,如下图
随后在左侧Cmake中再新建一项Cmake实例,注意这时要把Toolchain改为刚刚建好的Toolchain
下面是通过CubeMX生成的配置文件使用Cmake进行更新构建
更新后如果发现没有使用我们配置的Cmake实例,那我们就手动选择后在构建一遍,构建就是左边的小锤子
至此,如果没有报错,那就是已经生成了单片机可以执行的二进制文件
下一步就是链接单片机进行程序的下载或调试
在链接好硬件之后,从mac的关于本机->系统报告->usb中我们惊喜的发现,居然不需要安装驱动就直接识别,这是当时为数不多使我开心的消息
之后返回Clion中在Run->Edit Configuration中添加调试文件Board config file
OpenOCD提供了大量开发板的配置文件(Board config file),点击Assist...如果你的开发板幸运的在其中那么就只需要选择对应的
如果没有那么只能自己写一个.cfg文件以适配自己的硬件
这个问题我没有很好的解决我简单查看几个已有的.cfg文件后就自己瞎编了两行,能够烧写下载程序,但并不能在线调试,我也希望能有高人指点一下,我先放出我的调试文件代码,保存为.cfg文件并添加为Board config file即可,此代码可以烧写下载但不能在线调试
set WORKAREASIZE 0x8000
source [find interface/cmsis-dap.cfg]
source [find target/stm32f1x.cfg]
此时点击运行就会烧写程序在开发板上运行,而自己需要的逻辑代码就可以在CubeMX生成代码留出的空间添加
我是用的下载器是 野火秉火STM32仿真器调试器 它遵循CMSIS-DAP标准,既可以使用JTAG端口也可以使用SW端口,本身如果在windows下使用keil软件会比较容易进行链接和在线调试,并且官方也给出了驱动不过是在windows环境下