请选择 进入手机版 | 继续访问电脑版

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

STM32G070—使用platformio+arduino

[复制链接]
STMCU小助手 发布时间:2023-2-23 22:00
使用platformio平台和Arduino框架开发STM32G0,开发环境使用VSCode+PlatformIO插件;
. a- t% f+ C9 z& V  M7 P) d
1 自定义boards
因为Platformio中没有自己需要的STM32G070RB这个型号的板子,因此需要自己定义一个开发板型号。
/ n; U& q% w5 P2 N* m0 F
1.1 添加一个自定义boards
首先这个是STM32系列,因此其boards目录如下(这里pio安装在默认位置):
  1. C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码

- r; Z! \/ S* w
在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 nucleo_g071rb.json文件 进行修改,内容如下:
  1. 1{
    7 A$ |4 I& [/ ?* S( B2 Z
  2. 2  "build": {
    3 B0 o* x: ^  I& P* u; ]! o  v
  3. 3    "core": "stm32",
    ; p- \! w3 J& Q1 `, y# A
  4. 4    "cpu": "cortex-m0plus",
    6 w- b/ j# ?7 ^$ N, l1 S- Q
  5. 5    "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
    ! n/ Z# G+ j; r: Y
  6. 6    "f_cpu": "64000000L",
    / Y' f# ~2 }0 s! b9 s( ?- ]
  7. 7    "framework_extra_flags": {
    ( u: p5 z* x; _# M9 B; E. {% D2 \
  8. 8      "arduino": "-D__CORTEX_SC=0"
    " c# K; E9 P9 }" L, c% {% _
  9. 9    },
    ! X6 Z1 d  C3 K; W
  10. 10    "mcu": "stm32g070rbt6",5 _" _  ]3 _6 }( ^( |
  11. 11    "product_line": "STM32G070xx",
    + I: j9 `; t' D1 W9 d; T) P2 t
  12. 12    "variant": "STM32G0xx/G070RBT"
    ' K. @' `, s3 |3 U
  13. 13  },0 M7 i/ u- W# F, W. i2 _# K
  14. 14  "debug": {
    0 I9 j4 J4 N+ w$ }
  15. 15    "default_tools": [2 s7 i( C( q% A( i
  16. 16      "stlink"
    0 `# j, [- C/ ~8 t9 t
  17. 17    ],
    , [& x3 ^# C$ \( _4 b# C4 e
  18. 18    "jlink_device": "STM32G070RB",
    . l4 s$ W# o2 n
  19. 19    "onboard_tools": [. D8 n9 Y9 {" I
  20. 20      "stlink"
    & ]- g2 Y5 P1 J! z% b" F  P
  21. 21    ],
    ; T! P8 a' U. x7 B9 L" l! m
  22. 22    "openocd_target": "stm32g0x",
    - d) D' m, o1 H$ \1 h
  23. 23    "svd_path": "STM32G070.svd"0 C# [( e2 r! L& ~8 l, j
  24. 24  },
    ) b+ g6 X$ i$ X) r! Q9 v& n
  25. 25  "frameworks": [
    : G* a/ |$ q" i
  26. 26    "arduino",) d$ ?  ?- O, W* _$ M) D! _9 v' c
  27. 27    "cmsis",/ v( h" L8 Q* O8 }) C
  28. 28    "libopencm3",
    , K6 C& \& z6 c! N& Y6 F: ?
  29. 29    "stm32cube",
    , B& ]+ Y$ a9 v" F9 X/ _
  30. 30    "zephyr"
    ! u% q. [# W: y1 g- C1 ^
  31. 31  ],9 B: O( P" H" I" g) m  E
  32. 32  "name": "MonkeyPi_STM32_G070RB",
    3 e4 C3 U4 d: A1 |. _! i( V
  33. 33  "upload": {6 w8 t6 U9 X1 ~+ R. B1 T0 p
  34. 34    "maximum_ram_size": 36864,
    , x6 S4 I7 @3 p- I
  35. 35    "maximum_size": 131072,
    * A% y! g' E( B1 L7 n" x& m
  36. 36    "protocol": "stlink",
    ) W% M3 t7 U" _0 ?
  37. 37    "protocols": [# x( _9 _0 w/ ?7 B7 ?8 u
  38. 38      "stlink",- \: Z0 M1 x4 j$ j" g
  39. 39      "jlink",
    " t% s; X+ E$ N6 m: _% M# F* G4 W
  40. 40      "cmsis-dap",* K$ M2 M; Q1 W5 e4 w3 V
  41. 41      "blackmagic",
    : Z" E6 i2 h- C+ a6 J
  42. 42      "mbed"
    6 S: N$ j; ?1 J. q2 ~" ]
  43. 43    ]
    ! {% J$ E7 u! `' U' L$ x5 a
  44. 44  },
    / u! ^1 n8 ]: w% p, ~0 P% V
  45. 45  "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",
    - U# h- G$ F% u5 ]  e: |7 G! {
  46. 46  "vendor": "ST"
    : w0 S) T) T- v( o+ p. T$ M  T8 j
  47. 47}
复制代码
3 P4 i8 e+ j- f) i1 x
这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称;
) b  r' W  q8 I; @
1.2 Arduino框架下添加board定义
在目录
  1. C:\Users\userName\.platformio\packages\framework-arduinoststm32
复制代码
0 r6 M0 J0 T' [2 ]. W1 d1 Z# x
下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下:
  1. 1# MonkeyPi STM32G070RB board
    ! o  t( v9 ~9 i3 Q1 h( |. v' C
  2. 2Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB
    2 o; ?4 m: q$ m% T! A( h
  3. 3Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB8 _$ m6 p+ b" E+ y- ]- @
  4. 4Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072! U- s; \4 A3 U& c
  5. 5Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768
    6 o8 T7 Y" ?0 r2 `
  6. 6Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus
    1 E( L+ y4 n% @8 A' r% V
  7. 7Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB
    0 l) ]4 |- x8 m0 a0 S' A. c
  8. 8Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx) x" P+ T  i1 ~. r) j' G
  9. 9Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx! ~: V8 O: s8 ~7 ~. U
  10. 10Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT& `) K: I/ `+ C9 A- `
  11. 11Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math3 n9 M  k4 }% {* S9 E
  12. 12Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
复制代码

. w: T* b, z: j- Y- ?8 {7 K
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/**7 K+ T0 D: _: Z! S& D
  2. 2  * @brief  System Clock Configuration
    7 O& Y" w6 L, P3 H
  3. 3  * @param  None1 j. V4 u# ^; T9 i- z
  4. 4  * @retval None8 B' J5 v7 L& G9 X2 Z
  5. 5  */
    7 n; `: D( f( A" G# B
  6. 6WEAK void SystemClock_Config(void)
    , \, c" H4 E9 f1 K
  7. 7{  r4 I* r/ p. M9 ?( W
  8. 8  /* SystemClock_Config can be generated by STM32CubeMX */
    7 u: H$ W3 W& b0 X! w8 Q" C
  9. 9#warning "SystemClock_Config() is empty. Default clock at reset is used."
    - k3 E" X, H: Z
  10. 10}
复制代码

/ g: Z( S  l; ?' Z
并修改文件的定义如下:
  1. #if defined(ARDUINO_MONKEYPI_STM32_G070RB)
复制代码
* e0 k- U5 k/ s% O
注:如果G070RB目录下没有ldscript.ld这个文件,还需要从G071等相似目录下拷贝一个,这个在链接时候需要用到。

& J+ V/ ~. v% P
2 使用2.1 新建项目
在pio的home中新建项目,选择自定义开发板型号 MonkeyPi_STM32_G070RB:
$ H; u6 R' Z( U' ?% u, P

/ D* ~$ u! ?( j' S# d; Y/ [! ? 微信图片_20230222220629.png + |, `) I+ m1 Z1 c# g6 f8 p& L

7 s/ i" F3 `) c, Y0 s
2 L1 X* s6 _9 k2 z3 }" B
2.2 编写测试Arduino代码
打开项目中 src/main.cpp 文件,编写Arduino代码:
  1. 1#include <Arduino.h>
    * o: Y% w3 C1 ]& Z
  2. 2. m/ t' }! O! E3 v8 ~) w& G2 b
  3. 3void setup() {$ |7 U0 D7 T  t; T( m- p0 z
  4. 4  // put your setup code here, to run once:0 a  P! _2 `, [% e
  5. 5, ~0 n* _8 r. h6 y4 I
  6. 6  pinMode(PB5,OUTPUT);
    ; Z# a; E/ R& i# z
  7. 7
    + q4 r+ ^: R* L) Z  _# I/ s
  8. 8}
    1 ]* \" b* P7 e; n5 I* c/ a8 c8 C
  9. 9
    1 C: v8 a) a2 L- A+ ?4 t4 g" h7 ?
  10. 10void loop() {
    # ]0 d! A1 F, L. Y! L
  11. 11  // put your main code here, to run repeatedly:
    7 ~9 j2 C$ F" p  z$ |
  12. 12
    " v/ ~1 w# q* l3 F+ f
  13. 13  digitalWrite(PB5,1);
    5 Q$ T( b( A- n9 D, A; S
  14. 14  delay(100);
    ! y9 _3 O- t- [7 r4 ^
  15. 15  digitalWrite(PB5,0);. u. W; u) [* n
  16. 16  delay(100);
    3 P8 v7 x  f6 k: ^% ~4 r7 G+ `
  17. 17
    % P1 J) a8 Y3 b* f
  18. 18}
复制代码
7 ?8 T4 \4 P' ?
2.3 烧写程序
烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件:
  1. 1[env:MonkeyPi_STM32_G070RB]
    ) r) j+ v* {, Q0 A" I
  2. 2platform = ststm32
    9 Z6 j$ ^# b& N9 p3 }1 m" \
  3. 3board = MonkeyPi_STM32_G070RB
    # l+ ^/ B- q0 `: X! ^: ^
  4. 4framework = arduino
    ( D/ M7 W( o" |( p8 d! n$ i
  5. 51 @5 `- o4 a( f8 E& @+ C4 Q4 b
  6. 6upload_protocol = cmsis-dap
复制代码
8 D3 `$ r, |3 v+ d, w2 ^4 b
修改完成后,点击platformio:Upload按钮即可完成烧写:

: q$ e( H- S6 _) q; p/ A6 g
微信图片_20230222220316.png ; C5 _+ l4 ?; g) |  A

/ P# u! A+ N* k, N8 f! e转载自:MakerInChina.cn
- ~, X3 a/ W; q% f  g
收藏 评论0 发布时间:2023-2-23 22:00

举报

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