单片机STM32开发,大多数人都是在Windows下的Keil软件上进行的。Keil软件不仅要付费,编译还非常非常慢(据说优化做得好)。
在Linux的开发环境下,使用gcc编译、gdb调试,不仅软件是自由开源免费,编译速度还非常非常快。
就以我曾经做过的一个项目为例,同样的代码在同样配置的电脑上,在Windows系统的Keil下全部编译要8分钟左右,而在Linux的gcc下全部编译只需要几秒,编译时间是几十倍的关系。
以Semtech公司开源的LoRa节点代码为例,说明STM32 的Linux开发环境的搭建和使用,github项目链接为LoRaMac-node。
开发环境以Ubuntu18.04
为例,以默认的NucleoL073板子(STM32L073)进行演示。
参考文件development-environment.md。
先安装开发必备软件:
sudo apt install build-essential -y
安装GNU ARM-Toolchain,或源码安装(参考网站):
sudo apt install gcc-arm-none-eabi -y
安装OpenOCD,或源码安装(参考网站):
sudo apt-get install openocd -y
参考文件development-environment.md。
在项目的顶层目录下,创建build文件夹并进入:
mkdir build
cd build
生成makefile文件:
cmake -DCMAKE_TOOLCHAIN_FILE="cmake/toolchain-arm-none-eabi.cmake" ..
编译的结果为src/apps/LoRaMac/LoRaMac-classA*
STM32L073的cmake文件为cmake/stm32l0.cmake,编译工具链的cmake文件为cmake/toolchain-arm-none-eabi.cmake。如果是其他芯片平台,可以参考这些文件修改。
参考文件development-environment.md。
运行openocd软件(注意这个窗口不能关闭):
openocd -f interface/stlink-v2-1.cfg -f target/stm32l0.cfg
interface/stlink-v2-1.cfg
(stlink配置文件)和target/stm32l0.cfg
(芯片平台配置文件)都位于/usr/share/openocd/scripts
目录下。
运行gdb:
arm-none-eabi-gdb src/apps/LoRaMac/LoRaMac-classA
#此时已经进入gdb,以下命令前的(gdb)表示处于gdb程序中
(gdb) target extended-remote localhost:3333 #让gdb和openocd连接
(gdb) monitor reset halt #重置
(gdb) load #下载固件到板子
(gdb) thbreak main #在main函数中打断点
(gdb) continue #这时候将会停在断点处
(gdb) continue #这时候将会继续运行
运行gdb之后,可以打断点,单步调试,查看变量值 等等等等,比Windows下的Keil好用多了。