最早试图在Linux下开发STM32,因为资料很少,走了不少弯路,现在记录下来,方便有需要的人。
准备依赖的软件
首先让我的64位linux系统支持32位程序:
# dpkg --add-architecture i386
# apt-get update
# apt-get install ia32-libs
接下来准备需要安装的一些软件:
从 https://launchpad.net/gcc-arm-embedded 下载 ARM 版的GCC,解压后将其bin目录放到PATH里。
安装opencd和cmake:
$ sudo apt-get install openocd git
创建项目
然后下载STM32的固件库 http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257890 并将其解压出来,这里假设解压路径为~/libraries/STM32F10x_StdPeriph_Lib_V3.5.0/
接下来创建项目,创建项目可以从我做的一个模板项目开始,下载 https://chou.it/public/stm32-template.tar.gz
然后打开CMakeList.txt,将第一行的PROJECT(hello-world)里的hello-world改成你自己的项目名字,第三行的PERIPH_LIB指向你磁盘上的STM32固件库的地址,然后在项目目录下执行cmake来生成makefile:
$ cmake -G 'Unix Makefiles'
然后执行make来编译项目:
$ make
如果执行成功,会生成elf, bin, hex 三个文件,第一个elf文件是用来给GDB调试用的。
p.s. 如果需要增加其他的固件库函数,则只需要在CMakeList.txt中的STARTUP中加上即可,不需要复制到项目目录下。
烧录和调试
在项目目录下有个openocd.cfg,默认配置是给 ST-Link/v2和STM32F1X使用的,如果需要用其他jtag仿真器或者MCU则需要将里面的interface和target改成对应的配置文件。
配置改好后,只需要执行openocd即可。
openocd启动后,执行以下命令来将生成的bin文件烧录到MCU中去:
$ make burn
烧录成功后MCU会挂起,所以片上程序不会立刻执行,需要启动则需要复位MCU,或者开始调试。
调试可以使用eclipse或者直接使用gdb来调试,该命令已被cmake简化,只需要执行:
$ make gdb
即可启动,效果如下:
如果需要使用串口和设备通讯,个人推荐使用kermit,安装kermit:
$ sudo apt-get install kermit
安装好后就可以使用项目目录下的 ttyUSB0 或者 ttyUSB1 来链接 /dev/ttyUSB0或者 /dev/ttyUSB1的串口,也可以改下这个文件来修改具体的串口参数比如波特率,设备等。
IDE集成
使用NetBeans或者Eclipse建立一个基于现有代码的项目,使用CMake生成的make来构建即可。要调试则创建gdb远程调试,端口为3333,主机为localhost即可,具体步骤网上很多就不详细说了。
Last modified on 2014-01-21