使用Platformio平台的libopencm3开发框架来开发STM32G0,开发环境为VSCode+PIO插件,这里以开发STM32G070RB芯片为例介绍。 & a V4 ^1 s3 H6 Q
1 自定义开发板由于使用的STM32G070RB在pio的libopencm3框架中没有这个型号,因此首先需要先定义一个自定义开发板型号; 安装ST-STM32 platforms4 t5 i* z1 l7 f/ Q' Y h/ I
在Platformio的platforms中搜索STM32,然后安装ST-STM32 platforms框架, 根据已有的相似型号进行更改配置json文件
# g' n1 i" H. F1 H- [6 d1 o4 M# I在PIO安装目录找到对应平台开发板文件夹,比如我这里pio安装在默认的用户目录,则STM32开发板的路径如下: & T- o: ^# l4 C5 B4 l& S# k
- C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码
! B3 [; o+ l( U$ H8 l7 u
# o' s8 [$ d' Z3 F' c. K复制一个相近的板子型号的json配置文件命名为 MonkeyPi_STM32_G070RB.json,更改mcu型号、svd等信息;这里复制修改 nucleo_g071rb 这个json文件,修改后如下: - 1{
1 v' B! F" x3 D @7 Z - 2 "build": {: @+ _6 S( l" K6 R7 k2 U7 g
- 3 "core": "stm32",1 V6 F6 E0 a' L; X
- 4 "cpu": "cortex-m0plus",
; A1 G$ |3 @' y. j - 5 "extra_flags": "-DSTM32G0xx -DSTM32G070xx",0 H" O. q2 J% ~/ V2 f: x$ J
- 6 "f_cpu": "64000000L",
5 U9 f5 S( _$ ]2 C+ E - 7 "framework_extra_flags": {6 G" r/ L% m- z" T& `
- 8 "arduino": "-D__CORTEX_SC=0"# h6 B7 m6 o5 Z& Y2 b' U, y
- 9 },: e3 f8 \" }% X& Q, e5 F2 G: ^9 @' P9 o
- 10 "mcu": "stm32g070rbt6",1 [" |1 \# _* T" F0 M( c
- 11 "product_line": "STM32G070xx",: F& Q7 V8 a% ~" t+ @; _
- 12 "variant": "STM32G0xx/G070RBT"
3 N$ z! Y5 O ^ - 13 },3 j- f% j+ e: N. d9 j Y3 h4 i
- 14 "debug": {: P. c- V5 U) h, R7 N1 p* C5 c8 l
- 15 "default_tools": [6 f! z3 }& I5 f3 L# g
- 16 "stlink"3 @' J% b+ v3 ?7 }* O' d6 H& d
- 17 ],
5 \4 w- x- P2 n5 R$ u, g% @) Z: W - 18 "jlink_device": "STM32G070RB",% F$ Z4 T# ?/ W' Y; l9 f: f
- 19 "onboard_tools": [. S, X. t' ^' x% |) P: Z6 w
- 20 "stlink"
0 g6 H7 r! a/ V# L& b4 Q# Z0 `* Y2 P- I - 21 ],. R% O Q9 Y/ F2 V
- 22 "openocd_target": "stm32g0x",7 g5 A1 b/ l5 P/ Y4 I/ ?
- 23 "svd_path": "STM32G070.svd"! C' _4 @; v5 q0 a
- 24 },1 O; L- k8 \6 ^4 c, G3 J0 f+ O S/ I
- 25 "frameworks": [
( L: p6 L6 e, ~+ d& z - 26 "arduino",3 [- u( N6 I2 I6 d3 `0 U1 h
- 27 "cmsis",
; }$ b" Z' ~& n6 }+ g - 28 "libopencm3",; h( p" j# c3 d' _
- 29 "stm32cube",
8 _% x% V I" l5 `7 V - 30 "zephyr"! ]7 a3 x" ]: y& e3 n& m
- 31 ],+ J7 ^+ N n; ]7 X* P
- 32 "name": "MonkeyPi_STM32_G070RB",4 B1 v# C& \! ~. {' x6 I
- 33 "upload": {
2 |3 I6 Y4 B9 I/ \ - 34 "maximum_ram_size": 36864,
2 R3 {& N* l# z" @3 d% j* n - 35 "maximum_size": 131072,& M( h1 R7 G. {* r
- 36 "protocol": "stlink",
) r# `$ c" n, r - 37 "protocols": [2 G$ F+ q t1 J8 V5 f
- 38 "stlink",: j) E9 e- R( \. p
- 39 "jlink",8 H) D# y' ?6 Q- a/ r! z- s
- 40 "cmsis-dap",
" T" c7 ], g% E3 C- N) P - 41 "blackmagic",
0 p9 c8 {2 c/ s; k. d7 \0 T - 42 "mbed"2 P& U7 A: j0 g* S& ?$ |& `. u) V7 s
- 43 ] g( ?, S% g; t2 R3 U7 q7 [
- 44 },
1 p2 D4 Y1 O+ L3 B+ ~+ [. j+ w3 w - 45 "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",; H; o: E9 m- ~! }% O
- 46 "vendor": "ST"
( z% V1 v% d2 U - 47}
复制代码 : X7 x$ h1 ^$ P. A! }* F
2 新建测试项目- D- A, E# y; |- F& o; w
; v2 j8 v3 M( w* M0 A( d
# v: f5 S7 G4 z( v) F: q: I
" |) ~' ?. I. f- w" ]! i& t; k s& ~* T: i- d# B* v( T
- 1/**1 _5 |: ?4 [5 N7 D! C( L% E& q
- 2 * @file main.c
8 K2 ^( c) O$ g4 f( s - 3 * @author MakerInChina (makerinchina.cn)
4 B5 o/ A# y ~6 u- _4 j - 4 * @brief
% k: }, n- [+ b2 A0 N! i - 5 * @version 0.01/ j0 Z! Y, Q. p0 t3 |9 n
- 6 * @date 2022-09-04( ~( D8 n5 s8 b" h. P- h
- 7 * / j+ J) U8 p8 h9 Q' Q) S# H7 f4 @6 V0 {
- 8 * @copyright Copyright (c) 2022% Y; T6 P) b/ S' @) g
- 9 *
S. ]' G, _$ E4 v$ n - 10 */1 p9 B8 H5 @( D
- 11
) ` X9 f: [& B8 r" i3 { - 12#include <libopencm3/stm32/rcc.h>8 B u& f( k" m
- 13#include <libopencm3/stm32/gpio.h>; H! z( \: j. t9 ?9 L% j3 ^( @+ x$ Y' J
- 14
* J$ F5 k3 d9 v& B/ ~ - 15int main(void)9 s8 K& P8 S7 b4 }0 |1 Q
- 16{. G' G! V" z J* ]+ x( u* [
- 17$ W/ [$ r; j I" q# L2 O
- 18 //system clock
- ?/ T0 ~3 q' T4 l. b - 19 rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
2 v# t, x$ C- a p3 a! W* | - 20+ i$ o: p' \! I4 v }( R9 I$ ~# {- K9 }
- 21 //gpio setting
$ f7 z+ D' e: q& T. U5 {4 ^" q& S* { - 22 rcc_periph_clock_enable(RCC_GPIOC);3 e0 l1 o: G6 ?9 @ g V
- 23 gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);2 `+ N$ R/ G! ^$ j: _
- 24+ m4 d$ a5 N( V$ d
- 25 while (1)! U2 w7 j8 Q a/ Q: r5 p
- 26 {
1 {6 M% U) x ]! G8 i - 27 //toggle gpio
+ v! @$ z! z. ~, S- u" s6 N - 28 gpio_toggle(GPIOC,GPIO12);
0 m _2 k% ~ n% v* [2 L0 K* W - 29' B; l9 ^* F2 N! t' `, e3 H
- 30 for(int i=0; i<4000000; i++){+ L* W0 E" ^$ R3 B0 @
- 31 __asm__("nop;");& y7 p* L' C* E
- 32 }
9 r* f' h/ U) v% F/ t - 33 }- d) O/ { G' }* M$ L; G3 H8 M
- 34
' V7 h9 u9 U( g1 b# ] - 35 return 0;
8 N. L: P; x' N C( @$ k9 o - 36}
复制代码 3 ]0 E1 O2 P3 w2 }/ g; X
# O7 U9 w( N0 c: ^; s$ ^这个测试程序中 先使用 rcc_clock_setup 函数配置系统时钟为64MHz,然后使用 gpio_mode_setup 函数设置GPIO模式,最后调用 gpio_toggle 对GPIO进行翻转操作。 8 T0 p8 Q. a: }* q$ e) d$ W% J
3 编译和下载- 1[env:MonkeyPi_STM32_G070RB]- t7 t/ R: a- [$ y
- 2platform = ststm32* n5 i1 [8 V; _. Z
- 3board = MonkeyPi_STM32_G070RB
3 b7 V, W1 R1 [* x G5 f+ C - 4framework = libopencm3
( Z; h; Z* l( W5 q# F5 n - 5* p3 e7 R; N" D4 j4 n, o) n1 ]
- 6upload_protocol=cmsis-dap
5 }8 C% j/ F. _+ l, J3 M - 7debug_tool=cmsis-dap
复制代码 + l9 w4 {6 S; N6 w) w2 H$ H
! Q3 m* l1 l: T0 e+ H! D
/ R4 o" h1 D( ^1 E. @- n- b; C/ l
转载自:MakerInChina.cn
! b2 k# h+ S+ g) l( ?; `/ `5 D7 d5 d: R. x
2 F- S. Z! l6 ]+ F8 u1 w& A. h
* m7 e# m* L$ n& W7 L: K |