使用platformio平台和Arduino框架开发STM32G0,开发环境使用VSCode+PlatformIO插件;
1 自定义boards 因为Platformio中没有自己需要的STM32G070RB这个型号的板子,因此需要自己定义一个开发板型号。
1.1 添加一个自定义boards 首先这个是STM32系列,因此其boards目录如下(这里pio安装在默认位置):
1 C:\Users\userName\.platformio\platforms\ststm32\boards
在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 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 48 { "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" }
这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称;
1.2 Arduino框架下添加board定义 在目录
1 C:\Users\userName\.platformio\packages\framework-arduinoststm32
下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 # MonkeyPi STM32G070RB board Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072 Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768 Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.extra_flags=-D{ build.product_line} { build.enable_usb} { build.xSerial} -D__CORTEX_SC=0
1.3 添加Arduino板的引脚定义 打开目录:
1 C:\Users\userName\.platformio\packages\framework-arduinoststm32\variants\STM32G0xx
然后在这个目录的G070RB文件夹下复制 variant_generic.h 和 variant_generic.cpp 两个文件并更改名字为 variant_MONKEYPI_STM32_G070RB.h 和 variant_MONKEYPI_STM32_G070RB.cpp ,这个名字是之前自定义的板子名称,需要一致。
然后在variant_MONKEYPI_STM32_G070RB文件中根据板子硬件信息修改引脚定义,最后添加 SystemClock_Config 时钟配置函数如下:
1 2 3 4 5 6 7 8 9 10 WEAK void SystemClock_Config (void ) { #warning "SystemClock_Config() is empty. Default clock at reset is used." }
并修改文件的定义如下:
1 #if defined(ARDUINO_MONKEYPI_STM32_G070RB)
注:如果G070RB目录下没有ldscript.ld这个文件,还需要从G071等相似目录下拷贝一个,这个在链接时候需要用到。
2 使用 2.1 新建项目 在pio的home中新建项目,选择自定义开发板型号 MonkeyPi_STM32_G070RB:
2.2 编写测试Arduino代码 打开项目中 src/main.cpp 文件,编写Arduino代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <Arduino.h> void setup () { pinMode (PB5,OUTPUT); } void loop () { digitalWrite (PB5,1 ); delay (100 ); digitalWrite (PB5,0 ); delay (100 ); }
2.3 烧写程序 烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件:
1 2 3 4 5 6 [ env: MonkeyPi_STM32_G070RB] platform = ststm32 board = MonkeyPi_STM32_G070RB framework = arduino upload_protocol = cmsis-dap
修改完成后,点击platformio:Upload按钮即可完成烧写: