|
使用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安装在默认位置): - 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{
& i) C- _( s7 Y {* e) t' M/ n% { - 2 "build": {5 o9 J3 A; f, J1 E# ` \
- 3 "core": "stm32",
( V# t- g9 `0 u! G6 E - 4 "cpu": "cortex-m0plus",! Q8 g: j0 i5 K I3 @6 f( {, }, a
- 5 "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
( [2 h3 _; G. f( L% [2 J3 i1 u - 6 "f_cpu": "64000000L",5 m% i: x6 C |" G6 h5 q8 H
- 7 "framework_extra_flags": {
3 g$ N* y3 R5 Y' X( m. d4 h - 8 "arduino": "-D__CORTEX_SC=0"$ V2 ^/ Z. }6 J4 A4 V
- 9 },/ l' E$ u- m; g; |; l9 F" w G
- 10 "mcu": "stm32g070rbt6",
; [. S) c, u% M, J - 11 "product_line": "STM32G070xx", M0 }6 V0 r) \4 J7 X( X C
- 12 "variant": "STM32G0xx/G070RBT"5 ~+ B+ E- k! |* g$ q% u
- 13 },$ i7 e* V; \3 N) o/ K- \
- 14 "debug": {. U% ^: f) r* e/ R) z; y0 _0 x
- 15 "default_tools": [
$ v8 U* k! d2 ?/ g1 Y- Z - 16 "stlink"
' k: \! T; o& }. K0 c( a - 17 ],/ r2 ^" I; T8 Y2 A4 g
- 18 "jlink_device": "STM32G070RB",
/ Z8 {- k/ ~* p3 g - 19 "onboard_tools": [8 M& H, Y% X, `% s6 _7 c
- 20 "stlink"
2 ^$ n0 c3 t5 C/ f4 t - 21 ]," I9 G5 N, o( Z. x! o! X/ j1 F
- 22 "openocd_target": "stm32g0x",$ f( f1 k1 L) b% A
- 23 "svd_path": "STM32G070.svd"
: w2 R Z) S2 K( s. y- \: ? - 24 },0 C; ` m+ ]: U# k* B4 O
- 25 "frameworks": [3 T5 O; m4 F9 g l& M. s- q, N
- 26 "arduino",
, }0 }! p9 t, c- { - 27 "cmsis",
$ i- s9 j7 ^/ }$ U8 e - 28 "libopencm3",
6 ]; B4 V% q y" g% k - 29 "stm32cube",
# G& {8 k' f" |* h3 I - 30 "zephyr"
% k t% O- l. { {2 ~ T* W6 V - 31 ],
) Q1 H. M1 b& w8 i; _- J - 32 "name": "MonkeyPi_STM32_G070RB",
6 o1 ?5 L0 L& v7 n - 33 "upload": {% I2 ?( S$ ~/ s+ I0 e
- 34 "maximum_ram_size": 36864,3 Q) R1 V* i2 u5 ] z" m K
- 35 "maximum_size": 131072,
- c& o; V3 k- b- o) d2 K' n0 `: Q - 36 "protocol": "stlink",) Z: M F/ c1 K) x7 E/ P
- 37 "protocols": [
0 i. p4 c; A. t( m. q - 38 "stlink",
- b5 _; c- d6 y4 ]% ~3 p {/ ~ - 39 "jlink",. I9 K& m; u Q5 c
- 40 "cmsis-dap",
1 ~; ?! G7 h4 t$ \ - 41 "blackmagic",2 I; Y% d1 `9 M/ C, u ]% r7 }
- 42 "mbed"6 K" q: a" U# u R; T T
- 43 ]
5 j' b' G5 J5 T) E. f - 44 },
. l6 [ c! [# z - 45 "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",0 i3 s; \& v- S. ]/ S: u
- 46 "vendor": "ST"
" R' s9 H7 F2 |& K) A - 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定义在目录 - C:\Users\userName\.platformio\packages\framework-arduinoststm32
复制代码
! i2 V; W3 B1 k/ J$ t下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下: - 1# MonkeyPi STM32G070RB board
+ t( W7 ]/ J- x) y* D" w - 2Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB
* _+ p5 k; D9 O1 p4 c0 P - 3Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB+ w, Z+ E6 P9 `1 ^* c/ l
- 4Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072
/ Y. s: _9 O3 ^6 p - 5Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768* [7 I5 {8 u8 h$ O, M/ Y2 i0 ^ F9 k
- 6Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus
, L1 \' D1 C# |! ] - 7Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB" J a4 S* G2 d6 c
- 8Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx$ \5 ?4 [$ p; Q1 |$ N! d
- 9Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx
1 }9 @- U8 ~6 z% [& B- C, Y - 10Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT
! E3 w- a0 R, ?" k; p - 11Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math
, j5 X- X ]/ Z3 B4 k% k - 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+ Q1.3 添加Arduino板的引脚定义打开目录: - 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/**" n, E* O5 r1 Y
- 2 * @brief System Clock Configuration8 @6 S& ?/ A) m
- 3 * @param None2 t2 R5 I7 M; I- T* W/ ~) k' C2 c
- 4 * @retval None% `/ S: h( K- J+ V: }6 l$ Y
- 5 */6 D. g/ v/ f; ?4 y L2 o* i/ J3 t
- 6WEAK void SystemClock_Config(void)
; o' k3 b1 g! ?1 ?2 k- j& U& k - 7{
/ r2 P& Q& m+ d T( Q( V4 N - 8 /* SystemClock_Config can be generated by STM32CubeMX */. f! b7 h; t: k9 [! P0 w5 Z( |
- 9#warning "SystemClock_Config() is empty. Default clock at reset is used."
4 ]. a+ A+ i z! G" k* k I - 10}
复制代码 ! ~* p# O8 i1 [$ N! N, ?& C
并修改文件的定义如下: - #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
# 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#include <Arduino.h>4 F, Z1 i# g9 ~+ C! w: d, i5 A' q2 G/ c
- 2" b1 b4 _" X. U3 z( x( u) c
- 3void setup() {
r1 a. G' o) e' b - 4 // put your setup code here, to run once:4 W+ ?- J3 d. O$ I( p9 x J; V0 ^
- 52 p9 E5 ?3 ?6 H: k- ^3 {
- 6 pinMode(PB5,OUTPUT);% y3 `0 X# F8 g+ q; b! S* o6 q
- 7
5 v; k" s2 F0 c: Y4 q4 f* H: y - 8}
0 B5 Z B: U! @6 ]) k - 9
$ B2 ]( i, D7 G; u$ v - 10void loop() {
/ e: S" i! ` b0 m - 11 // put your main code here, to run repeatedly:$ E8 l6 E, A5 l; Z9 S
- 12* V1 x* O- q6 d) j: I/ s
- 13 digitalWrite(PB5,1);
5 ?* l, k" |1 \3 ^/ j o3 {1 ]+ b - 14 delay(100);6 X; S% C# L8 \; a
- 15 digitalWrite(PB5,0);; y) I& z* \7 f
- 16 delay(100);+ c. b! X+ P; O9 O- m' S$ y
- 174 `; i8 F s" [% O# @* w1 K5 V, M
- 18}
复制代码
; i1 Q/ Y6 E) s& a3 _2.3 烧写程序烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件: - 1[env:MonkeyPi_STM32_G070RB]5 t7 b: I4 k+ m, A8 y* h2 w
- 2platform = ststm325 U6 p# J g$ @" f- d9 r2 }
- 3board = MonkeyPi_STM32_G070RB
$ \6 B/ c" p2 s2 A" P2 | - 4framework = arduino
Z/ r, x: }2 {7 r9 x9 r' J - 5: `1 T+ h2 s. u3 t6 L& ^) b# h
- 6upload_protocol = cmsis-dap
复制代码 7 R$ U3 m8 J6 H8 a
修改完成后,点击platformio:Upload按钮即可完成烧写:
6 w5 o$ c6 a( u# _( r
0 I$ v! f2 P) v
: {' _3 }( o1 p: X' M转载自:MakerInChina.cn
6 I* i( Y- o/ j0 b; c+ J% e |