当前位置: 首页 > news >正文

使用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

在这个目录新建一个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"
}

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

1.2 Arduino框架下添加board定义

在目录

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

下有一个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.3 添加Arduino板的引脚定义

打开目录:

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 时钟配置函数如下:

/**
  * @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."
}

并修改文件的定义如下:

#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代码:

#include <Arduino.h>

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);

}
2.3 烧写程序

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

[env:MonkeyPi_STM32_G070RB]
platform = ststm32
board = MonkeyPi_STM32_G070RB
framework = arduino

upload_protocol = cmsis-dap

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

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

相关文章:

  • 推荐系统中的特征工程
  • Spring application.properties
  • uniapp 之 获取底部安全距离,状态栏高度等
  • 【Python数据分析 - 6】:Numpy中的逻辑运算
  • SpringBoot自定义banner
  • Hi3861 业务代码编写框架
  • Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]
  • BIO、NIO、IO多路复用(select/poll/epoll)、信号驱动IO、异步IO
  • Echarts y轴相关配置
  • 02.6 概率
  • 【web-渗透测试方法】(15.2)分析应用程序、测试客户端控件
  • 03.1线性回归
  • 【智能优化算法】基于觅食生境选择的改进粒子群算法(FHSPSO)附 Matlab代码
  • 密码相关----对称加密,非对称加密
  • 02.1、数据操作
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Android Studio:GIT提交项目到远程仓库
  • js作用域和this的理解
  • MD5加密原理解析及OC版原理实现
  • MYSQL 的 IF 函数
  • React组件设计模式(一)
  • vue自定义指令实现v-tap插件
  • 阿里云Kubernetes容器服务上体验Knative
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 和 || 运算
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 批量截取pdf文件
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 微信小程序--------语音识别(前端自己也能玩)
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • Hibernate主键生成策略及选择
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (三)Honghu Cloud云架构一定时调度平台
  • (十一)图像的罗伯特梯度锐化
  • (五)c52学习之旅-静态数码管
  • (五)网络优化与超参数选择--九五小庞
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)用.Net的File控件上传文件的解决方案
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .describe() python_Python-Win32com-Excel
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET gRPC 和RESTful简单对比
  • .NET Reactor简单使用教程
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 反射的使用
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • :not(:first-child)和:not(:last-child)的用法
  • @RestController注解的使用
  • @Service注解让spring找到你的Service bean