|
使用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安装在默认位置): - C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码 8 T2 j/ m4 d5 }, g5 K
在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 nucleo_g071rb.json文件 进行修改,内容如下: - 1{
9 B9 I0 t- p! T, V# u8 O - 2 "build": {% Y! f* B, J! E& o, k; p5 l
- 3 "core": "stm32",
" L" Z4 c% B% r" b( o5 O - 4 "cpu": "cortex-m0plus",; b9 ]; D8 @$ |, T( @
- 5 "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
7 k4 |6 r' ~. K, y( k - 6 "f_cpu": "64000000L",
D( S& {& [' J( _* S# g/ j - 7 "framework_extra_flags": {9 e0 W8 i8 V2 {
- 8 "arduino": "-D__CORTEX_SC=0"' y. L5 c* a1 E+ x2 C5 t
- 9 },) w4 o, H% w* v, w
- 10 "mcu": "stm32g070rbt6",
# |0 X1 x! Z" S, d5 P. v% i S - 11 "product_line": "STM32G070xx",7 D7 G( a2 [' w B3 o! S0 p5 ]
- 12 "variant": "STM32G0xx/G070RBT"2 d2 b5 N3 ?9 T3 y) Q
- 13 },6 E; G" }8 @3 b) ?# q. [5 g, F
- 14 "debug": {
6 V0 y' o' S% s! T - 15 "default_tools": [
: Z2 X# u7 J9 l! W8 o7 C - 16 "stlink"0 {# b2 _& q0 N+ x5 |; S* }$ F
- 17 ],$ @* Z/ @! K6 Y8 h6 m. v: W
- 18 "jlink_device": "STM32G070RB", P: B8 C2 b( V4 x/ i& [
- 19 "onboard_tools": [& Q/ A$ A; |$ I) N+ n* P. g6 w1 G
- 20 "stlink"
# R% a z* e5 f! s9 J2 P$ J - 21 ],
3 R# W5 |% A8 m - 22 "openocd_target": "stm32g0x",
% h9 Z$ L% X6 b' M& L$ r - 23 "svd_path": "STM32G070.svd"% A4 _6 ^& ~7 a" o6 l4 E& P
- 24 },
0 o( b& n' J# K1 |* n# |! W - 25 "frameworks": [
$ `! W- L- `6 {( @; Y; C1 ] - 26 "arduino",
8 J) ]0 N( W7 Q- m7 x - 27 "cmsis",
$ j3 q+ ]" _3 i2 Y; k - 28 "libopencm3",! m+ F+ d' `8 F q
- 29 "stm32cube",. m% P$ N. k3 |6 K" h2 t3 ?
- 30 "zephyr" D% E3 M& t# {% m2 V7 A( V
- 31 ],% j* U2 R$ q- g. n! k, |% r; u
- 32 "name": "MonkeyPi_STM32_G070RB",
- o: L1 [7 ~; c2 b% v - 33 "upload": {
6 |, Z0 U D. y5 j5 o) H, `) A9 k - 34 "maximum_ram_size": 36864,5 \; V8 K+ H$ ?! \1 _
- 35 "maximum_size": 131072,
1 ]" b9 c0 m* P6 k5 o - 36 "protocol": "stlink",
% R- v7 p* Z- y - 37 "protocols": [$ D, r8 p" ^ a
- 38 "stlink",
$ X- l! v; Q# ~ - 39 "jlink",& S1 [2 r* }: N( W# j% M
- 40 "cmsis-dap",5 T2 h7 T! Q3 G0 m2 I
- 41 "blackmagic",1 F# |+ n# K, l. n4 v5 F$ e0 O$ r
- 42 "mbed"3 h( A$ o- P2 q9 [
- 43 ]
" p# L$ [/ r( L5 p( @ - 44 },
. G2 K& r: P: ^" `: W9 [ - 45 "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",2 h5 f9 ]7 t5 W, }( g4 M
- 46 "vendor": "ST"
- ~; k( D. B, o, T5 Z- c' B - 47}
复制代码 # n! D- Q5 R& T7 Y# K" k
这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称;
# W( O; H& y1 ~4 w$ H$ s 1.2 Arduino框架下添加board定义在目录 - C:\Users\userName\.platformio\packages\framework-arduinoststm32
复制代码
2 J; U7 \4 x! ?& Y7 X+ j9 ^) a下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下: - 1# MonkeyPi STM32G070RB board
: w7 q( S: e0 R/ D* o - 2Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB
1 Y B! q' N7 V& z: W) k0 `0 H - 3Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB
6 M% ~$ L8 \! M8 b! r - 4Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072+ G! V% S( U" R, F+ X) H
- 5Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768
# ~; N [( i. y2 z - 6Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus! ~5 F) c6 @3 K- \0 _
- 7Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB
0 C5 d X n; w - 8Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx4 R. Y e7 c% g
- 9Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx
3 a* g4 d, y& q6 B2 {% | - 10Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT
( z& J. r. ~) E - 11Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math# n; f7 A9 ^# T8 g* `( }
- 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: Y1.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/**
- D- R& L" Y! p% S6 I - 2 * @brief System Clock Configuration! }- L, E0 G5 L5 {+ d1 ] _! l. O; z
- 3 * @param None9 y. Z8 C+ u" A$ b
- 4 * @retval None
; _0 H# S0 W2 B! [( h6 |/ u z - 5 */* H* d8 ^# ]% _! J
- 6WEAK void SystemClock_Config(void)1 i: b+ `# v5 g5 R
- 7{
: Z. @6 n: \9 i0 `9 i - 8 /* SystemClock_Config can be generated by STM32CubeMX */8 Y$ f9 G; p7 }, Q( s/ k, o& R d
- 9#warning "SystemClock_Config() is empty. Default clock at reset is used."
, ^3 L% k, U7 |, p* j ? - 10}
复制代码 % k; i5 q# y6 c5 p/ x
并修改文件的定义如下: - #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
& 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#include <Arduino.h>
( Z. o) U f' d, K) j' R+ N2 j$ n) I0 r. z& J - 2. A, Y8 G6 s. j- I+ B2 c
- 3void setup() {
8 A1 `' V& \* {! D - 4 // put your setup code here, to run once:4 @2 n# _& [- \% e; M7 r
- 5% ~9 N! G% v5 t/ w
- 6 pinMode(PB5,OUTPUT);
p( U# ~1 d% i2 i/ t& t" O/ J4 Q - 7
7 k9 {8 B$ H2 | - 8} Z* _: ~ e: j; H" L( K
- 9
8 V% j( C# N9 t7 L- @ - 10void loop() {4 e( H1 p7 X! s2 h( E
- 11 // put your main code here, to run repeatedly:
7 p& Q c& m9 `1 A - 12
; ]# D7 D+ W* v3 S$ k1 W - 13 digitalWrite(PB5,1);
' ]$ Y* a) ~. N - 14 delay(100);
4 x7 B5 W5 n8 T. Y" v' h - 15 digitalWrite(PB5,0);; v2 ^# G7 G- `, [2 _8 X0 ^
- 16 delay(100);& i* w. T) Y! y' C. B+ A
- 17
0 _( }$ Q* ^% }: W' l - 18}
复制代码 5 j0 p( i6 h! N! e }: Y6 A3 g
2.3 烧写程序烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件: - 1[env:MonkeyPi_STM32_G070RB]' B7 E3 m+ q, J
- 2platform = ststm32 b: y7 f! s: C6 k2 D
- 3board = MonkeyPi_STM32_G070RB
0 ?: y0 I {$ s% K% M+ M% M. ] - 4framework = arduino
9 b) }; n& l1 [3 ~3 C1 c! d% g - 5
" w0 u& R, F# x& R5 b+ g. Q/ F - 6upload_protocol = cmsis-dap
复制代码 ! m9 m3 m- p F/ P& x
修改完成后,点击platformio:Upload按钮即可完成烧写: & f! L4 @1 r9 t
* A: c3 p. W/ e) _3 \
1 ~9 ^/ g+ ]4 Q+ u, j3 r转载自:MakerInChina.cn/ ]& j/ ]1 `: H5 A! @
|