使用platformio平台和Arduino框架开发STM32G0,开发环境使用VSCode+PlatformIO插件; * p5 p( H! [( w0 u7 s' J7 o) O5 j
1 自定义boards因为Platformio中没有自己需要的STM32G070RB这个型号的板子,因此需要自己定义一个开发板型号。 _3 Q5 S% R6 L0 A% x4 v @
1.1 添加一个自定义boards首先这个是STM32系列,因此其boards目录如下(这里pio安装在默认位置): - C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码
/ G# N' p5 J) N7 y; e S; i在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 nucleo_g071rb.json文件 进行修改,内容如下: - 1{' {0 w: H! [2 D$ ?
- 2 "build": {; e& w" a$ U/ L
- 3 "core": "stm32",# x$ \- f2 T8 a. u
- 4 "cpu": "cortex-m0plus",% H! F2 Q" S6 y2 [
- 5 "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
7 {0 \; G) R+ w! a - 6 "f_cpu": "64000000L",
. W+ m& \( p1 d: m$ {8 L - 7 "framework_extra_flags": {, }1 W- O% Z3 Q
- 8 "arduino": "-D__CORTEX_SC=0"
n+ m" q* l; L0 X1 z/ ]9 u& r - 9 },# k8 N$ O6 q* B4 T6 ? @
- 10 "mcu": "stm32g070rbt6",
& X+ G5 u4 T Q5 { - 11 "product_line": "STM32G070xx",( R; Q4 M% l9 e
- 12 "variant": "STM32G0xx/G070RBT"9 H+ G6 \1 l' a. T
- 13 },3 E( p* v) F) M, C1 x
- 14 "debug": {6 \& {( q+ q$ n' I# [
- 15 "default_tools": [3 J- D( F/ ^0 \9 ~
- 16 "stlink"
3 O; z3 [ {/ o/ s2 U' h% L/ r - 17 ],
% z" u: d( y9 V; q- A - 18 "jlink_device": "STM32G070RB",) C; o4 [* B7 j5 G% Y
- 19 "onboard_tools": [
% a* t. X, {6 w5 W* M - 20 "stlink"; u2 ]2 V, a% J3 X' Y; M) |' ^
- 21 ],
$ u" A/ D5 z! d: V: t - 22 "openocd_target": "stm32g0x",8 ~/ q, n: L S
- 23 "svd_path": "STM32G070.svd" I* Q5 e! ~6 g. s" X o8 \
- 24 },
3 N2 g/ F0 u0 n+ p - 25 "frameworks": [
% Z Z+ Q, i+ y1 }! V# } - 26 "arduino",: I. \- i! b: {3 l2 ?! i" A1 O9 L
- 27 "cmsis",
& d: h/ N- C2 h- L - 28 "libopencm3",/ x7 d- w" {7 E; t
- 29 "stm32cube",
# z' ~: h3 `/ ?* f H - 30 "zephyr"9 n- h* x n6 d+ E) l
- 31 ],
1 f( }( i; C) E, s% ^ - 32 "name": "MonkeyPi_STM32_G070RB",! f* U& S5 ^. a$ {0 Z E
- 33 "upload": {
5 u4 k8 a _( z7 v. O, M - 34 "maximum_ram_size": 36864,
, B ?! R3 {" l9 D! f, R/ u - 35 "maximum_size": 131072,
+ Z1 J# [, f$ h( i - 36 "protocol": "stlink",4 ~7 y* Q2 `+ m( K' A1 s
- 37 "protocols": [
5 x3 ~& Z# S$ w8 u" {4 U2 i - 38 "stlink",
0 t; M+ p! q0 ]# } G - 39 "jlink",
' t$ C0 C# |* V) m - 40 "cmsis-dap",- @. y$ F, \6 ^
- 41 "blackmagic",
+ M& d( m7 Y! ~" Z* g - 42 "mbed"1 [! ]4 r, a ~2 C9 t; Q% f
- 43 ]
7 H% V3 L3 s: d. J/ d p - 44 }," l$ H5 K7 D. i, ?/ b* m/ L
- 45 "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",
( n: n3 B0 l5 L( w) Z - 46 "vendor": "ST"
1 {# N# I+ g% X0 M - 47}
复制代码
' q& F; K% S7 u* T1 Y% N这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称; 3 y7 q# C- e0 `2 A, L
1.2 Arduino框架下添加board定义在目录 - C:\Users\userName\.platformio\packages\framework-arduinoststm32
复制代码
9 z, C8 J5 D4 L1 a7 v0 N" j下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下: - 1# MonkeyPi STM32G070RB board
8 [" S |/ E" j, k - 2Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB! _' D) J$ O8 ?# n9 h! V+ r
- 3Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB: w3 F2 r, \& T5 r4 _# U
- 4Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072
$ e9 h, p+ j. [. K' | - 5Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768! b; p- G3 k+ F, e7 P- z2 w
- 6Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus
& \; q0 J, i- l# B/ t - 7Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB4 N+ j# R8 j- G: d
- 8Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx( T/ \! f0 ?8 ^. g: J
- 9Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx( J+ j: M8 j3 u2 h/ W* \9 \
- 10Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT
$ |& Q X1 J8 X- \ G2 U x - 11Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math# E- X* s0 w W1 h4 C- t
- 12Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
复制代码
, m0 C0 a' s0 N9 J' E/ {7 H$ x, A1.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/**
- z( G% u, K/ v" J8 g, c - 2 * @brief System Clock Configuration
3 I1 q* i7 R. A, y' W5 G - 3 * @param None
1 @* y9 l9 J: r/ w2 \. k! O - 4 * @retval None
, I. @" i1 V p' D2 v4 I5 c8 B - 5 */
9 y" \; h5 }, P/ w- s3 E( ^4 F - 6WEAK void SystemClock_Config(void)3 Y5 a1 N2 M& _0 F% c
- 7{
4 m& K) F# B5 I' H& e6 D - 8 /* SystemClock_Config can be generated by STM32CubeMX */
( t: S9 T$ }. H; H: E7 o& e - 9#warning "SystemClock_Config() is empty. Default clock at reset is used.": b Z. C6 N5 c: Q8 D
- 10}
复制代码 ' R8 G7 s. l) V% S* R2 p" O* [
并修改文件的定义如下: - #if defined(ARDUINO_MONKEYPI_STM32_G070RB)
复制代码
# i) R. Q) _3 q% ?注:如果G070RB目录下没有ldscript.ld这个文件,还需要从G071等相似目录下拷贝一个,这个在链接时候需要用到。 8 j p) @) R0 @" z7 L
2 使用2.1 新建项目在pio的home中新建项目,选择自定义开发板型号 MonkeyPi_STM32_G070RB:
4 g2 N$ ?# r8 I% J& b# F H/ M9 Y- w; S# a( n
5 X/ p0 |" O8 o1 I
1 v( s5 {( m% _" r7 G. }4 J) |. R8 z5 D
2.2 编写测试Arduino代码打开项目中 src/main.cpp 文件,编写Arduino代码: - 1#include <Arduino.h>
3 F* W- I2 N+ X% \; i1 G2 K- h( Z - 2
2 p$ ?& K o3 ^& i - 3void setup() {0 A% d1 O: X, E1 H
- 4 // put your setup code here, to run once:
, m" I# U3 n% ~! d0 O0 E4 B - 5
+ `6 E# w4 O9 f; H. s! q/ C - 6 pinMode(PB5,OUTPUT);
( P5 L+ R. T% U/ B9 p' g2 R+ p1 t - 7 \1 i6 {4 q/ {' ^9 [
- 8}
, U* D* ~8 |& \3 V - 97 f' ? r; V) q/ @: D
- 10void loop() {5 _7 v% ?+ ^7 D7 n* D T% G
- 11 // put your main code here, to run repeatedly:
1 r+ j; E. W7 A* V$ C& w - 12
5 `# w1 q/ C6 v$ w - 13 digitalWrite(PB5,1);
9 r1 T0 p1 d% o+ ?% j; }) s# @2 u - 14 delay(100);
' N. N2 I9 u: T, q! ] - 15 digitalWrite(PB5,0);( {$ a3 u9 T2 {( g; ?
- 16 delay(100);- K, v. w8 ^- a1 Y
- 17
' V8 ]- k1 P" J, W3 J6 b. @9 n$ v - 18}
复制代码
3 W3 ?7 a" L2 X" c2.3 烧写程序烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件: - 1[env:MonkeyPi_STM32_G070RB]
B* \) `9 \+ j5 Y; U - 2platform = ststm32 V, I, ^2 H" W& M9 X, s
- 3board = MonkeyPi_STM32_G070RB* w& U0 |! ]7 Z) R! m
- 4framework = arduino/ E* f1 M' |3 R, I) a g# v
- 5
2 M* w1 S/ }; g" a. N - 6upload_protocol = cmsis-dap
复制代码
6 Z+ ]" m! H( g: h. K修改完成后,点击platformio:Upload按钮即可完成烧写: + a0 _% E2 x* ~5 G" N+ r9 r R
9 e. t9 }0 Z( `5 w+ ?/ d( L+ j9 Z: s. r& u; w8 d1 s: G; v1 I
转载自:MakerInChina.cn0 j% M$ s) s( S6 Z8 @
|