你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G0-Platformio平台下使用libopencm3库

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用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
  1. 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{
    1 v' B! F" x3 D  @7 Z
  2. 2  "build": {: @+ _6 S( l" K6 R7 k2 U7 g
  3. 3    "core": "stm32",1 V6 F6 E0 a' L; X
  4. 4    "cpu": "cortex-m0plus",
    ; A1 G$ |3 @' y. j
  5. 5    "extra_flags": "-DSTM32G0xx -DSTM32G070xx",0 H" O. q2 J% ~/ V2 f: x$ J
  6. 6    "f_cpu": "64000000L",
    5 U9 f5 S( _$ ]2 C+ E
  7. 7    "framework_extra_flags": {6 G" r/ L% m- z" T& `
  8. 8      "arduino": "-D__CORTEX_SC=0"# h6 B7 m6 o5 Z& Y2 b' U, y
  9. 9    },: e3 f8 \" }% X& Q, e5 F2 G: ^9 @' P9 o
  10. 10    "mcu": "stm32g070rbt6",1 [" |1 \# _* T" F0 M( c
  11. 11    "product_line": "STM32G070xx",: F& Q7 V8 a% ~" t+ @; _
  12. 12    "variant": "STM32G0xx/G070RBT"
    3 N$ z! Y5 O  ^
  13. 13  },3 j- f% j+ e: N. d9 j  Y3 h4 i
  14. 14  "debug": {: P. c- V5 U) h, R7 N1 p* C5 c8 l
  15. 15    "default_tools": [6 f! z3 }& I5 f3 L# g
  16. 16      "stlink"3 @' J% b+ v3 ?7 }* O' d6 H& d
  17. 17    ],
    5 \4 w- x- P2 n5 R$ u, g% @) Z: W
  18. 18    "jlink_device": "STM32G070RB",% F$ Z4 T# ?/ W' Y; l9 f: f
  19. 19    "onboard_tools": [. S, X. t' ^' x% |) P: Z6 w
  20. 20      "stlink"
    0 g6 H7 r! a/ V# L& b4 Q# Z0 `* Y2 P- I
  21. 21    ],. R% O  Q9 Y/ F2 V
  22. 22    "openocd_target": "stm32g0x",7 g5 A1 b/ l5 P/ Y4 I/ ?
  23. 23    "svd_path": "STM32G070.svd"! C' _4 @; v5 q0 a
  24. 24  },1 O; L- k8 \6 ^4 c, G3 J0 f+ O  S/ I
  25. 25  "frameworks": [
    ( L: p6 L6 e, ~+ d& z
  26. 26    "arduino",3 [- u( N6 I2 I6 d3 `0 U1 h
  27. 27    "cmsis",
    ; }$ b" Z' ~& n6 }+ g
  28. 28    "libopencm3",; h( p" j# c3 d' _
  29. 29    "stm32cube",
    8 _% x% V  I" l5 `7 V
  30. 30    "zephyr"! ]7 a3 x" ]: y& e3 n& m
  31. 31  ],+ J7 ^+ N  n; ]7 X* P
  32. 32  "name": "MonkeyPi_STM32_G070RB",4 B1 v# C& \! ~. {' x6 I
  33. 33  "upload": {
    2 |3 I6 Y4 B9 I/ \
  34. 34    "maximum_ram_size": 36864,
    2 R3 {& N* l# z" @3 d% j* n
  35. 35    "maximum_size": 131072,& M( h1 R7 G. {* r
  36. 36    "protocol": "stlink",
    ) r# `$ c" n, r
  37. 37    "protocols": [2 G$ F+ q  t1 J8 V5 f
  38. 38      "stlink",: j) E9 e- R( \. p
  39. 39      "jlink",8 H) D# y' ?6 Q- a/ r! z- s
  40. 40      "cmsis-dap",
    " T" c7 ], g% E3 C- N) P
  41. 41      "blackmagic",
    0 p9 c8 {2 c/ s; k. d7 \0 T
  42. 42      "mbed"2 P& U7 A: j0 g* S& ?$ |& `. u) V7 s
  43. 43    ]  g( ?, S% g; t2 R3 U7 q7 [
  44. 44  },
    1 p2 D4 Y1 O+ L3 B+ ~+ [. j+ w3 w
  45. 45  "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",; H; o: E9 m- ~! }% O
  46. 46  "vendor": "ST"
    ( z% V1 v% d2 U
  47. 47}
复制代码
: X7 x$ h1 ^$ P. A! }* F
2 新建测试项目
  • 新建项目,并选择开发板型号为自定义板子名称 MonkeyPi_STM32_G070RB,开发框架选择libopencm3

    ' s' o# D2 W$ @4 A  a4 Y# A- \
- D- A, E# y; |- F& o; w

; v2 j8 v3 M( w* M0 A( d 微信图片_20230222214924.png
# v: f5 S7 G4 z( v) F: q: I
" |) ~' ?. I. f- w" ]! i& t
; k  s& ~* T: i- d# B* v( T
  • 在项目目录 src下新建主程序文件 main.c ,内容如下:

    - P4 M; [* G6 k2 c$ b
  1. 1/**1 _5 |: ?4 [5 N7 D! C( L% E& q
  2. 2 * @file main.c
    8 K2 ^( c) O$ g4 f( s
  3. 3 * @author MakerInChina (makerinchina.cn)
    4 B5 o/ A# y  ~6 u- _4 j
  4. 4 * @brief
    % k: }, n- [+ b2 A0 N! i
  5. 5 * @version 0.01/ j0 Z! Y, Q. p0 t3 |9 n
  6. 6 * @date 2022-09-04( ~( D8 n5 s8 b" h. P- h
  7. 7 * / j+ J) U8 p8 h9 Q' Q) S# H7 f4 @6 V0 {
  8. 8 * @copyright Copyright (c) 2022% Y; T6 P) b/ S' @) g
  9. 9 *
      S. ]' G, _$ E4 v$ n
  10. 10 */1 p9 B8 H5 @( D
  11. 11
    ) `  X9 f: [& B8 r" i3 {
  12. 12#include <libopencm3/stm32/rcc.h>8 B  u& f( k" m
  13. 13#include <libopencm3/stm32/gpio.h>; H! z( \: j. t9 ?9 L% j3 ^( @+ x$ Y' J
  14. 14
    * J$ F5 k3 d9 v& B/ ~
  15. 15int main(void)9 s8 K& P8 S7 b4 }0 |1 Q
  16. 16{. G' G! V" z  J* ]+ x( u* [
  17. 17$ W/ [$ r; j  I" q# L2 O
  18. 18    //system clock
    - ?/ T0 ~3 q' T4 l. b
  19. 19    rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
    2 v# t, x$ C- a  p3 a! W* |
  20. 20+ i$ o: p' \! I4 v  }( R9 I$ ~# {- K9 }
  21. 21    //gpio setting
    $ f7 z+ D' e: q& T. U5 {4 ^" q& S* {
  22. 22    rcc_periph_clock_enable(RCC_GPIOC);3 e0 l1 o: G6 ?9 @  g  V
  23. 23    gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);2 `+ N$ R/ G! ^$ j: _
  24. 24+ m4 d$ a5 N( V$ d
  25. 25    while (1)! U2 w7 j8 Q  a/ Q: r5 p
  26. 26    {
    1 {6 M% U) x  ]! G8 i
  27. 27        //toggle gpio
    + v! @$ z! z. ~, S- u" s6 N
  28. 28        gpio_toggle(GPIOC,GPIO12);
    0 m  _2 k% ~  n% v* [2 L0 K* W
  29. 29' B; l9 ^* F2 N! t' `, e3 H
  30. 30        for(int i=0; i<4000000; i++){+ L* W0 E" ^$ R3 B0 @
  31. 31            __asm__("nop;");& y7 p* L' C* E
  32. 32        }
    9 r* f' h/ U) v% F/ t
  33. 33    }- d) O/ {  G' }* M$ L; G3 H8 M
  34. 34
    ' V7 h9 u9 U( g1 b# ]
  35. 35    return 0;
    8 N. L: P; x' N  C( @$ k9 o
  36. 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 编译和下载
  • 下载方式需要根据自己的硬件进行修改,在项目的platformio.ini文件中可以配置,这里使用DAPLink SWD方式下载,因此将upload_protocol更改为cmsis-dap,则platformio.ini文件如下:
      f; R9 G, E; C; V! B
  1. 1[env:MonkeyPi_STM32_G070RB]- t7 t/ R: a- [$ y
  2. 2platform = ststm32* n5 i1 [8 V; _. Z
  3. 3board = MonkeyPi_STM32_G070RB
    3 b7 V, W1 R1 [* x  G5 f+ C
  4. 4framework = libopencm3
    ( Z; h; Z* l( W5 q# F5 n
  5. 5* p3 e7 R; N" D4 j4 n, o) n1 ]
  6. 6upload_protocol=cmsis-dap
    5 }8 C% j/ F. _+ l, J3 M
  7. 7debug_tool=cmsis-dap
复制代码
+ l9 w4 {6 S; N6 w) w2 H$ H
! Q3 m* l1 l: T0 e+ H! D
  • 然后就可以进行烧录和调试了(使用openocd方式进行下载和调试):
    ; L" @) v, _" U8 U0 V( @
微信图片_20230222214916.png / 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
收藏 评论0 发布时间:2023-2-23 21:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版