使用Platformio平台的libopencm3开发框架来开发STM32G0,开发环境为VSCode+PIO插件,这里以开发STM32G070RB芯片为例介绍。
$ y- h( {0 @7 }8 O 1 自定义开发板由于使用的STM32G070RB在pio的libopencm3框架中没有这个型号,因此首先需要先定义一个自定义开发板型号; - C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码 7 N4 K3 g8 \* ]9 x+ `% g4 |# {5 G* \
/ ~" f$ W; v* D( o1 I/ Y8 V1 E) D/ b
复制一个相近的板子型号的json配置文件命名为 MonkeyPi_STM32_G070RB.json,更改mcu型号、svd等信息;这里复制修改 nucleo_g071rb 这个json文件,修改后如下: - 1{2 f; V: ]9 g( Y' W
- 2 "build": {
0 ?6 [/ ]7 i8 T' f/ W - 3 "core": "stm32",0 A/ } [ Y1 n6 h' ^) ~& O
- 4 "cpu": "cortex-m0plus",6 ]. E0 d6 ?( v" _# t8 \- o0 \
- 5 "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
2 z' m& J3 \6 c/ u: E8 `4 d - 6 "f_cpu": "64000000L",+ M' c3 o, d1 F; U2 p$ k
- 7 "framework_extra_flags": {$ P+ K8 V% I3 i( m
- 8 "arduino": "-D__CORTEX_SC=0"
! j, \) Q+ S8 P. p/ l- D# o9 N" L0 k - 9 },
. G6 a" j+ } ~; g - 10 "mcu": "stm32g070rbt6",
1 G3 r! N" n; @# d: Q8 J1 \$ V - 11 "product_line": "STM32G070xx",
$ o' v" Q7 v, l - 12 "variant": "STM32G0xx/G070RBT") |5 \; u, G6 m) E
- 13 },
5 R. u5 }3 w0 _2 J+ B - 14 "debug": {
6 ?% m3 _ p* e1 K, Q0 k - 15 "default_tools": [+ k9 ^. Q9 _3 z* `1 j# v
- 16 "stlink"9 [$ z8 Q9 Q: i3 A' [: b
- 17 ],
$ V1 `' Y2 X- `5 k3 d - 18 "jlink_device": "STM32G070RB",
/ d0 t; M2 ]7 Y8 n- U - 19 "onboard_tools": [, `8 J% L+ ]8 }5 ?8 ?) l; K: a1 B
- 20 "stlink"
3 B. t5 z5 b2 `% c& L - 21 ], `9 v; y# {& _3 u- f# c: z/ R
- 22 "openocd_target": "stm32g0x", s$ j4 p( x3 y
- 23 "svd_path": "STM32G070.svd"
0 }! O- `% F/ d" Q5 R - 24 },
$ M3 ?# ]# H0 ]# J, [- w - 25 "frameworks": [
3 [& a8 i( z4 n - 26 "arduino",
2 L0 q* t1 F; @/ S& l; v% q0 U! } - 27 "cmsis",
5 K! K8 b; W8 v1 O! z$ x0 h( Q4 x - 28 "libopencm3",
* w1 b! r- L/ m" V' q; f" o8 r0 W - 29 "stm32cube",
2 x; m9 ^+ J* b - 30 "zephyr". N) X" B+ o4 g0 f/ O
- 31 ]," Z0 [6 C9 o1 U3 J% T
- 32 "name": "MonkeyPi_STM32_G070RB",
1 {* d) B7 k# W: v - 33 "upload": {1 a* g7 r! |) x
- 34 "maximum_ram_size": 36864,
& z }7 g& Y' n: J6 j3 x+ c b8 c1 j) t - 35 "maximum_size": 131072,$ I; U* i* b, f
- 36 "protocol": "stlink",
( D6 Q" D$ v2 ~ - 37 "protocols": [
/ H& c+ O; @# {! p# u7 |% j - 38 "stlink",# r6 @ {4 V# }* G3 O$ W
- 39 "jlink",( \7 g) x4 v6 I* Y5 I8 n0 j& [
- 40 "cmsis-dap",: ]% n- `4 [! Z/ `! X# L) O
- 41 "blackmagic",& N+ ]; z, P2 ?1 B
- 42 "mbed"
7 T; O% }. l; E% P; o: z; C; l - 43 ]
% h% R! l; D. S, S2 x' J& Q6 e, ] - 44 },# C" J: I, ^. I$ U# w
- 45 "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",* q. J6 T; a% O
- 46 "vendor": "ST"
M! V( ?' I, H8 J, {8 B, K - 47}
复制代码
1 H0 q1 o6 N" t+ c2 新建测试项目+ b/ y4 [7 Q3 M2 p A: \
! D- l; @+ F0 x9 j/ k% F. g
, R6 T2 d: ~5 ?
$ }: S! Q& B# c, X* s0 ]0 g( f; F$ `7 j6 V# d x# v
- 1/**+ w: n; I- O3 A7 Y
- 2 * @file main.c
/ u# b4 I9 X$ R2 w# v( X3 U - 3 * @author MakerInChina (makerinchina.cn)5 I. K; `2 H% G6 e# j; F
- 4 * @brief ' d$ w( _3 u+ K* u. p" v
- 5 * @version 0.01' Z1 B6 j7 q! d# B T: T. s
- 6 * @date 2022-09-04, ^( E% h$ g( F9 X# L" L
- 7 * 9 q/ E+ T2 j- q7 t
- 8 * @copyright Copyright (c) 2022
5 @, b. f! i7 `3 V3 o - 9 * ; L4 d! U* N. L" ]4 ^( _) h
- 10 */
. G" X& c. F1 d/ Z3 ~4 C W - 11
! J6 |" {% e+ u' i* \ - 12#include <libopencm3/stm32/rcc.h>
1 O) b- X9 O- b" ]/ x& ]4 L( } - 13#include <libopencm3/stm32/gpio.h>/ u3 Y0 G, L* f
- 14
3 Z) Q; Y$ i& \ E! i' h - 15int main(void)
1 _. s$ U7 l: v1 V9 s - 16{
3 y6 e d9 b( ] - 17
. C( T+ Y' `, J; R. a+ O. E$ W1 F - 18 //system clock$ B# G1 B( A. W; a9 j+ Y
- 19 rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
3 q4 F* P0 l, f$ D' _ - 20 s* {- B& w: b$ {
- 21 //gpio setting7 C. H. ^- o+ b" L
- 22 rcc_periph_clock_enable(RCC_GPIOC);
3 ?) s; l8 h$ r8 x& V3 f+ ^ - 23 gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);' a8 P$ N; ~6 u2 a8 P. b ~4 c
- 24
, R0 ~/ r6 h1 \+ f- E% G& G - 25 while (1)
, X! f$ }7 O# j% W - 26 {
8 d9 c* n0 j" V( l3 A$ g o - 27 //toggle gpio+ w! M# h% P6 q0 @4 G
- 28 gpio_toggle(GPIOC,GPIO12);% ~% j6 {( x N- U( G+ Z
- 29% i, D$ _; W. Z! ]" I* ^
- 30 for(int i=0; i<4000000; i++){) r8 C2 l& ], E
- 31 __asm__("nop;");
# i2 R- G+ r& p0 S" v - 32 }' J0 M, y% O$ m1 f+ R: X5 z% n
- 33 }
! T `* d) R; {1 h, e0 V) Y# K - 347 m5 n! S, @" e5 n/ f* o
- 35 return 0;2 Z5 p; ]8 s1 J
- 36}
复制代码 3 H' l1 p) \8 {! W
! m' R/ \; D- ~( h这个测试程序中 先使用 rcc_clock_setup 函数配置系统时钟为64MHz,然后使用 gpio_mode_setup 函数设置GPIO模式,最后调用 gpio_toggle 对GPIO进行翻转操作。 : I! K0 \: s, O9 j% C/ r- l" f
3 编译和下载- 1[env:MonkeyPi_STM32_G070RB]8 p) H& Z5 b2 s S
- 2platform = ststm328 w1 c/ B7 O J0 E4 E& @
- 3board = MonkeyPi_STM32_G070RB
( E7 ]0 h2 K7 j& F+ W* A - 4framework = libopencm3
& t: R! U( s9 p5 T: T4 L - 5$ W$ T* R& S! w T
- 6upload_protocol=cmsis-dap
( E9 z$ Q+ M, ?+ U - 7debug_tool=cmsis-dap
复制代码 4 r3 x$ b2 `% j$ U& V4 [
% m8 a& x$ z1 u3 V
' O& |( \; r5 ?; b转载自:MakerInChina.cn0 }" y+ L! @7 R3 O
. G4 x' B5 g. I" s- K# X
q2 M% O) \1 {# r
7 e* j" Z* V; v2 l% U& e/ c; O: H |