使用Platformio平台的libopencm3开发框架来开发STM32G0,开发环境为VSCode+PIO插件,这里以开发STM32G070RB芯片为例介绍。
) g& L+ s7 o' r 1 自定义开发板由于使用的STM32G070RB在pio的libopencm3框架中没有这个型号,因此首先需要先定义一个自定义开发板型号; 安装ST-STM32 platforms0 H/ b2 P$ q. L7 H8 v C. N
在Platformio的platforms中搜索STM32,然后安装ST-STM32 platforms框架, 根据已有的相似型号进行更改配置json文件; q0 e% F2 W1 [! T, V2 p
在PIO安装目录找到对应平台开发板文件夹,比如我这里pio安装在默认的用户目录,则STM32开发板的路径如下:
5 B& Q# @4 X" Q5 b; D
- C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码
, ]3 Q% y7 y& W. `, ~8 E0 L+ n- Q# ]9 \
复制一个相近的板子型号的json配置文件命名为 MonkeyPi_STM32_G070RB.json,更改mcu型号、svd等信息;这里复制修改 nucleo_g071rb 这个json文件,修改后如下: - 1{! j4 C/ k3 e \1 e& v; e
- 2 "build": {% }$ _7 d' l8 Y9 T8 p
- 3 "core": "stm32",
N, X1 a3 v4 K% p, ^3 l - 4 "cpu": "cortex-m0plus",) L; H' U. @% P) U, ~5 \1 _/ C
- 5 "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
! [' n2 d$ [6 O4 |- V - 6 "f_cpu": "64000000L",' }" z- s( ^/ o6 R6 I
- 7 "framework_extra_flags": {
$ u, J5 f- I; T - 8 "arduino": "-D__CORTEX_SC=0"7 A8 m6 {9 ]8 @) O6 j) N4 R
- 9 },
- ~6 h5 m2 G" s# ] - 10 "mcu": "stm32g070rbt6",$ `* U' k- c2 i0 B4 q
- 11 "product_line": "STM32G070xx",0 F+ K* u3 q7 h1 c2 G2 u/ \
- 12 "variant": "STM32G0xx/G070RBT", ~7 ~# D. O7 p+ e
- 13 },* |/ m$ P8 V' {4 Q, G
- 14 "debug": {* o8 P% V6 }. ]. G# S
- 15 "default_tools": [
$ T* A {$ ~: o5 k6 d! \ - 16 "stlink"
1 O b8 n+ i( m# B - 17 ],) `% b8 ~3 F$ D/ F8 ?6 G( h) L
- 18 "jlink_device": "STM32G070RB",
9 p; z: o, T$ f, ]3 e - 19 "onboard_tools": [& R6 n; A) l8 N
- 20 "stlink"
( f8 t4 m7 A! q) H' B/ B! r - 21 ], ^9 M2 j; @# B8 ?3 ^
- 22 "openocd_target": "stm32g0x",
/ C4 G- } d5 d- v! Q+ x# B - 23 "svd_path": "STM32G070.svd"3 o: t, p/ Z3 k
- 24 },+ B9 x& M" y6 S5 H% d' x$ a' u8 ^
- 25 "frameworks": [
' w! d# P* ^% y! W - 26 "arduino",$ z! L: P0 f9 T* o; J
- 27 "cmsis",
4 T; i; \4 T! F3 t5 E1 D - 28 "libopencm3",
/ r: K; ^! a9 m - 29 "stm32cube",2 X$ {& f2 n5 L3 `1 Z1 A, @4 w
- 30 "zephyr"
8 t) M! l1 P, G- \' Q! Y* j# K- J - 31 ],) i, w* t# U4 O
- 32 "name": "MonkeyPi_STM32_G070RB",
( z- A1 e( \& g9 y" N - 33 "upload": {
' j# x( l8 D* a [( m* ^+ ~ - 34 "maximum_ram_size": 36864,$ s5 L. }& q* B5 k
- 35 "maximum_size": 131072,
9 g7 G, A. E" i% h - 36 "protocol": "stlink",
% e w; p( t4 D- P8 b - 37 "protocols": [7 f- @6 M' ]7 M( N6 }% N& b
- 38 "stlink",3 |9 ^7 ?2 I3 T2 R! \4 _3 V v
- 39 "jlink",
/ s( d1 O2 G9 T) i3 x; d - 40 "cmsis-dap",) F/ V& W. z5 q- y
- 41 "blackmagic",
% P7 @( ^! a6 u( p$ c) U2 z - 42 "mbed"
, Z' J; T M4 I4 w3 Y+ ^9 D: k9 e+ L - 43 ]* N6 v/ q* z2 a7 z- i2 l; n
- 44 },- o: i4 y* m7 l5 z% U0 }) P
- 45 "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",
5 H4 e$ {: f! F5 y# `: a - 46 "vendor": "ST"
% b+ E5 L; q/ M0 n - 47}
复制代码 / ^) } f$ u' @! d3 s
2 新建测试项目8 d' E0 d8 x' u( a
* R! \; p& b- l* P
# a- D/ K* @' t3 y- B3 v1 m1 N
( e" M1 M2 R0 X2 \
4 M& v; `: D6 H: J& o& y) @" b
- 1/**
G! i- t4 Z( S# m. d - 2 * @file main.c. I* z5 [' z: f, w: v
- 3 * @author MakerInChina (makerinchina.cn)
/ m% n- a/ w V7 C, Z - 4 * @brief
; O9 P M, R6 c - 5 * @version 0.017 z" I5 W! G3 X' \
- 6 * @date 2022-09-04
' H( r; L0 S8 ~: k) D - 7 * ; {2 j6 ?! c) ?& w: h- t
- 8 * @copyright Copyright (c) 2022
L7 E1 _( N& V `: R# U8 p1 J - 9 *
% P3 Q2 X9 x3 ?8 C$ l - 10 */3 o" v/ {+ M9 c i* T$ _
- 11
. [0 o ~. s5 m - 12#include <libopencm3/stm32/rcc.h>5 K2 p+ x J+ U' C
- 13#include <libopencm3/stm32/gpio.h>6 x2 x3 F6 a, j& I* x- ]2 h( R
- 14' b) X2 ]) a8 K; [1 V
- 15int main(void); J. I5 u9 R& `% Y
- 16{& P* F8 H X I# `9 J: G. }; \
- 17
3 G, w) b# f; E' ^1 |( Q& [4 Z; q - 18 //system clock
8 ^ L u7 U! V- C$ ~; f - 19 rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
% E* l) O3 B8 _" i+ G - 20
: C- ?- L( N0 Q( L$ W/ v4 O$ q - 21 //gpio setting+ H8 M3 F. M+ Z7 f# m
- 22 rcc_periph_clock_enable(RCC_GPIOC);
' U* o( d/ Y# V8 E+ z$ Y - 23 gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);
2 [, N/ s/ H8 A! u2 T( x5 w - 24% c) s, n( u3 H5 A* Z7 C
- 25 while (1)9 `# I- B3 x' P5 w6 p& |; A
- 26 {
8 {- E: o3 i; m$ M/ s# k% | - 27 //toggle gpio& e$ {$ S1 B2 _3 Q
- 28 gpio_toggle(GPIOC,GPIO12);
4 t- R" T" K" u9 T4 u - 294 [! r. {2 M$ ?4 ~2 e. n3 c
- 30 for(int i=0; i<4000000; i++){& x7 N" n$ S6 q9 p Y6 H3 H
- 31 __asm__("nop;");
2 r& @6 D' D+ C! e ^$ @ - 32 }% }) P d- e5 H/ D8 q, i
- 33 }
, C$ k& T! B' V, K; F! _ - 34
2 D6 K7 t2 V2 n6 f5 K* U0 c/ l - 35 return 0;
* d( F2 o* }/ Z2 Q& k5 ~; D2 U - 36}
复制代码 8 n& q& o: y# x/ n
" o4 Z! d! Q8 v( F: k这个测试程序中 先使用 rcc_clock_setup 函数配置系统时钟为64MHz,然后使用 gpio_mode_setup 函数设置GPIO模式,最后调用 gpio_toggle 对GPIO进行翻转操作。 H. R) C+ Q; M, m8 }; _
3 编译和下载- 1[env:MonkeyPi_STM32_G070RB]
" R! J" q( ^ E# w1 }. q. h - 2platform = ststm32+ \4 k) x+ Z1 P' ~) Y# P1 Z
- 3board = MonkeyPi_STM32_G070RB
6 ~# `# ~! K! i }3 e3 b Q1 r# Y - 4framework = libopencm3
2 i- M' y% \- }' \7 s3 U - 53 P$ W" E1 ]3 y6 S! P4 o
- 6upload_protocol=cmsis-dap: H+ E, o ?: e; Q, A6 ~3 d
- 7debug_tool=cmsis-dap
复制代码
|6 K& e# C2 x E$ Z) E
; G" p# X( ^( s! }# t
! A2 H9 R; X; ^+ {2 O1 K
转载自:MakerInChina.cn
9 I8 S8 x+ u( ~3 c- _& t0 D! L! b+ }6 c9 L7 V! A' Z s
2 [9 j3 p8 e+ w. L- T1 ~
7 _9 R2 R- M) b& k |