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

STM32G070—使用platformio+arduino

[复制链接]
STMCU小助手 发布时间:2023-2-23 22:00
使用platformio平台和Arduino框架开发STM32G0,开发环境使用VSCode+PlatformIO插件;

% @* _9 K8 v8 c$ t8 q9 L7 V
1 自定义boards
因为Platformio中没有自己需要的STM32G070RB这个型号的板子,因此需要自己定义一个开发板型号。
  ~6 d' P0 h  |: D
1.1 添加一个自定义boards
首先这个是STM32系列,因此其boards目录如下(这里pio安装在默认位置):
  1. C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码
8 T2 j/ m4 d5 }, g5 K
在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 nucleo_g071rb.json文件 进行修改,内容如下:
  1. 1{
    9 B9 I0 t- p! T, V# u8 O
  2. 2  "build": {% Y! f* B, J! E& o, k; p5 l
  3. 3    "core": "stm32",
    " L" Z4 c% B% r" b( o5 O
  4. 4    "cpu": "cortex-m0plus",; b9 ]; D8 @$ |, T( @
  5. 5    "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
    7 k4 |6 r' ~. K, y( k
  6. 6    "f_cpu": "64000000L",
      D( S& {& [' J( _* S# g/ j
  7. 7    "framework_extra_flags": {9 e0 W8 i8 V2 {
  8. 8      "arduino": "-D__CORTEX_SC=0"' y. L5 c* a1 E+ x2 C5 t
  9. 9    },) w4 o, H% w* v, w
  10. 10    "mcu": "stm32g070rbt6",
    # |0 X1 x! Z" S, d5 P. v% i  S
  11. 11    "product_line": "STM32G070xx",7 D7 G( a2 [' w  B3 o! S0 p5 ]
  12. 12    "variant": "STM32G0xx/G070RBT"2 d2 b5 N3 ?9 T3 y) Q
  13. 13  },6 E; G" }8 @3 b) ?# q. [5 g, F
  14. 14  "debug": {
    6 V0 y' o' S% s! T
  15. 15    "default_tools": [
    : Z2 X# u7 J9 l! W8 o7 C
  16. 16      "stlink"0 {# b2 _& q0 N+ x5 |; S* }$ F
  17. 17    ],$ @* Z/ @! K6 Y8 h6 m. v: W
  18. 18    "jlink_device": "STM32G070RB",  P: B8 C2 b( V4 x/ i& [
  19. 19    "onboard_tools": [& Q/ A$ A; |$ I) N+ n* P. g6 w1 G
  20. 20      "stlink"
    # R% a  z* e5 f! s9 J2 P$ J
  21. 21    ],
    3 R# W5 |% A8 m
  22. 22    "openocd_target": "stm32g0x",
    % h9 Z$ L% X6 b' M& L$ r
  23. 23    "svd_path": "STM32G070.svd"% A4 _6 ^& ~7 a" o6 l4 E& P
  24. 24  },
    0 o( b& n' J# K1 |* n# |! W
  25. 25  "frameworks": [
    $ `! W- L- `6 {( @; Y; C1 ]
  26. 26    "arduino",
    8 J) ]0 N( W7 Q- m7 x
  27. 27    "cmsis",
    $ j3 q+ ]" _3 i2 Y; k
  28. 28    "libopencm3",! m+ F+ d' `8 F  q
  29. 29    "stm32cube",. m% P$ N. k3 |6 K" h2 t3 ?
  30. 30    "zephyr"  D% E3 M& t# {% m2 V7 A( V
  31. 31  ],% j* U2 R$ q- g. n! k, |% r; u
  32. 32  "name": "MonkeyPi_STM32_G070RB",
    - o: L1 [7 ~; c2 b% v
  33. 33  "upload": {
    6 |, Z0 U  D. y5 j5 o) H, `) A9 k
  34. 34    "maximum_ram_size": 36864,5 \; V8 K+ H$ ?! \1 _
  35. 35    "maximum_size": 131072,
    1 ]" b9 c0 m* P6 k5 o
  36. 36    "protocol": "stlink",
    % R- v7 p* Z- y
  37. 37    "protocols": [$ D, r8 p" ^  a
  38. 38      "stlink",
    $ X- l! v; Q# ~
  39. 39      "jlink",& S1 [2 r* }: N( W# j% M
  40. 40      "cmsis-dap",5 T2 h7 T! Q3 G0 m2 I
  41. 41      "blackmagic",1 F# |+ n# K, l. n4 v5 F$ e0 O$ r
  42. 42      "mbed"3 h( A$ o- P2 q9 [
  43. 43    ]
    " p# L$ [/ r( L5 p( @
  44. 44  },
    . G2 K& r: P: ^" `: W9 [
  45. 45  "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",2 h5 f9 ]7 t5 W, }( g4 M
  46. 46  "vendor": "ST"
    - ~; k( D. B, o, T5 Z- c' B
  47. 47}
复制代码
# n! D- Q5 R& T7 Y# K" k
这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称;

# W( O; H& y1 ~4 w$ H$ s
1.2 Arduino框架下添加board定义
在目录
  1. C:\Users\userName\.platformio\packages\framework-arduinoststm32
复制代码

2 J; U7 \4 x! ?& Y7 X+ j9 ^) a
下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下:
  1. 1# MonkeyPi STM32G070RB board
    : w7 q( S: e0 R/ D* o
  2. 2Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB
    1 Y  B! q' N7 V& z: W) k0 `0 H
  3. 3Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB
    6 M% ~$ L8 \! M8 b! r
  4. 4Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072+ G! V% S( U" R, F+ X) H
  5. 5Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768
    # ~; N  [( i. y2 z
  6. 6Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus! ~5 F) c6 @3 K- \0 _
  7. 7Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB
    0 C5 d  X  n; w
  8. 8Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx4 R. Y  e7 c% g
  9. 9Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx
    3 a* g4 d, y& q6 B2 {% |
  10. 10Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT
    ( z& J. r. ~) E
  11. 11Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math# n; f7 A9 ^# T8 g* `( }
  12. 12Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
复制代码

; J2 d& B7 Z: Y
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/**
    - D- R& L" Y! p% S6 I
  2. 2  * @brief  System Clock Configuration! }- L, E0 G5 L5 {+ d1 ]  _! l. O; z
  3. 3  * @param  None9 y. Z8 C+ u" A$ b
  4. 4  * @retval None
    ; _0 H# S0 W2 B! [( h6 |/ u  z
  5. 5  */* H* d8 ^# ]% _! J
  6. 6WEAK void SystemClock_Config(void)1 i: b+ `# v5 g5 R
  7. 7{
    : Z. @6 n: \9 i0 `9 i
  8. 8  /* SystemClock_Config can be generated by STM32CubeMX */8 Y$ f9 G; p7 }, Q( s/ k, o& R  d
  9. 9#warning "SystemClock_Config() is empty. Default clock at reset is used."
    , ^3 L% k, U7 |, p* j  ?
  10. 10}
复制代码
% k; i5 q# y6 c5 p/ x
并修改文件的定义如下:
  1. #if defined(ARDUINO_MONKEYPI_STM32_G070RB)
复制代码

  s) D& h3 `( O  B- l- a( `3 g
注:如果G070RB目录下没有ldscript.ld这个文件,还需要从G071等相似目录下拷贝一个,这个在链接时候需要用到。

* e3 E* l8 u7 A7 u
2 使用2.1 新建项目
在pio的home中新建项目,选择自定义开发板型号 MonkeyPi_STM32_G070RB:

+ e9 E8 z2 r  @- r; w

" ^( Y; _$ r* y2 Q" O 微信图片_20230222220629.png
& Z! R+ U, e% w$ Z) s0 J- e
) x: E/ z4 p% I' U( O  I- o

" t+ F% i; Y) B; R$ w2.2 编写测试Arduino代码
打开项目中 src/main.cpp 文件,编写Arduino代码:
  1. 1#include <Arduino.h>
    ( Z. o) U  f' d, K) j' R+ N2 j$ n) I0 r. z& J
  2. 2. A, Y8 G6 s. j- I+ B2 c
  3. 3void setup() {
    8 A1 `' V& \* {! D
  4. 4  // put your setup code here, to run once:4 @2 n# _& [- \% e; M7 r
  5. 5% ~9 N! G% v5 t/ w
  6. 6  pinMode(PB5,OUTPUT);
      p( U# ~1 d% i2 i/ t& t" O/ J4 Q
  7. 7
    7 k9 {8 B$ H2 |
  8. 8}  Z* _: ~  e: j; H" L( K
  9. 9
    8 V% j( C# N9 t7 L- @
  10. 10void loop() {4 e( H1 p7 X! s2 h( E
  11. 11  // put your main code here, to run repeatedly:
    7 p& Q  c& m9 `1 A
  12. 12
    ; ]# D7 D+ W* v3 S$ k1 W
  13. 13  digitalWrite(PB5,1);
    ' ]$ Y* a) ~. N
  14. 14  delay(100);
    4 x7 B5 W5 n8 T. Y" v' h
  15. 15  digitalWrite(PB5,0);; v2 ^# G7 G- `, [2 _8 X0 ^
  16. 16  delay(100);& i* w. T) Y! y' C. B+ A
  17. 17
    0 _( }$ Q* ^% }: W' l
  18. 18}
复制代码
5 j0 p( i6 h! N! e  }: Y6 A3 g
2.3 烧写程序
烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件:
  1. 1[env:MonkeyPi_STM32_G070RB]' B7 E3 m+ q, J
  2. 2platform = ststm32  b: y7 f! s: C6 k2 D
  3. 3board = MonkeyPi_STM32_G070RB
    0 ?: y0 I  {$ s% K% M+ M% M. ]
  4. 4framework = arduino
    9 b) }; n& l1 [3 ~3 C1 c! d% g
  5. 5
    " w0 u& R, F# x& R5 b+ g. Q/ F
  6. 6upload_protocol = cmsis-dap
复制代码
! m9 m3 m- p  F/ P& x
修改完成后,点击platformio:Upload按钮即可完成烧写:
& f! L4 @1 r9 t
微信图片_20230222220316.png
* A: c3 p. W/ e) _3 \
1 ~9 ^/ g+ ]4 Q+ u, j3 r转载自:MakerInChina.cn/ ]& j/ ]1 `: H5 A! @
收藏 评论0 发布时间:2023-2-23 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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