
这次做了一些使用GD32单片机的制作。虽然说GD32是和STM32寄存器级兼容的,确实可以直接使用ST提供的工具和代码,但是这么做明显是违反了ST的协议的(当然使用CMSIS是不违反协议的)。一个方案是使用GD提供的工具和源码库,但是这样如果在未来想要迁移回ST的话则又是给自己找麻烦,所以干脆使用开源的解决方案libopencm3,就没有问题了。顺便调试方案也选择OpenOCD吧,不然用SEGGER的二进制总觉得不太清真。
本文就简单记录下过程,方便以后参考。环境:Arch Linux。
安装必要的依赖
从官方源安装以下包:
# pacman -S arm-none-eabi-gcc arm-none-eabi-newlib
从AUR安装以下包:
- openocd
创建一个项目
这里基本参考libopencm3提供的例子进行:
$ mkdir project
$ cd project
$ git init .
$ git submodule add https://github.com/libopencm3/libopencm3
$ make -C libopencm3 -j5
$ wget -O libopencm3.rules.mk https://raw.githubusercontent.com/libopencm3/libopencm3-examples/master/examples/rules.mk
$ wget -O libopencm3.target.mk https://raw.githubusercontent.com/libopencm3/libopencm3-examples/master/examples/stm32/l1/Makefile.include
$ cp libopencm3/lib/stm32/f1/stm32f103x8.ld .
修改libopencm3.target.mk的最后一行为:
include ../libopencm3.rules.mk
随后建立一个新的src文件夹,随便从libopencm3-examples里面复制个例子过来(.c和Makefile),如下修改Makefile文件:
OPENCM3_DIR = ../libopencm3
LDSCRIPT = ../stm32f103x8.ld
include ../libopencm3.target.mk
直接make hex或者make bin应该就能生成二进制了
使用OpenOCD下载
这里使用SWD方式下载,需要稍微编辑下配置文件
$ cd /usr/share/openocd/scripts/interface
$ cp jlink.cfg jlink-swd.cfg
在里面加入一行 transport select swd 即可。
随后启动OpenOCD并进行烧录:
openocd -f interface/jlink-swd.cfg -f target/stm32f1x.cfg telnet localhost 4444 reset halt flash write_image erase project.hex reset