你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G070—使用platformio+arduino

[复制链接]
STMCU小助手 发布时间:2023-2-23 22:00
使用platformio平台和Arduino框架开发STM32G0,开发环境使用VSCode+PlatformIO插件;
* p5 p( H! [( w0 u7 s' J7 o) O5 j
1 自定义boards
因为Platformio中没有自己需要的STM32G070RB这个型号的板子,因此需要自己定义一个开发板型号。
  _3 Q5 S% R6 L0 A% x4 v  @
1.1 添加一个自定义boards
首先这个是STM32系列,因此其boards目录如下(这里pio安装在默认位置):
  1. C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码

/ G# N' p5 J) N7 y; e  S; i
在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 nucleo_g071rb.json文件 进行修改,内容如下:
  1. 1{' {0 w: H! [2 D$ ?
  2. 2  "build": {; e& w" a$ U/ L
  3. 3    "core": "stm32",# x$ \- f2 T8 a. u
  4. 4    "cpu": "cortex-m0plus",% H! F2 Q" S6 y2 [
  5. 5    "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
    7 {0 \; G) R+ w! a
  6. 6    "f_cpu": "64000000L",
    . W+ m& \( p1 d: m$ {8 L
  7. 7    "framework_extra_flags": {, }1 W- O% Z3 Q
  8. 8      "arduino": "-D__CORTEX_SC=0"
      n+ m" q* l; L0 X1 z/ ]9 u& r
  9. 9    },# k8 N$ O6 q* B4 T6 ?  @
  10. 10    "mcu": "stm32g070rbt6",
    & X+ G5 u4 T  Q5 {
  11. 11    "product_line": "STM32G070xx",( R; Q4 M% l9 e
  12. 12    "variant": "STM32G0xx/G070RBT"9 H+ G6 \1 l' a. T
  13. 13  },3 E( p* v) F) M, C1 x
  14. 14  "debug": {6 \& {( q+ q$ n' I# [
  15. 15    "default_tools": [3 J- D( F/ ^0 \9 ~
  16. 16      "stlink"
    3 O; z3 [  {/ o/ s2 U' h% L/ r
  17. 17    ],
    % z" u: d( y9 V; q- A
  18. 18    "jlink_device": "STM32G070RB",) C; o4 [* B7 j5 G% Y
  19. 19    "onboard_tools": [
    % a* t. X, {6 w5 W* M
  20. 20      "stlink"; u2 ]2 V, a% J3 X' Y; M) |' ^
  21. 21    ],
    $ u" A/ D5 z! d: V: t
  22. 22    "openocd_target": "stm32g0x",8 ~/ q, n: L  S
  23. 23    "svd_path": "STM32G070.svd"  I* Q5 e! ~6 g. s" X  o8 \
  24. 24  },
    3 N2 g/ F0 u0 n+ p
  25. 25  "frameworks": [
    % Z  Z+ Q, i+ y1 }! V# }
  26. 26    "arduino",: I. \- i! b: {3 l2 ?! i" A1 O9 L
  27. 27    "cmsis",
    & d: h/ N- C2 h- L
  28. 28    "libopencm3",/ x7 d- w" {7 E; t
  29. 29    "stm32cube",
    # z' ~: h3 `/ ?* f  H
  30. 30    "zephyr"9 n- h* x  n6 d+ E) l
  31. 31  ],
    1 f( }( i; C) E, s% ^
  32. 32  "name": "MonkeyPi_STM32_G070RB",! f* U& S5 ^. a$ {0 Z  E
  33. 33  "upload": {
    5 u4 k8 a  _( z7 v. O, M
  34. 34    "maximum_ram_size": 36864,
    , B  ?! R3 {" l9 D! f, R/ u
  35. 35    "maximum_size": 131072,
    + Z1 J# [, f$ h( i
  36. 36    "protocol": "stlink",4 ~7 y* Q2 `+ m( K' A1 s
  37. 37    "protocols": [
    5 x3 ~& Z# S$ w8 u" {4 U2 i
  38. 38      "stlink",
    0 t; M+ p! q0 ]# }  G
  39. 39      "jlink",
    ' t$ C0 C# |* V) m
  40. 40      "cmsis-dap",- @. y$ F, \6 ^
  41. 41      "blackmagic",
    + M& d( m7 Y! ~" Z* g
  42. 42      "mbed"1 [! ]4 r, a  ~2 C9 t; Q% f
  43. 43    ]
    7 H% V3 L3 s: d. J/ d  p
  44. 44  }," l$ H5 K7 D. i, ?/ b* m/ L
  45. 45  "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",
    ( n: n3 B0 l5 L( w) Z
  46. 46  "vendor": "ST"
    1 {# N# I+ g% X0 M
  47. 47}
复制代码

' q& F; K% S7 u* T1 Y% N
这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称;
3 y7 q# C- e0 `2 A, L
1.2 Arduino框架下添加board定义
在目录
  1. C:\Users\userName\.platformio\packages\framework-arduinoststm32
复制代码

9 z, C8 J5 D4 L1 a7 v0 N" j
下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下:
  1. 1# MonkeyPi STM32G070RB board
    8 [" S  |/ E" j, k
  2. 2Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB! _' D) J$ O8 ?# n9 h! V+ r
  3. 3Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB: w3 F2 r, \& T5 r4 _# U
  4. 4Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072
    $ e9 h, p+ j. [. K' |
  5. 5Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768! b; p- G3 k+ F, e7 P- z2 w
  6. 6Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus
    & \; q0 J, i- l# B/ t
  7. 7Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB4 N+ j# R8 j- G: d
  8. 8Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx( T/ \! f0 ?8 ^. g: J
  9. 9Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx( J+ j: M8 j3 u2 h/ W* \9 \
  10. 10Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT
    $ |& Q  X1 J8 X- \  G2 U  x
  11. 11Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math# E- X* s0 w  W1 h4 C- t
  12. 12Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
复制代码

, m0 C0 a' s0 N9 J' E/ {7 H$ x, A
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. 1/**
    - z( G% u, K/ v" J8 g, c
  2. 2  * @brief  System Clock Configuration
    3 I1 q* i7 R. A, y' W5 G
  3. 3  * @param  None
    1 @* y9 l9 J: r/ w2 \. k! O
  4. 4  * @retval None
    , I. @" i1 V  p' D2 v4 I5 c8 B
  5. 5  */
    9 y" \; h5 }, P/ w- s3 E( ^4 F
  6. 6WEAK void SystemClock_Config(void)3 Y5 a1 N2 M& _0 F% c
  7. 7{
    4 m& K) F# B5 I' H& e6 D
  8. 8  /* SystemClock_Config can be generated by STM32CubeMX */
    ( t: S9 T$ }. H; H: E7 o& e
  9. 9#warning "SystemClock_Config() is empty. Default clock at reset is used.": b  Z. C6 N5 c: Q8 D
  10. 10}
复制代码
' R8 G7 s. l) V% S* R2 p" O* [
并修改文件的定义如下:
  1. #if defined(ARDUINO_MONKEYPI_STM32_G070RB)
复制代码

# i) R. Q) _3 q% ?
注:如果G070RB目录下没有ldscript.ld这个文件,还需要从G071等相似目录下拷贝一个,这个在链接时候需要用到。
8 j  p) @) R0 @" z7 L
2 使用2.1 新建项目
在pio的home中新建项目,选择自定义开发板型号 MonkeyPi_STM32_G070RB:

4 g2 N$ ?# r8 I% J& b# F  H/ M
9 Y- w; S# a( n
微信图片_20230222220629.png
5 X/ p0 |" O8 o1 I
1 v( s5 {( m% _" r7 G
. }4 J) |. R8 z5 D
2.2 编写测试Arduino代码
打开项目中 src/main.cpp 文件,编写Arduino代码:
  1. 1#include <Arduino.h>
    3 F* W- I2 N+ X% \; i1 G2 K- h( Z
  2. 2
    2 p$ ?& K  o3 ^& i
  3. 3void setup() {0 A% d1 O: X, E1 H
  4. 4  // put your setup code here, to run once:
    , m" I# U3 n% ~! d0 O0 E4 B
  5. 5
    + `6 E# w4 O9 f; H. s! q/ C
  6. 6  pinMode(PB5,OUTPUT);
    ( P5 L+ R. T% U/ B9 p' g2 R+ p1 t
  7. 7  \1 i6 {4 q/ {' ^9 [
  8. 8}
    , U* D* ~8 |& \3 V
  9. 97 f' ?  r; V) q/ @: D
  10. 10void loop() {5 _7 v% ?+ ^7 D7 n* D  T% G
  11. 11  // put your main code here, to run repeatedly:
    1 r+ j; E. W7 A* V$ C& w
  12. 12
    5 `# w1 q/ C6 v$ w
  13. 13  digitalWrite(PB5,1);
    9 r1 T0 p1 d% o+ ?% j; }) s# @2 u
  14. 14  delay(100);
    ' N. N2 I9 u: T, q! ]
  15. 15  digitalWrite(PB5,0);( {$ a3 u9 T2 {( g; ?
  16. 16  delay(100);- K, v. w8 ^- a1 Y
  17. 17
    ' V8 ]- k1 P" J, W3 J6 b. @9 n$ v
  18. 18}
复制代码

3 W3 ?7 a" L2 X" c
2.3 烧写程序
烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件:
  1. 1[env:MonkeyPi_STM32_G070RB]
      B* \) `9 \+ j5 Y; U
  2. 2platform = ststm32  V, I, ^2 H" W& M9 X, s
  3. 3board = MonkeyPi_STM32_G070RB* w& U0 |! ]7 Z) R! m
  4. 4framework = arduino/ E* f1 M' |3 R, I) a  g# v
  5. 5
    2 M* w1 S/ }; g" a. N
  6. 6upload_protocol = cmsis-dap
复制代码

6 Z+ ]" m! H( g: h. K
修改完成后,点击platformio:Upload按钮即可完成烧写:
+ a0 _% E2 x* ~5 G" N+ r9 r  R
微信图片_20230222220316.png
9 e. t9 }0 Z( `5 w+ ?/ d( L+ j9 Z: s. r& u; w8 d1 s: G; v1 I
转载自:MakerInChina.cn0 j% M$ s) s( S6 Z8 @
收藏 评论0 发布时间:2023-2-23 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版