|
使用Platformio平台的libopencm3开发框架来开发STM32G0,开发环境为VSCode+PIO插件,这里以开发STM32G070RB芯片为例介绍。 8 P1 W# m i! g9 Y, z! ]
1 自定义开发板由于使用的STM32G070RB在pio的libopencm3框架中没有这个型号,因此首先需要先定义一个自定义开发板型号; - C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码
2 {# X& d& C$ N9 M$ J4 A/ H% w) F6 X
复制一个相近的板子型号的json配置文件命名为 MonkeyPi_STM32_G070RB.json,更改mcu型号、svd等信息;这里复制修改 nucleo_g071rb 这个json文件,修改后如下: - 1{
+ [; j) q$ [4 w, l - 2 "build": {8 x7 t8 c" k, X8 h) c5 d; G
- 3 "core": "stm32",6 V0 a# ?( H: t0 g9 c4 {
- 4 "cpu": "cortex-m0plus",
( r" M. c/ C" x1 m6 [ q3 \. m" m - 5 "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
9 i, t, S9 m% v% w I( O2 N" j$ e - 6 "f_cpu": "64000000L",0 V5 Y6 K+ R: X7 ?
- 7 "framework_extra_flags": {" _5 f: N8 e# K1 {5 l
- 8 "arduino": "-D__CORTEX_SC=0"
$ A/ r* V* z) t( J6 [" e - 9 }," T; F. Z6 M- k
- 10 "mcu": "stm32g070rbt6",2 N4 W8 ]" Q5 w& C4 f0 ^) a# L
- 11 "product_line": "STM32G070xx",
4 u% _: D6 F* j - 12 "variant": "STM32G0xx/G070RBT"2 R4 M* A! `7 ?/ c. N; m( w+ o2 ^% G
- 13 },9 b. ~8 w7 r5 i6 B& w
- 14 "debug": {
- b4 w8 [) L. \, v - 15 "default_tools": [' J7 r5 ~9 h4 P0 l8 G
- 16 "stlink". ?/ x8 C6 U" Z5 A
- 17 ],% Q- i4 P, j( F2 n4 l
- 18 "jlink_device": "STM32G070RB",
3 @1 N. Q0 y. ?4 g+ V R: l+ I - 19 "onboard_tools": [
: P' ` M1 Z- a* g, _4 b F - 20 "stlink"
! R* b, [" x3 e! f7 Q, J- }2 @7 k. i - 21 ],: [; H6 h8 I x. p# @8 n
- 22 "openocd_target": "stm32g0x",4 e/ R' x* z3 W/ P& D, ^+ a8 J7 H6 |
- 23 "svd_path": "STM32G070.svd"7 a2 g2 f3 d- c( K! r" L b- q
- 24 },
3 I7 u$ P# S% K4 B4 N) O - 25 "frameworks": [1 G% q8 U& t9 Q" r: V
- 26 "arduino",
4 g2 d+ J$ P! \& ~9 `) K - 27 "cmsis",9 Y' {# o, W' H+ b1 {
- 28 "libopencm3",
; K0 [5 I- @. X$ v2 c5 B2 c& h# w6 @ - 29 "stm32cube",
3 T2 Z8 b% K: q4 x X, I - 30 "zephyr"% l1 s2 ?4 C; s# W9 L! C
- 31 ],7 J. v1 ?$ A3 @
- 32 "name": "MonkeyPi_STM32_G070RB",4 x( h M' m# s8 u8 ?5 l
- 33 "upload": {, a8 J/ V- k# x# {5 r2 Y
- 34 "maximum_ram_size": 36864,# Z' h2 _9 E! X, j; g: x/ ~: [
- 35 "maximum_size": 131072,+ Q- V; b/ i3 b
- 36 "protocol": "stlink",( j- z$ E7 ^3 s) L9 `& {
- 37 "protocols": [, c; o6 j+ S- \7 ]' d. e
- 38 "stlink",
$ n) f5 a0 W5 ^ - 39 "jlink",1 a7 A9 X7 \" f; ] @
- 40 "cmsis-dap",
6 z8 I! v6 U- E$ I7 f6 b, r9 G - 41 "blackmagic",' u3 y& J8 f, M6 P% n* ]! J; a* A
- 42 "mbed"8 o! g$ E! @: [. s& [- ~
- 43 ]" T+ C% ~. f* o0 _; P6 h
- 44 },
- O1 w, x$ X" U/ Q) t" H- W - 45 "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",
# c- k2 K" q' c6 R - 46 "vendor": "ST"
4 B8 P1 R* V2 N/ `# Y- U( w' ? - 47}
复制代码 - |) L4 Q& D. w& ]; b) X5 _5 Q3 o$ B
2 新建测试项目
~' Q. G! j% r
+ d9 g* Y! K; e8 W
7 H3 p$ `5 b' F( s
/ \8 V( E! a" @4 h' q7 I; M
+ b* |1 S/ a5 `! M# a: w- 1/**
3 T: `0 H2 p9 L4 j: N# R, ?' e - 2 * @file main.c
9 i( b* [# X3 q0 b6 }7 V - 3 * @author MakerInChina (makerinchina.cn)
* w9 T- w: I* \9 U - 4 * @brief
. r* R2 p( O0 s - 5 * @version 0.01
# |, E" S5 t' H$ \) b( e( u# P - 6 * @date 2022-09-04 D9 v( M1 p4 B k
- 7 *
( W) `, ~7 B" b g* v - 8 * @copyright Copyright (c) 2022
/ A$ d5 Z% [, Z8 ?( [0 @( S) h - 9 *
2 f/ d3 i O5 [+ x% t# B - 10 */- f% p* Y' a' N
- 11
" E6 T& X0 T; l+ b - 12#include <libopencm3/stm32/rcc.h>
' k2 K! x+ ]8 `$ R - 13#include <libopencm3/stm32/gpio.h>
2 g; l% J! y7 q8 D0 A: e - 14
( v6 D2 Q% ^. x - 15int main(void)
7 _, i5 V. x( D& Z) U- r - 16{
. t5 L4 G8 x0 l5 E1 d6 M. m - 17
6 l+ D7 v. _# o4 Z+ i6 Y' J. q - 18 //system clock
5 `- N% P2 `6 S - 19 rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);6 h! e8 t, |8 j: b# B
- 20
* f6 H' |5 S& r( m2 I# T - 21 //gpio setting
. _' p6 X$ d- f6 Y& i- f - 22 rcc_periph_clock_enable(RCC_GPIOC);7 l2 f: K6 A" X8 O' ~$ E/ E$ H) l
- 23 gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);
$ D# z0 x4 @6 r* U- R - 24
9 P$ x/ N l1 D' b' l; r - 25 while (1)1 C1 v( s0 R/ E& F$ c
- 26 {) ?, A. `: u- S- w6 \: S
- 27 //toggle gpio& [, G _; B+ D4 N4 E+ ?$ r
- 28 gpio_toggle(GPIOC,GPIO12);! Y F+ g3 I6 H$ r3 ]& l
- 29; z0 y F$ ^1 ~) I
- 30 for(int i=0; i<4000000; i++){: j% a/ u5 O# h; w' D
- 31 __asm__("nop;");* `6 h6 i0 C; I& @5 I
- 32 }
) ~6 [; ]" k* ?4 n0 K1 w0 {* i4 t - 33 }
8 Y7 h8 s& K+ n1 x - 34
+ `8 { S5 B6 B( A: a w - 35 return 0;; P$ f, `/ V2 c
- 36}
复制代码
% _0 @& B) a" o7 o3 P' C7 N4 a: u2 \/ @6 J3 Q. ], t" @
这个测试程序中 先使用 rcc_clock_setup 函数配置系统时钟为64MHz,然后使用 gpio_mode_setup 函数设置GPIO模式,最后调用 gpio_toggle 对GPIO进行翻转操作。 . N6 x. y% X. V! |% o
3 编译和下载- 1[env:MonkeyPi_STM32_G070RB]
/ ~) W; o' ]% W, J( T; K1 L" j3 @2 ~1 q! E - 2platform = ststm32
4 o. i+ `+ G7 q% m& q d9 E - 3board = MonkeyPi_STM32_G070RB
9 r/ ]9 ~+ B+ g7 `& k8 J' F - 4framework = libopencm38 ^) ]8 T& W: {$ d
- 5, N/ |9 g% A3 i" y% l# x
- 6upload_protocol=cmsis-dap) @5 f# v( Z4 `, Z
- 7debug_tool=cmsis-dap
复制代码 7 p9 h4 H! F. a8 g1 m
1 s* \6 q$ |; a+ s/ x; j# e
+ H/ `6 P0 D3 w; U4 ], d1 X
转载自:MakerInChina.cn: t3 L, L7 p! o6 d
7 b. |+ F& V- D0 v+ ~! y7 v
5 W2 k" T z3 s' }9 {8 E. G
# y( e5 M$ ^, Z1 Q, W |