使用Platformio平台的libopencm3开发框架来开发STM32G0,开发环境为VSCode+PIO插件,这里以开发STM32G070RB芯片为例介绍。 : W% H$ D* F* l' ?! |- U- _
1 自定义开发板由于使用的STM32G070RB在pio的libopencm3框架中没有这个型号,因此首先需要先定义一个自定义开发板型号; 安装ST-STM32 platforms7 }5 I2 |+ _) J9 ]* z9 K# f1 Z
在Platformio的platforms中搜索STM32,然后安装ST-STM32 platforms框架, 根据已有的相似型号进行更改配置json文件
/ q+ E; ?# U, A- _& {在PIO安装目录找到对应平台开发板文件夹,比如我这里pio安装在默认的用户目录,则STM32开发板的路径如下:
* V6 N: c2 ^4 j. V# Q. J: \
- C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码
f6 B1 \, [# o. B
, T# N5 i9 s) m+ {' T" m2 }复制一个相近的板子型号的json配置文件命名为 MonkeyPi_STM32_G070RB.json,更改mcu型号、svd等信息;这里复制修改 nucleo_g071rb 这个json文件,修改后如下: - 1{
l5 s- L) P8 o r$ _7 b# ]( b - 2 "build": {) o. l/ \6 C2 g# e* y, _# q+ C
- 3 "core": "stm32",/ s+ D i: q- f# y1 r
- 4 "cpu": "cortex-m0plus",+ x7 s0 u3 Z* I0 O- K
- 5 "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
9 {7 {5 \" S/ W% [" h - 6 "f_cpu": "64000000L",4 E1 O% v# A. Q
- 7 "framework_extra_flags": {
, F# w0 m$ ]9 b/ B( B% P; M - 8 "arduino": "-D__CORTEX_SC=0"
1 j: R% c+ h- w& L7 e7 O4 H - 9 },
/ B0 P& V3 |' B( n, } - 10 "mcu": "stm32g070rbt6",
/ e g$ P. q3 b/ b - 11 "product_line": "STM32G070xx",7 w/ v# F# T% |( t& m
- 12 "variant": "STM32G0xx/G070RBT"
0 M, \* M9 P5 P2 k9 S" e3 N& h& \ - 13 },8 {6 f1 y( k5 X$ S6 N
- 14 "debug": {
( | Y6 p( w; P/ M. f - 15 "default_tools": [
& t' _) l. A; M - 16 "stlink"
/ c* s4 u6 f1 ?* z" o7 x: a - 17 ],/ G7 k$ I$ J' Y4 ]
- 18 "jlink_device": "STM32G070RB",+ B9 P. [% x" l( N7 r
- 19 "onboard_tools": [$ i. h. @" Q- r& s
- 20 "stlink"" y6 b3 A. d. l5 [5 R9 T. D
- 21 ],( d' }, |9 S& Y' ?9 C0 D3 h
- 22 "openocd_target": "stm32g0x",$ @( ^9 |' C: S3 x- k. Q
- 23 "svd_path": "STM32G070.svd"
3 G& F- \4 d1 \; t+ W* @ - 24 },& q- c1 U! S* }/ J9 n
- 25 "frameworks": [
+ n8 K1 i1 Y# h, h. P: L7 y2 e- e - 26 "arduino",* Q6 F+ B* b! g9 ^- S4 \5 K9 [
- 27 "cmsis",
2 g6 B* b i0 @) e+ f% j - 28 "libopencm3",4 G. i) X J5 o8 M. l
- 29 "stm32cube",
v6 [. D+ _( x8 I6 G - 30 "zephyr"
& j7 {. K8 `% m2 Z( m) X S - 31 ],8 L+ q E, z& o8 g5 _- Z
- 32 "name": "MonkeyPi_STM32_G070RB",
$ a+ m' X! G. H3 C - 33 "upload": {
& l+ N8 ^" v. h/ E- Y! D: {9 L - 34 "maximum_ram_size": 36864, y+ e+ j9 K- R# ^1 d
- 35 "maximum_size": 131072,
: R0 e8 F7 p& l1 H - 36 "protocol": "stlink",2 D# ^: ?' \6 z: Q6 Z/ g
- 37 "protocols": [' i) _% a, v1 I4 [: a* v7 w/ i7 ^' e% `
- 38 "stlink",+ A3 q. A: `* L
- 39 "jlink",
9 r3 }1 k E$ ]6 P, e - 40 "cmsis-dap",
& o' y" }4 ?; S ] y+ ?4 J' ? - 41 "blackmagic",
# S. z2 V2 U0 o: @1 ] - 42 "mbed"/ G. E/ C* [( X: S& i7 ?
- 43 ]3 Y/ |, Q1 I$ U& M* G" R
- 44 },9 X" D+ u u3 ^& T# P! c) n
- 45 "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",
& C6 B0 n8 ]8 d+ } - 46 "vendor": "ST"4 X8 B6 q! a7 ~3 h% u2 ~' ?
- 47}
复制代码
+ s0 `2 R: C1 l: V2 新建测试项目) M5 k. e: T+ \
8 l/ [, L% a: m) m, _* z) Y) ]
4 {8 t8 _+ f/ h1 S5 N4 A% U; Z+ R2 O! C) ]+ o+ q
2 c: R( `! s7 A$ Q- _- 1/**6 X# V, e! Z0 z2 X/ h# u
- 2 * @file main.c# b" Z. Y, P$ P) K
- 3 * @author MakerInChina (makerinchina.cn)( W+ i; u* m5 \3 y' s
- 4 * @brief
) O) F1 |' X% V) I' p1 w6 C7 Y - 5 * @version 0.01% T, S: I: D4 w; R* C4 O
- 6 * @date 2022-09-04
* K2 a& f- H/ M8 r3 C/ B - 7 *
3 g% j5 O" J3 y* @: P - 8 * @copyright Copyright (c) 2022
$ U& b4 r& u" C- e" U- Q - 9 *
, r1 l2 v6 u) j1 ^ - 10 */% \* v8 Y3 `7 K! |9 x) X
- 11
, a' S7 j# s; O, w( `4 M; e! S - 12#include <libopencm3/stm32/rcc.h>
4 Q1 _# I; m' I: @. y - 13#include <libopencm3/stm32/gpio.h>
- _- g0 y. Y4 G$ j9 G* w! e - 141 y* i: G4 r P+ v- w
- 15int main(void)* L" C5 o4 K6 O5 s8 d
- 16{0 p; ?( ~( E$ f
- 178 d3 D# S, x& d1 [
- 18 //system clock
% H* t6 C" d y: b) q - 19 rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);( p0 G& q& R& d$ L- t
- 20: k7 f ^9 S) U0 U8 P
- 21 //gpio setting! I1 P) v# _' D4 U Y# l' I
- 22 rcc_periph_clock_enable(RCC_GPIOC);
. S& [; N2 i6 n- k2 p - 23 gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12); K6 H# [# A( u2 }1 q
- 24
\( ~: g" N/ B V5 M: d4 {' u - 25 while (1)
2 h+ I9 U& s3 t) |( ` - 26 {2 B: e) a* m7 `# J( j
- 27 //toggle gpio
! n, N/ t$ N+ k& r - 28 gpio_toggle(GPIOC,GPIO12);
: i$ n8 \. I ~$ Q+ x$ e - 29
! b+ j' ?2 o8 u; l# \ - 30 for(int i=0; i<4000000; i++){/ D9 t4 _0 ~# |0 c$ ?
- 31 __asm__("nop;");* E( S% d8 a8 o; H6 m4 E
- 32 }
8 q7 w/ s) m* p# Y; A# T9 v; a - 33 }
+ R" p q+ F4 R, B8 R - 34
/ p. E$ ]3 x! A4 ~1 V - 35 return 0;
$ f0 O( D: ^! j( Q' W# y - 36}
复制代码 3 Y+ H1 V' `' x4 f, U
$ l0 U$ H, B* E# i这个测试程序中 先使用 rcc_clock_setup 函数配置系统时钟为64MHz,然后使用 gpio_mode_setup 函数设置GPIO模式,最后调用 gpio_toggle 对GPIO进行翻转操作。
2 Y6 ^$ C& u' w 3 编译和下载- 1[env:MonkeyPi_STM32_G070RB]% m* f: x& m: M1 C" `3 O
- 2platform = ststm324 A) B2 ^ a. D4 _0 i" j `5 w( V9 X
- 3board = MonkeyPi_STM32_G070RB
4 k0 p ]" ~3 `- \8 ~ - 4framework = libopencm3# r5 i, g0 _8 ~9 v
- 5
& J, z2 T, s1 a, a - 6upload_protocol=cmsis-dap( H$ \( Y# T! z' s& X
- 7debug_tool=cmsis-dap
复制代码 1 b" N" Q* x* [: u
' c6 x$ m* r5 T: K# O0 V4 k- ^
9 ~* F- w2 {3 k& u
转载自:MakerInChina.cn# E( t: N- o, L3 ` O8 t
$ e3 Z3 Q- s6 u) c/ n: p
& y' C8 S) x3 I& }: L4 G, A
2 v8 q: G8 e; ~& x+ T) \+ m |