使用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安装在默认位置): - C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码
- r; Z! \/ S* w在这个目录新建一个board描述文件:MonkeyPi_STM32_G070RB.json,因为和STM32G071接近,因此可以复制 nucleo_g071rb.json文件 进行修改,内容如下: - 1{
7 A$ |4 I& [/ ?* S( B2 Z - 2 "build": {
3 B0 o* x: ^ I& P* u; ]! o v - 3 "core": "stm32",
; p- \! w3 J& Q1 `, y# A - 4 "cpu": "cortex-m0plus",
6 w- b/ j# ?7 ^$ N, l1 S- Q - 5 "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
! n/ Z# G+ j; r: Y - 6 "f_cpu": "64000000L",
/ Y' f# ~2 }0 s! b9 s( ?- ] - 7 "framework_extra_flags": {
( u: p5 z* x; _# M9 B; E. {% D2 \ - 8 "arduino": "-D__CORTEX_SC=0"
" c# K; E9 P9 }" L, c% {% _ - 9 },
! X6 Z1 d C3 K; W - 10 "mcu": "stm32g070rbt6",5 _" _ ]3 _6 }( ^( |
- 11 "product_line": "STM32G070xx",
+ I: j9 `; t' D1 W9 d; T) P2 t - 12 "variant": "STM32G0xx/G070RBT"
' K. @' `, s3 |3 U - 13 },0 M7 i/ u- W# F, W. i2 _# K
- 14 "debug": {
0 I9 j4 J4 N+ w$ } - 15 "default_tools": [2 s7 i( C( q% A( i
- 16 "stlink"
0 `# j, [- C/ ~8 t9 t - 17 ],
, [& x3 ^# C$ \( _4 b# C4 e - 18 "jlink_device": "STM32G070RB",
. l4 s$ W# o2 n - 19 "onboard_tools": [. D8 n9 Y9 {" I
- 20 "stlink"
& ]- g2 Y5 P1 J! z% b" F P - 21 ],
; T! P8 a' U. x7 B9 L" l! m - 22 "openocd_target": "stm32g0x",
- d) D' m, o1 H$ \1 h - 23 "svd_path": "STM32G070.svd"0 C# [( e2 r! L& ~8 l, j
- 24 },
) b+ g6 X$ i$ X) r! Q9 v& n - 25 "frameworks": [
: G* a/ |$ q" i - 26 "arduino",) d$ ? ?- O, W* _$ M) D! _9 v' c
- 27 "cmsis",/ v( h" L8 Q* O8 }) C
- 28 "libopencm3",
, K6 C& \& z6 c! N& Y6 F: ? - 29 "stm32cube",
, B& ]+ Y$ a9 v" F9 X/ _ - 30 "zephyr"
! u% q. [# W: y1 g- C1 ^ - 31 ],9 B: O( P" H" I" g) m E
- 32 "name": "MonkeyPi_STM32_G070RB",
3 e4 C3 U4 d: A1 |. _! i( V - 33 "upload": {6 w8 t6 U9 X1 ~+ R. B1 T0 p
- 34 "maximum_ram_size": 36864,
, x6 S4 I7 @3 p- I - 35 "maximum_size": 131072,
* A% y! g' E( B1 L7 n" x& m - 36 "protocol": "stlink",
) W% M3 t7 U" _0 ? - 37 "protocols": [# x( _9 _0 w/ ?7 B7 ?8 u
- 38 "stlink",- \: Z0 M1 x4 j$ j" g
- 39 "jlink",
" t% s; X+ E$ N6 m: _% M# F* G4 W - 40 "cmsis-dap",* K$ M2 M; Q1 W5 e4 w3 V
- 41 "blackmagic",
: Z" E6 i2 h- C+ a6 J - 42 "mbed"
6 S: N$ j; ?1 J. q2 ~" ] - 43 ]
! {% J$ E7 u! `' U' L$ x5 a - 44 },
/ u! ^1 n8 ]: w% p, ~0 P% V - 45 "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",
- U# h- G$ F% u5 ] e: |7 G! { - 46 "vendor": "ST"
: w0 S) T) T- v( o+ p. T$ M T8 j - 47}
复制代码 3 P4 i8 e+ j- f) i1 x
这里的 MonkeyPi_STM32_G070RB 就是自定义的板子名称; ) b r' W q8 I; @
1.2 Arduino框架下添加board定义在目录 - C:\Users\userName\.platformio\packages\framework-arduinoststm32
复制代码 0 r6 M0 J0 T' [2 ]. W1 d1 Z# x
下有一个boards.txt文件,需要在这个文件中添加自定义的板子定义,内容可以根据近似的型号 NUCLEO_G071RB 进行修改,内容如下: - 1# MonkeyPi STM32G070RB board
! o t( v9 ~9 i3 Q1 h( |. v' C - 2Nucleo_64.menu.pnum.MonkeyPi_G070RB=MonkeyPi STM32G070RB
2 o; ?4 m: q$ m% T! A( h - 3Nucleo_64.menu.pnum.MonkeyPi_G070RB.node=NODE_G070RB8 _$ m6 p+ b" E+ y- ]- @
- 4Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_size=131072! U- s; \4 A3 U& c
- 5Nucleo_64.menu.pnum.MonkeyPi_G070RB.upload.maximum_data_size=32768
6 o8 T7 Y" ?0 r2 ` - 6Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.mcu=cortex-m0plus
1 E( L+ y4 n% @8 A' r% V - 7Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.board=MonkeyPi_STM32_G070RB
0 l) ]4 |- x8 m0 a0 S' A. c - 8Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.series=STM32G0xx) x" P+ T i1 ~. r) j' G
- 9Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.product_line=STM32G070xx! ~: V8 O: s8 ~7 ~. U
- 10Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.variant=G070RBT& `) K: I/ `+ C9 A- `
- 11Nucleo_64.menu.pnum.MonkeyPi_G070RB.build.cmsis_lib_gcc=arm_cortexM0l_math3 n9 M k4 }% {* S9 E
- 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 K1.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/**7 K+ T0 D: _: Z! S& D
- 2 * @brief System Clock Configuration
7 O& Y" w6 L, P3 H - 3 * @param None1 j. V4 u# ^; T9 i- z
- 4 * @retval None8 B' J5 v7 L& G9 X2 Z
- 5 */
7 n; `: D( f( A" G# B - 6WEAK void SystemClock_Config(void)
, \, c" H4 E9 f1 K - 7{ r4 I* r/ p. M9 ?( W
- 8 /* SystemClock_Config can be generated by STM32CubeMX */
7 u: H$ W3 W& b0 X! w8 Q" C - 9#warning "SystemClock_Config() is empty. Default clock at reset is used."
- k3 E" X, H: Z - 10}
复制代码
/ g: Z( S l; ?' Z并修改文件的定义如下: - #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/ [! ?
+ |, `) I+ m1 Z1 c# g6 f8 p& L
7 s/ i" F3 `) c, Y0 s2 L1 X* s6 _9 k2 z3 }" B
2.2 编写测试Arduino代码打开项目中 src/main.cpp 文件,编写Arduino代码: - 1#include <Arduino.h>
* o: Y% w3 C1 ]& Z - 2. m/ t' }! O! E3 v8 ~) w& G2 b
- 3void setup() {$ |7 U0 D7 T t; T( m- p0 z
- 4 // put your setup code here, to run once:0 a P! _2 `, [% e
- 5, ~0 n* _8 r. h6 y4 I
- 6 pinMode(PB5,OUTPUT);
; Z# a; E/ R& i# z - 7
+ q4 r+ ^: R* L) Z _# I/ s - 8}
1 ]* \" b* P7 e; n5 I* c/ a8 c8 C - 9
1 C: v8 a) a2 L- A+ ?4 t4 g" h7 ? - 10void loop() {
# ]0 d! A1 F, L. Y! L - 11 // put your main code here, to run repeatedly:
7 ~9 j2 C$ F" p z$ | - 12
" v/ ~1 w# q* l3 F+ f - 13 digitalWrite(PB5,1);
5 Q$ T( b( A- n9 D, A; S - 14 delay(100);
! y9 _3 O- t- [7 r4 ^ - 15 digitalWrite(PB5,0);. u. W; u) [* n
- 16 delay(100);
3 P8 v7 x f6 k: ^% ~4 r7 G+ ` - 17
% P1 J) a8 Y3 b* f - 18}
复制代码 7 ?8 T4 \4 P' ?
2.3 烧写程序烧写的方式需要根据自己的需要进行修改,比如我这里使用daplink swd方式下载,需要修改项目的platformio.ini文件: - 1[env:MonkeyPi_STM32_G070RB]
) r) j+ v* {, Q0 A" I - 2platform = ststm32
9 Z6 j$ ^# b& N9 p3 }1 m" \ - 3board = MonkeyPi_STM32_G070RB
# l+ ^/ B- q0 `: X! ^: ^ - 4framework = arduino
( D/ M7 W( o" |( p8 d! n$ i - 51 @5 `- o4 a( f8 E& @+ C4 Q4 b
- 6upload_protocol = cmsis-dap
复制代码 8 D3 `$ r, |3 v+ d, w2 ^4 b
修改完成后,点击platformio:Upload按钮即可完成烧写:
: q$ e( H- S6 _) q; p/ A6 g
; C5 _+ l4 ?; g) | A
/ P# u! A+ N* k, N8 f! e转载自:MakerInChina.cn
- ~, X3 a/ W; q% f g |