• 使用platformio+arduino开发自定义板子STM32G070


    使用platformio平台和Arduino框架开发STM32G0,开发环境使用VSCode+PlatformIO插件;

    1 自定义boards

    因为Platformio中没有自己需要的STM32G070RB这个型号的板子,因此需要自己定义一个开发板型号。

    1.1 添加一个自定义boards

    首先这个是STM32系列,因此其boards目录如下(这里pio安装在默认位置):

    C:\Users\userName\.platformio\platforms\ststm32\boards
    
    • 1

    在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 nucleo_g071rb.json文件 进行修改,内容如下:

    {
      "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"
    }
    
    
    • 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

    这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称;

    1.2 Arduino框架下添加board定义

    在目录

    C:\Users\userName\.platformio\packages\framework-arduinoststm32
    
    • 1

    下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下:

    # 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1.3 添加Arduino板的引脚定义

    打开目录:

    C:\Users\userName\.platformio\packages\framework-arduinoststm32\variants\STM32G0xx
    
    • 1

    然后在这个目录的G070RB文件夹下复制 variant_generic.h 和 variant_generic.cpp 两个文件并更改名字为 variant_MONKEYPI_STM32_G070RB.h 和 variant_MONKEYPI_STM32_G070RB.cpp ,这个名字是之前自定义的板子名称,需要一致。

    然后在variant_MONKEYPI_STM32_G070RB文件中根据板子硬件信息修改引脚定义,最后添加 SystemClock_Config 时钟配置函数如下:

    /**
      * @brief  System Clock Configuration
      * @param  None
      * @retval None
      */
    WEAK void SystemClock_Config(void)
    {
      /* SystemClock_Config can be generated by STM32CubeMX */
    #warning "SystemClock_Config() is empty. Default clock at reset is used."
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    并修改文件的定义如下:

    #if defined(ARDUINO_MONKEYPI_STM32_G070RB)
    
    • 1

    注:如果G070RB目录下没有ldscript.ld这个文件,还需要从G071等相似目录下拷贝一个,这个在链接时候需要用到。

    2 使用
    2.1 新建项目

    在pio的home中新建项目,选择自定义开发板型号 MonkeyPi_STM32_G070RB:

    在这里插入图片描述

    2.2 编写测试Arduino代码

    打开项目中 src/main.cpp 文件,编写Arduino代码:

    #include 
    
    void setup() {
      // put your setup code here, to run once:
    
      pinMode(PB5,OUTPUT);
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    
      digitalWrite(PB5,1);
      delay(100);
      digitalWrite(PB5,0);
      delay(100);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    2.3 烧写程序

    烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件:

    [env:MonkeyPi_STM32_G070RB]
    platform = ststm32
    board = MonkeyPi_STM32_G070RB
    framework = arduino
    
    upload_protocol = cmsis-dap
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改完成后,点击platformio:Upload按钮即可完成烧写:

    在这里插入图片描述
    from: https://makerinchina.cn/article_6c6ee14f7cc2.html

  • 相关阅读:
    IDEA翻译插件Translation报错 -> 更新 TKK 失败,请检查网络连接问题,已解决
    Vim实用技巧_0.vim - introduction
    go语言基础操作--二
    2.5 注释
    【K8S】用minikube start 建立K8S集群--20220901
    Linux——界面和用户
    Python文件——使用Python读取txt文件
    每个.NET开发都应掌握的C#特性(Attribute)知识点
    vue3 nextTick
    k8s之PV、PVC和StorageClass
  • 原文地址:https://blog.csdn.net/roctwo/article/details/126684367