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

STM32G070—使用platformio+arduino

[复制链接]
STMCU小助手 发布时间:2023-2-23 22:00
使用platformio平台和Arduino框架开发STM32G0,开发环境使用VSCode+PlatformIO插件;
) a8 k& g$ i0 ~0 l& B- L
1 自定义boards
因为Platformio中没有自己需要的STM32G070RB这个型号的板子,因此需要自己定义一个开发板型号。

8 r& s' V$ G7 Q- N+ O. t, k6 \3 ^
1.1 添加一个自定义boards
首先这个是STM32系列,因此其boards目录如下(这里pio安装在默认位置):
  1. C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码

' u9 o; G4 H# b% m0 T0 y
在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 nucleo_g071rb.json文件 进行修改,内容如下:
  1. 1{
    & i) C- _( s7 Y  {* e) t' M/ n% {
  2. 2  "build": {5 o9 J3 A; f, J1 E# `  \
  3. 3    "core": "stm32",
    ( V# t- g9 `0 u! G6 E
  4. 4    "cpu": "cortex-m0plus",! Q8 g: j0 i5 K  I3 @6 f( {, }, a
  5. 5    "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
    ( [2 h3 _; G. f( L% [2 J3 i1 u
  6. 6    "f_cpu": "64000000L",5 m% i: x6 C  |" G6 h5 q8 H
  7. 7    "framework_extra_flags": {
    3 g$ N* y3 R5 Y' X( m. d4 h
  8. 8      "arduino": "-D__CORTEX_SC=0"$ V2 ^/ Z. }6 J4 A4 V
  9. 9    },/ l' E$ u- m; g; |; l9 F" w  G
  10. 10    "mcu": "stm32g070rbt6",
    ; [. S) c, u% M, J
  11. 11    "product_line": "STM32G070xx",  M0 }6 V0 r) \4 J7 X( X  C
  12. 12    "variant": "STM32G0xx/G070RBT"5 ~+ B+ E- k! |* g$ q% u
  13. 13  },$ i7 e* V; \3 N) o/ K- \
  14. 14  "debug": {. U% ^: f) r* e/ R) z; y0 _0 x
  15. 15    "default_tools": [
    $ v8 U* k! d2 ?/ g1 Y- Z
  16. 16      "stlink"
    ' k: \! T; o& }. K0 c( a
  17. 17    ],/ r2 ^" I; T8 Y2 A4 g
  18. 18    "jlink_device": "STM32G070RB",
    / Z8 {- k/ ~* p3 g
  19. 19    "onboard_tools": [8 M& H, Y% X, `% s6 _7 c
  20. 20      "stlink"
    2 ^$ n0 c3 t5 C/ f4 t
  21. 21    ]," I9 G5 N, o( Z. x! o! X/ j1 F
  22. 22    "openocd_target": "stm32g0x",$ f( f1 k1 L) b% A
  23. 23    "svd_path": "STM32G070.svd"
    : w2 R  Z) S2 K( s. y- \: ?
  24. 24  },0 C; `  m+ ]: U# k* B4 O
  25. 25  "frameworks": [3 T5 O; m4 F9 g  l& M. s- q, N
  26. 26    "arduino",
    , }0 }! p9 t, c- {
  27. 27    "cmsis",
    $ i- s9 j7 ^/ }$ U8 e
  28. 28    "libopencm3",
    6 ]; B4 V% q  y" g% k
  29. 29    "stm32cube",
    # G& {8 k' f" |* h3 I
  30. 30    "zephyr"
    % k  t% O- l. {  {2 ~  T* W6 V
  31. 31  ],
    ) Q1 H. M1 b& w8 i; _- J
  32. 32  "name": "MonkeyPi_STM32_G070RB",
    6 o1 ?5 L0 L& v7 n
  33. 33  "upload": {% I2 ?( S$ ~/ s+ I0 e
  34. 34    "maximum_ram_size": 36864,3 Q) R1 V* i2 u5 ]  z" m  K
  35. 35    "maximum_size": 131072,
    - c& o; V3 k- b- o) d2 K' n0 `: Q
  36. 36    "protocol": "stlink",) Z: M  F/ c1 K) x7 E/ P
  37. 37    "protocols": [
    0 i. p4 c; A. t( m. q
  38. 38      "stlink",
    - b5 _; c- d6 y4 ]% ~3 p  {/ ~
  39. 39      "jlink",. I9 K& m; u  Q5 c
  40. 40      "cmsis-dap",
    1 ~; ?! G7 h4 t$ \
  41. 41      "blackmagic",2 I; Y% d1 `9 M/ C, u  ]% r7 }
  42. 42      "mbed"6 K" q: a" U# u  R; T  T
  43. 43    ]
    5 j' b' G5 J5 T) E. f
  44. 44  },
    . l6 [  c! [# z
  45. 45  "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",0 i3 s; \& v- S. ]/ S: u
  46. 46  "vendor": "ST"
    " R' s9 H7 F2 |& K) A
  47. 47}
复制代码

) l) e* v) f* t$ z  ]8 U5 G/ G# S& O
这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称;
3 q1 v3 t* E/ @! t& @# w0 S! v& Q
1.2 Arduino框架下添加board定义
在目录
  1. C:\Users\userName\.platformio\packages\framework-arduinoststm32
复制代码

! i2 V; W3 B1 k/ J$ t
下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下:
  1. 1# MonkeyPi STM32G070RB board
    + t( W7 ]/ J- x) y* D" w
  2. 2Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB
    * _+ p5 k; D9 O1 p4 c0 P
  3. 3Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB+ w, Z+ E6 P9 `1 ^* c/ l
  4. 4Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072
    / Y. s: _9 O3 ^6 p
  5. 5Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768* [7 I5 {8 u8 h$ O, M/ Y2 i0 ^  F9 k
  6. 6Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus
    , L1 \' D1 C# |! ]
  7. 7Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB" J  a4 S* G2 d6 c
  8. 8Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx$ \5 ?4 [$ p; Q1 |$ N! d
  9. 9Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx
    1 }9 @- U8 ~6 z% [& B- C, Y
  10. 10Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT
    ! E3 w- a0 R, ?" k; p
  11. 11Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math
    , j5 X- X  ]/ Z3 B4 k% k
  12. 12Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
复制代码

5 T7 v& ^) o. s+ Q
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/**" n, E* O5 r1 Y
  2. 2  * @brief  System Clock Configuration8 @6 S& ?/ A) m
  3. 3  * @param  None2 t2 R5 I7 M; I- T* W/ ~) k' C2 c
  4. 4  * @retval None% `/ S: h( K- J+ V: }6 l$ Y
  5. 5  */6 D. g/ v/ f; ?4 y  L2 o* i/ J3 t
  6. 6WEAK void SystemClock_Config(void)
    ; o' k3 b1 g! ?1 ?2 k- j& U& k
  7. 7{
    / r2 P& Q& m+ d  T( Q( V4 N
  8. 8  /* SystemClock_Config can be generated by STM32CubeMX */. f! b7 h; t: k9 [! P0 w5 Z( |
  9. 9#warning "SystemClock_Config() is empty. Default clock at reset is used."
    4 ]. a+ A+ i  z! G" k* k  I
  10. 10}
复制代码
! ~* p# O8 i1 [$ N! N, ?& C
并修改文件的定义如下:
  1. #if defined(ARDUINO_MONKEYPI_STM32_G070RB)
复制代码
0 D4 R) n7 @( Z  [5 T8 \
注:如果G070RB目录下没有ldscript.ld这个文件,还需要从G071等相似目录下拷贝一个,这个在链接时候需要用到。

6 `- E: C* Q9 Y( @5 i1 o
2 使用2.1 新建项目
在pio的home中新建项目,选择自定义开发板型号 MonkeyPi_STM32_G070RB:
7 S4 v5 }; k" _/ u: I: n, _

+ E6 H7 Z- C3 R0 r, P" E* j 微信图片_20230222220629.png # t! H, J9 b7 r  J5 W+ J$ ?4 a  j
) G, W% g9 ?/ `+ [" \
& t# ]" E: o1 J0 m* P4 H6 ~0 }
2.2 编写测试Arduino代码
打开项目中 src/main.cpp 文件,编写Arduino代码:
  1. 1#include <Arduino.h>4 F, Z1 i# g9 ~+ C! w: d, i5 A' q2 G/ c
  2. 2" b1 b4 _" X. U3 z( x( u) c
  3. 3void setup() {
      r1 a. G' o) e' b
  4. 4  // put your setup code here, to run once:4 W+ ?- J3 d. O$ I( p9 x  J; V0 ^
  5. 52 p9 E5 ?3 ?6 H: k- ^3 {
  6. 6  pinMode(PB5,OUTPUT);% y3 `0 X# F8 g+ q; b! S* o6 q
  7. 7
    5 v; k" s2 F0 c: Y4 q4 f* H: y
  8. 8}
    0 B5 Z  B: U! @6 ]) k
  9. 9
    $ B2 ]( i, D7 G; u$ v
  10. 10void loop() {
    / e: S" i! `  b0 m
  11. 11  // put your main code here, to run repeatedly:$ E8 l6 E, A5 l; Z9 S
  12. 12* V1 x* O- q6 d) j: I/ s
  13. 13  digitalWrite(PB5,1);
    5 ?* l, k" |1 \3 ^/ j  o3 {1 ]+ b
  14. 14  delay(100);6 X; S% C# L8 \; a
  15. 15  digitalWrite(PB5,0);; y) I& z* \7 f
  16. 16  delay(100);+ c. b! X+ P; O9 O- m' S$ y
  17. 174 `; i8 F  s" [% O# @* w1 K5 V, M
  18. 18}
复制代码

; i1 Q/ Y6 E) s& a3 _
2.3 烧写程序
烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件:
  1. 1[env:MonkeyPi_STM32_G070RB]5 t7 b: I4 k+ m, A8 y* h2 w
  2. 2platform = ststm325 U6 p# J  g$ @" f- d9 r2 }
  3. 3board = MonkeyPi_STM32_G070RB
    $ \6 B/ c" p2 s2 A" P2 |
  4. 4framework = arduino
      Z/ r, x: }2 {7 r9 x9 r' J
  5. 5: `1 T+ h2 s. u3 t6 L& ^) b# h
  6. 6upload_protocol = cmsis-dap
复制代码
7 R$ U3 m8 J6 H8 a
修改完成后,点击platformio:Upload按钮即可完成烧写:

6 w5 o$ c6 a( u# _( r
微信图片_20230222220316.png 0 I$ v! f2 P) v

: {' _3 }( o1 p: X' M转载自:MakerInChina.cn
6 I* i( Y- o/ j0 b; c+ J% e
赞 收藏 评论0 发布时间:2023-2-23 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版