使用Platformio平台的libopencm3开发框架来开发STM32G0,开发环境为VSCode+PIO插件,这里以开发STM32G070RB芯片为例介绍。
1 自定义开发板
由于使用的STM32G070RB在pio的libopencm3框架中没有这个型号,因此首先需要先定义一个自定义开发板型号;
安装ST-STM32 platforms
在Platformio的platforms中搜索STM32,然后安装ST-STM32 platforms框架,
根据已有的相似型号进行更改配置json文件
在PIO安装目录找到对应平台开发板文件夹,比如我这里pio安装在默认的用户目录,则STM32开发板的路径如下:
1
| C:\Users\userName\.platformio\platforms\ststm32\boards
|
复制一个相近的板子型号的json配置文件命名为 MonkeyPi_STM32_G070RB.json,更改mcu型号、svd等信息;这里复制修改 nucleo_g071rb 这个json文件,修改后如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| { "build": { "core": "stm32", "cpu": "cortex-m0plus", "extra_flags": "-DSTM32G0xx -DSTM32G070xx", "f_cpu": "64000000L", "framework_extra_flags": { "arduino": "-D__CORTEX_SC=0" }, "mcu": "stm32g070rbt6", "product_line": "STM32G070xx", "variant": "STM32G0xx/G070RBT" }, "debug": { "default_tools": [ "stlink" ], "jlink_device": "STM32G070RB", "onboard_tools": [ "stlink" ], "openocd_target": "stm32g0x", "svd_path": "STM32G070.svd" }, "frameworks": [ "arduino", "cmsis", "libopencm3", "stm32cube", "zephyr" ], "name": "MonkeyPi_STM32_G070RB", "upload": { "maximum_ram_size": 36864, "maximum_size": 131072, "protocol": "stlink", "protocols": [ "stlink", "jlink", "cmsis-dap", "blackmagic", "mbed" ] }, "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html", "vendor": "ST" }
|
2 新建测试项目
- 新建项目,并选择开发板型号为自定义板子名称 MonkeyPi_STM32_G070RB,开发框架选择libopencm3:
- 在项目目录 src下新建主程序文件 main.c ,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
#include <libopencm3/stm32/rcc.h> #include <libopencm3/stm32/gpio.h>
int main(void) { rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
rcc_periph_clock_enable(RCC_GPIOC); gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);
while (1) { gpio_toggle(GPIOC,GPIO12);
for(int i=0; i<4000000; i++){ __asm__("nop;"); } }
return 0; }
|
这个测试程序中 先使用 rcc_clock_setup
函数配置系统时钟为64MHz,然后使用 gpio_mode_setup 函数设置GPIO模式,最后调用 gpio_toggle 对GPIO进行翻转操作。
3 编译和下载
- 下载方式需要根据自己的硬件进行修改,在项目的platformio.ini文件中可以配置,这里使用DAPLink SWD方式下载,因此将upload_protocol更改为cmsis-dap,则platformio.ini文件如下:
1 2 3 4 5 6 7
| [env:MonkeyPi_STM32_G070RB] platform = ststm32 board = MonkeyPi_STM32_G070RB framework = libopencm3
upload_protocol=cmsis-dap debug_tool=cmsis-dap
|
- 然后就可以进行烧录和调试了(使用openocd方式进行下载和调试):