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

STM32G070—使用platformio+arduino

[复制链接]
STMCU小助手 发布时间:2023-2-23 22:00
使用platformio平台和Arduino框架开发STM32G0,开发环境使用VSCode+PlatformIO插件;
8 X5 D; ^8 Q2 Z  J4 m& t) ^  J
1 自定义boards
因为Platformio中没有自己需要的STM32G070RB这个型号的板子,因此需要自己定义一个开发板型号。

9 t2 G: {% b1 t) }2 E
1.1 添加一个自定义boards
首先这个是STM32系列,因此其boards目录如下(这里pio安装在默认位置):
  1. C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码

' Z+ [' |. @1 k3 A. P
在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 nucleo_g071rb.json文件 进行修改,内容如下:
  1. 1{* c: [! T9 [$ u, ?
  2. 2  "build": {# z( Z9 r" p% {! K3 r
  3. 3    "core": "stm32",
      R& r3 {; Q* X6 G) y
  4. 4    "cpu": "cortex-m0plus",! ~' q8 L3 O+ _; u% [0 q+ k
  5. 5    "extra_flags": "-DSTM32G0xx -DSTM32G070xx",$ z' T* G, i% a
  6. 6    "f_cpu": "64000000L",
    9 k3 t2 W  {* T6 I( [
  7. 7    "framework_extra_flags": {8 t: V5 X8 u: r
  8. 8      "arduino": "-D__CORTEX_SC=0"' R! I: M% S. O0 c2 r7 k- w
  9. 9    },  ?4 Z+ z. F5 L9 E. r
  10. 10    "mcu": "stm32g070rbt6",
    $ y  j! }) Z5 p3 ?
  11. 11    "product_line": "STM32G070xx",4 V5 w3 k$ B6 E" z# M6 ?/ d, G, X- d& n
  12. 12    "variant": "STM32G0xx/G070RBT"
    9 v0 Q( q) r" B4 v; b
  13. 13  },
    , t" [; M6 j. p( r: X1 M
  14. 14  "debug": {" \' a: h+ m$ x! b: d/ D9 b
  15. 15    "default_tools": [# _8 I. ?. {  x+ g
  16. 16      "stlink"2 Q% d- z& N, T7 f" V  i! H9 R" f
  17. 17    ],
    5 m' O1 v+ S) o7 w
  18. 18    "jlink_device": "STM32G070RB",/ y2 _; ^6 e4 N, W! p
  19. 19    "onboard_tools": [
    0 W5 j( z* A' }) D
  20. 20      "stlink"
    % D" b7 @5 g. U  u6 D, _$ A
  21. 21    ],
    6 U/ ?+ b( x# M' J! F9 Z, F
  22. 22    "openocd_target": "stm32g0x",
    9 Y8 K# h9 R: m! N& W7 Z6 k+ o( v5 y
  23. 23    "svd_path": "STM32G070.svd"
    / ?9 Z1 H+ D( T0 }
  24. 24  },4 w1 v9 T& N4 a
  25. 25  "frameworks": [/ {" |  i; U8 U/ s- B% N
  26. 26    "arduino",! O( H8 f8 T# h. C& C4 b& @1 _
  27. 27    "cmsis",
    1 n: s  U3 J' t. ^  B" J* f- N$ c
  28. 28    "libopencm3",* x8 e  B9 o+ Z5 y' |) j
  29. 29    "stm32cube",
    $ I0 ~: G# G( }5 Q1 T
  30. 30    "zephyr"' m3 q; }. q1 j9 n6 h% ~
  31. 31  ],2 N/ w* H, q. j9 X
  32. 32  "name": "MonkeyPi_STM32_G070RB",0 b8 }) \* Q8 q+ q  N  I0 l3 ^
  33. 33  "upload": {' h# h. i6 v2 z  B$ @/ o' S% W
  34. 34    "maximum_ram_size": 36864,/ o3 s6 w( s0 w# o
  35. 35    "maximum_size": 131072,
    # i: Q5 k$ @  b4 e1 F$ C& o
  36. 36    "protocol": "stlink",6 L% l6 O% s+ w
  37. 37    "protocols": [
    & e% o# y# U& X8 }) l0 K
  38. 38      "stlink",( Z8 ^1 n! J7 ]4 C' X# G
  39. 39      "jlink",
    ' k3 j: w8 S& f
  40. 40      "cmsis-dap",
    ! y5 F8 Z6 v6 a
  41. 41      "blackmagic",' ]) }. z) Y/ y+ [- g! q0 s7 X
  42. 42      "mbed"
    ) w" C5 Y; a/ Q7 h2 b( P, C
  43. 43    ]
      F( W- x1 D3 b* I+ ^+ P3 q% p
  44. 44  },' T0 R, B2 J  `& h. y2 V' p
  45. 45  "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",) v2 B! ^* A* [! ~. |2 t; _) I% Y8 s7 [. }, Z
  46. 46  "vendor": "ST"5 H0 ^) n2 q: {* R$ c& w- x, V
  47. 47}
复制代码

8 j0 j: }3 l. G
这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称;

- k* @  [9 z. \
1.2 Arduino框架下添加board定义
在目录
  1. C:\Users\userName\.platformio\packages\framework-arduinoststm32
复制代码

$ c+ P( f9 N% h$ V/ G
下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下:
  1. 1# MonkeyPi STM32G070RB board( c, M8 G  |* x" `. x
  2. 2Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB8 ^6 p. K5 W$ |) H/ v: p
  3. 3Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB3 ?: l" h% v6 A) j- v: g
  4. 4Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072
    # e) w  D/ V! v& f
  5. 5Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768
    + [. P: R4 |- u
  6. 6Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus
    * j* y8 O' H+ `0 J: ~
  7. 7Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB
    5 Q; v9 N2 J3 A6 i" l* l% f& g. q
  8. 8Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx
    ' j1 y0 s2 J# Q$ U- }
  9. 9Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx0 w  l/ |$ Q) Y& ?# Z+ {
  10. 10Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT
      G4 j7 L1 ~# u! ?9 y; ?# z  @' |9 Z
  11. 11Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math6 _, d- B* g% W# ^
  12. 12Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
复制代码

6 G# ^$ o- {& O! x: b
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/**
    1 J8 W) R0 g1 h: E/ l. J% A
  2. 2  * @brief  System Clock Configuration  A7 P3 I3 ?5 r5 C  s2 C& m, p2 q
  3. 3  * @param  None
    5 }+ v3 S6 G; p& y- a& E. ]# r. ]# W
  4. 4  * @retval None
    8 q. `7 S  p3 c
  5. 5  */; J& d/ C% O3 q. j7 {4 ]
  6. 6WEAK void SystemClock_Config(void)
    + A/ a: |- V7 _6 _, p# V9 r5 B' X
  7. 7{+ E6 k. h+ c+ ?/ x) i2 r# k
  8. 8  /* SystemClock_Config can be generated by STM32CubeMX */
    ( W% }3 p; K6 W5 o
  9. 9#warning "SystemClock_Config() is empty. Default clock at reset is used.". M% x1 y: h' }9 }; t8 g8 k
  10. 10}
复制代码

9 R2 _7 E* Q3 o) e
并修改文件的定义如下:
  1. #if defined(ARDUINO_MONKEYPI_STM32_G070RB)
复制代码

( S4 o6 ]6 `4 v% U1 O8 g" p
注:如果G070RB目录下没有ldscript.ld这个文件,还需要从G071等相似目录下拷贝一个,这个在链接时候需要用到。

; d2 X# e) Y  J
2 使用2.1 新建项目
在pio的home中新建项目,选择自定义开发板型号 MonkeyPi_STM32_G070RB:

2 L  T3 o: J3 i/ h, r
$ [3 m, L9 h5 k4 N0 O
微信图片_20230222220629.png # p3 }5 U) h5 {1 V' I) A
+ {+ R' K/ k# Z

1 v$ [% ?: `. O4 V; o2.2 编写测试Arduino代码
打开项目中 src/main.cpp 文件,编写Arduino代码:
  1. 1#include <Arduino.h>
    2 h. d5 ?; F' g3 i" m6 E9 D
  2. 2: K* P/ l7 ]  ~! _/ F& _
  3. 3void setup() {( T$ N) P( [0 M- J5 J& y0 v3 n- [
  4. 4  // put your setup code here, to run once:
    2 ?, k8 J6 x/ g( w0 F4 I
  5. 5
    : y: ~8 P* y" r2 n0 }( T9 m
  6. 6  pinMode(PB5,OUTPUT);/ k& E" E* w5 [$ ^+ V' p6 C
  7. 7
    5 D. {" R- B4 i# ^
  8. 8}
    % y0 j. c3 {3 }2 d6 x& l
  9. 9
    & T9 s9 C3 D2 }  v8 f$ I* G
  10. 10void loop() {9 H$ O) L1 D; [, r' |. x4 z$ ~
  11. 11  // put your main code here, to run repeatedly:4 H/ ]' O! f) b4 f4 X
  12. 12
    8 i+ U; d! [* f, i" M  R
  13. 13  digitalWrite(PB5,1);
    + s6 ~2 J- v2 G8 M5 \3 H* C0 v
  14. 14  delay(100);$ v: V' r4 `4 `2 Y' c
  15. 15  digitalWrite(PB5,0);7 Q% ^- ~( w) s
  16. 16  delay(100);& Z9 W7 J# ?4 _7 Z9 C( K! d4 J! \& E
  17. 17
    5 h5 r& y2 \2 M8 ~
  18. 18}
复制代码

& {+ x0 C  t5 K. \+ B  [
2.3 烧写程序
烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件:
  1. 1[env:MonkeyPi_STM32_G070RB]
    : X1 m7 e6 @! s; x, l; e
  2. 2platform = ststm325 F- R  y; K+ i4 s9 q0 }6 U9 [
  3. 3board = MonkeyPi_STM32_G070RB2 S+ A3 f5 \$ W, ]
  4. 4framework = arduino* g4 d- d2 S% k' s4 S
  5. 59 s+ k7 u& V2 _2 t! w
  6. 6upload_protocol = cmsis-dap
复制代码

6 X# B  h+ i- x0 i
修改完成后,点击platformio:Upload按钮即可完成烧写:
$ j4 ^4 \$ ^( M/ H' |
微信图片_20230222220316.png 1 R% h! o# C& D8 G
" ^( J  r# c5 }) Y) t& p3 Q3 R- A
转载自:MakerInChina.cn
1 t- i$ U& d4 }6 {) l
收藏 评论0 发布时间:2023-2-23 22:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版