• STM32G0开发笔记-Platformio平台下使用libopencm3库


    使用Platformio平台的libopencm3开发框架来开发STM32G0,开发环境为VSCode+PIO插件,这里以开发STM32G070RB芯片为例介绍。
    【原文:https://makerinchina.cn/article_4361d3d31fc2.html】

    1 自定义开发板

    由于使用的STM32G070RB在pio的libopencm3框架中没有这个型号,因此首先需要先定义一个自定义开发板型号;

    • 安装ST-STM32 platforms
      在Platformio的platforms中搜索STM32,然后安装ST-STM32 platforms框架,

    • 根据已有的相似型号进行更改配置json文件
      在PIO安装目录找到对应平台开发板文件夹,比如我这里pio安装在默认的用户目录,则STM32开发板的路径如下:

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

    复制一个相近的板子型号的json配置文件命名为 MonkeyPi_STM32_G070RB.json,更改mcu型号、svd等信息;这里复制修改 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"
    }
    
    2 新建测试项目
    • 新建项目,并选择开发板型号为自定义板子名称 MonkeyPi_STM32_G070RB,开发框架选择libopencm3:

    在这里插入图片描述

    • 在项目目录 src下新建主程序文件 main.c ,内容如下:
    /**
     * @file main.c
     * @author MakerInChina (makerinchina.cn)
     * @brief 
     * @version 0.01
     * @date 2022-09-04
     * 
     * @copyright Copyright (c) 2022
     * 
     */
    
    #include 
    #include 
    
    int main(void)
    {
        
        //system clock
        rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
    
        //gpio setting
        rcc_periph_clock_enable(RCC_GPIOC);
        gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);
    
        while (1)
        {
            //toggle gpio
            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文件如下:
    [env:MonkeyPi_STM32_G070RB]
    platform = ststm32
    board = MonkeyPi_STM32_G070RB
    framework = libopencm3
    
    upload_protocol=cmsis-dap
    debug_tool=cmsis-dap
    
    • 然后就可以进行烧录和调试了(使用openocd方式进行下载和调试):

    在这里插入图片描述

  • 相关阅读:
    【FPGA】verilog语法的学习与应用 —— 位操作 | 参数化设计
    Ceph入门到精通-Linux内核网络参数优化小结
    c语言经典算法—二分查找,冒泡,选择,插入,归并,快排,堆排
    maven
    「SpringBoot」06 单元测试
    一生一芯10——verilator v5.008环境搭建
    Linux中通过什么命令可以过滤控制字符?
    Spring Boot 基础使用
    代码随想录Day19 LeetCode T669修剪二叉搜索树 LeetCode T108将有序数组转化为二叉搜索树 T538 把二叉搜索树转化为累加树
    JavaScript 布尔类型(boolean) 和为定义类型(undefined)
  • 原文地址:https://blog.csdn.net/roctwo/article/details/127042978