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

STM32G0-Platformio平台下使用libopencm3库

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用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: \
  1. 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. 1{
      l5 s- L) P8 o  r$ _7 b# ]( b
  2. 2  "build": {) o. l/ \6 C2 g# e* y, _# q+ C
  3. 3    "core": "stm32",/ s+ D  i: q- f# y1 r
  4. 4    "cpu": "cortex-m0plus",+ x7 s0 u3 Z* I0 O- K
  5. 5    "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
    9 {7 {5 \" S/ W% [" h
  6. 6    "f_cpu": "64000000L",4 E1 O% v# A. Q
  7. 7    "framework_extra_flags": {
    , F# w0 m$ ]9 b/ B( B% P; M
  8. 8      "arduino": "-D__CORTEX_SC=0"
    1 j: R% c+ h- w& L7 e7 O4 H
  9. 9    },
    / B0 P& V3 |' B( n, }
  10. 10    "mcu": "stm32g070rbt6",
    / e  g$ P. q3 b/ b
  11. 11    "product_line": "STM32G070xx",7 w/ v# F# T% |( t& m
  12. 12    "variant": "STM32G0xx/G070RBT"
    0 M, \* M9 P5 P2 k9 S" e3 N& h& \
  13. 13  },8 {6 f1 y( k5 X$ S6 N
  14. 14  "debug": {
    ( |  Y6 p( w; P/ M. f
  15. 15    "default_tools": [
    & t' _) l. A; M
  16. 16      "stlink"
    / c* s4 u6 f1 ?* z" o7 x: a
  17. 17    ],/ G7 k$ I$ J' Y4 ]
  18. 18    "jlink_device": "STM32G070RB",+ B9 P. [% x" l( N7 r
  19. 19    "onboard_tools": [$ i. h. @" Q- r& s
  20. 20      "stlink"" y6 b3 A. d. l5 [5 R9 T. D
  21. 21    ],( d' }, |9 S& Y' ?9 C0 D3 h
  22. 22    "openocd_target": "stm32g0x",$ @( ^9 |' C: S3 x- k. Q
  23. 23    "svd_path": "STM32G070.svd"
    3 G& F- \4 d1 \; t+ W* @
  24. 24  },& q- c1 U! S* }/ J9 n
  25. 25  "frameworks": [
    + n8 K1 i1 Y# h, h. P: L7 y2 e- e
  26. 26    "arduino",* Q6 F+ B* b! g9 ^- S4 \5 K9 [
  27. 27    "cmsis",
    2 g6 B* b  i0 @) e+ f% j
  28. 28    "libopencm3",4 G. i) X  J5 o8 M. l
  29. 29    "stm32cube",
      v6 [. D+ _( x8 I6 G
  30. 30    "zephyr"
    & j7 {. K8 `% m2 Z( m) X  S
  31. 31  ],8 L+ q  E, z& o8 g5 _- Z
  32. 32  "name": "MonkeyPi_STM32_G070RB",
    $ a+ m' X! G. H3 C
  33. 33  "upload": {
    & l+ N8 ^" v. h/ E- Y! D: {9 L
  34. 34    "maximum_ram_size": 36864,  y+ e+ j9 K- R# ^1 d
  35. 35    "maximum_size": 131072,
    : R0 e8 F7 p& l1 H
  36. 36    "protocol": "stlink",2 D# ^: ?' \6 z: Q6 Z/ g
  37. 37    "protocols": [' i) _% a, v1 I4 [: a* v7 w/ i7 ^' e% `
  38. 38      "stlink",+ A3 q. A: `* L
  39. 39      "jlink",
    9 r3 }1 k  E$ ]6 P, e
  40. 40      "cmsis-dap",
    & o' y" }4 ?; S  ]  y+ ?4 J' ?
  41. 41      "blackmagic",
    # S. z2 V2 U0 o: @1 ]
  42. 42      "mbed"/ G. E/ C* [( X: S& i7 ?
  43. 43    ]3 Y/ |, Q1 I$ U& M* G" R
  44. 44  },9 X" D+ u  u3 ^& T# P! c) n
  45. 45  "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",
    & C6 B0 n8 ]8 d+ }
  46. 46  "vendor": "ST"4 X8 B6 q! a7 ~3 h% u2 ~' ?
  47. 47}
复制代码

+ s0 `2 R: C1 l: V
2 新建测试项目
  • 新建项目,并选择开发板型号为自定义板子名称 MonkeyPi_STM32_G070RB,开发框架选择libopencm3

    + q! T0 r4 k- U3 i/ K6 o  k! ?" C
) M5 k. e: T+ \

8 l/ [, L% a: m) m, _* z) Y) ] 微信图片_20230222214924.png
4 {8 t8 _+ f/ h1 S5 N4 A% U; Z+ R2 O! C) ]+ o+ q

2 c: R( `! s7 A$ Q- _
  • 在项目目录 src下新建主程序文件 main.c ,内容如下:
    - O1 n1 {1 r, o8 ]' E) K9 ~. h
  1. 1/**6 X# V, e! Z0 z2 X/ h# u
  2. 2 * @file main.c# b" Z. Y, P$ P) K
  3. 3 * @author MakerInChina (makerinchina.cn)( W+ i; u* m5 \3 y' s
  4. 4 * @brief
    ) O) F1 |' X% V) I' p1 w6 C7 Y
  5. 5 * @version 0.01% T, S: I: D4 w; R* C4 O
  6. 6 * @date 2022-09-04
    * K2 a& f- H/ M8 r3 C/ B
  7. 7 *
    3 g% j5 O" J3 y* @: P
  8. 8 * @copyright Copyright (c) 2022
    $ U& b4 r& u" C- e" U- Q
  9. 9 *
    , r1 l2 v6 u) j1 ^
  10. 10 */% \* v8 Y3 `7 K! |9 x) X
  11. 11
    , a' S7 j# s; O, w( `4 M; e! S
  12. 12#include <libopencm3/stm32/rcc.h>
    4 Q1 _# I; m' I: @. y
  13. 13#include <libopencm3/stm32/gpio.h>
    - _- g0 y. Y4 G$ j9 G* w! e
  14. 141 y* i: G4 r  P+ v- w
  15. 15int main(void)* L" C5 o4 K6 O5 s8 d
  16. 16{0 p; ?( ~( E$ f
  17. 178 d3 D# S, x& d1 [
  18. 18    //system clock
    % H* t6 C" d  y: b) q
  19. 19    rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);( p0 G& q& R& d$ L- t
  20. 20: k7 f  ^9 S) U0 U8 P
  21. 21    //gpio setting! I1 P) v# _' D4 U  Y# l' I
  22. 22    rcc_periph_clock_enable(RCC_GPIOC);
    . S& [; N2 i6 n- k2 p
  23. 23    gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);  K6 H# [# A( u2 }1 q
  24. 24
      \( ~: g" N/ B  V5 M: d4 {' u
  25. 25    while (1)
    2 h+ I9 U& s3 t) |( `
  26. 26    {2 B: e) a* m7 `# J( j
  27. 27        //toggle gpio
    ! n, N/ t$ N+ k& r
  28. 28        gpio_toggle(GPIOC,GPIO12);
    : i$ n8 \. I  ~$ Q+ x$ e
  29. 29
    ! b+ j' ?2 o8 u; l# \
  30. 30        for(int i=0; i<4000000; i++){/ D9 t4 _0 ~# |0 c$ ?
  31. 31            __asm__("nop;");* E( S% d8 a8 o; H6 m4 E
  32. 32        }
    8 q7 w/ s) m* p# Y; A# T9 v; a
  33. 33    }
    + R" p  q+ F4 R, B8 R
  34. 34
    / p. E$ ]3 x! A4 ~1 V
  35. 35    return 0;
    $ f0 O( D: ^! j( Q' W# y
  36. 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 编译和下载
  • 下载方式需要根据自己的硬件进行修改,在项目的platformio.ini文件中可以配置,这里使用DAPLink SWD方式下载,因此将upload_protocol更改为cmsis-dap,则platformio.ini文件如下:
    , S8 b2 A0 Q* O, a8 C+ `5 W2 L
  1. 1[env:MonkeyPi_STM32_G070RB]% m* f: x& m: M1 C" `3 O
  2. 2platform = ststm324 A) B2 ^  a. D4 _0 i" j  `5 w( V9 X
  3. 3board = MonkeyPi_STM32_G070RB
    4 k0 p  ]" ~3 `- \8 ~
  4. 4framework = libopencm3# r5 i, g0 _8 ~9 v
  5. 5
    & J, z2 T, s1 a, a
  6. 6upload_protocol=cmsis-dap( H$ \( Y# T! z' s& X
  7. 7debug_tool=cmsis-dap
复制代码
1 b" N" Q* x* [: u

' c6 x$ m* r5 T: K# O0 V4 k- ^
  • 然后就可以进行烧录和调试了(使用openocd方式进行下载和调试):

    , a8 ^  U1 f; i
微信图片_20230222214916.png 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
收藏 评论0 发布时间:2023-2-23 21:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版