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

STM32G0-Platformio平台下使用libopencm3库

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用Platformio平台的libopencm3开发框架来开发STM32G0,开发环境为VSCode+PIO插件,这里以开发STM32G070RB芯片为例介绍。

$ y- h( {0 @7 }8 O
1 自定义开发板
由于使用的STM32G070RB在pio的libopencm3框架中没有这个型号,因此首先需要先定义一个自定义开发板型号;
  • 安装ST-STM32 platforms- C& ~- j( e. w% g
    在Platformio的platforms中搜索STM32,然后安装ST-STM32 platforms框架,
  • 根据已有的相似型号进行更改配置json文件
    5 w6 B+ L2 `- z在PIO安装目录找到对应平台开发板文件夹,比如我这里pio安装在默认的用户目录,则STM32开发板的路径如下:

    1 {7 t+ Z) J. ]% I4 p( x5 ^
  1. C:\Users\userName\.platformio\platforms\ststm32\boards
复制代码
7 N4 K3 g8 \* ]9 x+ `% g4 |# {5 G* \
/ ~" f$ W; v* D( o1 I/ Y8 V1 E) D/ b
复制一个相近的板子型号的json配置文件命名为 MonkeyPi_STM32_G070RB.json,更改mcu型号、svd等信息;这里复制修改 nucleo_g071rb 这个json文件,修改后如下:
  1. 1{2 f; V: ]9 g( Y' W
  2. 2  "build": {
    0 ?6 [/ ]7 i8 T' f/ W
  3. 3    "core": "stm32",0 A/ }  [  Y1 n6 h' ^) ~& O
  4. 4    "cpu": "cortex-m0plus",6 ]. E0 d6 ?( v" _# t8 \- o0 \
  5. 5    "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
    2 z' m& J3 \6 c/ u: E8 `4 d
  6. 6    "f_cpu": "64000000L",+ M' c3 o, d1 F; U2 p$ k
  7. 7    "framework_extra_flags": {$ P+ K8 V% I3 i( m
  8. 8      "arduino": "-D__CORTEX_SC=0"
    ! j, \) Q+ S8 P. p/ l- D# o9 N" L0 k
  9. 9    },
    . G6 a" j+ }  ~; g
  10. 10    "mcu": "stm32g070rbt6",
    1 G3 r! N" n; @# d: Q8 J1 \$ V
  11. 11    "product_line": "STM32G070xx",
    $ o' v" Q7 v, l
  12. 12    "variant": "STM32G0xx/G070RBT") |5 \; u, G6 m) E
  13. 13  },
    5 R. u5 }3 w0 _2 J+ B
  14. 14  "debug": {
    6 ?% m3 _  p* e1 K, Q0 k
  15. 15    "default_tools": [+ k9 ^. Q9 _3 z* `1 j# v
  16. 16      "stlink"9 [$ z8 Q9 Q: i3 A' [: b
  17. 17    ],
    $ V1 `' Y2 X- `5 k3 d
  18. 18    "jlink_device": "STM32G070RB",
    / d0 t; M2 ]7 Y8 n- U
  19. 19    "onboard_tools": [, `8 J% L+ ]8 }5 ?8 ?) l; K: a1 B
  20. 20      "stlink"
    3 B. t5 z5 b2 `% c& L
  21. 21    ],  `9 v; y# {& _3 u- f# c: z/ R
  22. 22    "openocd_target": "stm32g0x",  s$ j4 p( x3 y
  23. 23    "svd_path": "STM32G070.svd"
    0 }! O- `% F/ d" Q5 R
  24. 24  },
    $ M3 ?# ]# H0 ]# J, [- w
  25. 25  "frameworks": [
    3 [& a8 i( z4 n
  26. 26    "arduino",
    2 L0 q* t1 F; @/ S& l; v% q0 U! }
  27. 27    "cmsis",
    5 K! K8 b; W8 v1 O! z$ x0 h( Q4 x
  28. 28    "libopencm3",
    * w1 b! r- L/ m" V' q; f" o8 r0 W
  29. 29    "stm32cube",
    2 x; m9 ^+ J* b
  30. 30    "zephyr". N) X" B+ o4 g0 f/ O
  31. 31  ]," Z0 [6 C9 o1 U3 J% T
  32. 32  "name": "MonkeyPi_STM32_G070RB",
    1 {* d) B7 k# W: v
  33. 33  "upload": {1 a* g7 r! |) x
  34. 34    "maximum_ram_size": 36864,
    & z  }7 g& Y' n: J6 j3 x+ c  b8 c1 j) t
  35. 35    "maximum_size": 131072,$ I; U* i* b, f
  36. 36    "protocol": "stlink",
    ( D6 Q" D$ v2 ~
  37. 37    "protocols": [
    / H& c+ O; @# {! p# u7 |% j
  38. 38      "stlink",# r6 @  {4 V# }* G3 O$ W
  39. 39      "jlink",( \7 g) x4 v6 I* Y5 I8 n0 j& [
  40. 40      "cmsis-dap",: ]% n- `4 [! Z/ `! X# L) O
  41. 41      "blackmagic",& N+ ]; z, P2 ?1 B
  42. 42      "mbed"
    7 T; O% }. l; E% P; o: z; C; l
  43. 43    ]
    % h% R! l; D. S, S2 x' J& Q6 e, ]
  44. 44  },# C" J: I, ^. I$ U# w
  45. 45  "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",* q. J6 T; a% O
  46. 46  "vendor": "ST"
      M! V( ?' I, H8 J, {8 B, K
  47. 47}
复制代码

1 H0 q1 o6 N" t+ c
2 新建测试项目
  • 新建项目,并选择开发板型号为自定义板子名称 MonkeyPi_STM32_G070RB,开发框架选择libopencm3
    : C" L( K1 {! y3 u7 e
+ b/ y4 [7 Q3 M2 p  A: \
! D- l; @+ F0 x9 j/ k% F. g
微信图片_20230222214924.png
, R6 T2 d: ~5 ?
$ }: S! Q& B# c, X* s
0 ]0 g( f; F$ `7 j6 V# d  x# v
  • 在项目目录 src下新建主程序文件 main.c ,内容如下:

    ) V4 P% m# o+ n: s7 x" ]
  1. 1/**+ w: n; I- O3 A7 Y
  2. 2 * @file main.c
    / u# b4 I9 X$ R2 w# v( X3 U
  3. 3 * @author MakerInChina (makerinchina.cn)5 I. K; `2 H% G6 e# j; F
  4. 4 * @brief ' d$ w( _3 u+ K* u. p" v
  5. 5 * @version 0.01' Z1 B6 j7 q! d# B  T: T. s
  6. 6 * @date 2022-09-04, ^( E% h$ g( F9 X# L" L
  7. 7 * 9 q/ E+ T2 j- q7 t
  8. 8 * @copyright Copyright (c) 2022
    5 @, b. f! i7 `3 V3 o
  9. 9 * ; L4 d! U* N. L" ]4 ^( _) h
  10. 10 */
    . G" X& c. F1 d/ Z3 ~4 C  W
  11. 11
    ! J6 |" {% e+ u' i* \
  12. 12#include <libopencm3/stm32/rcc.h>
    1 O) b- X9 O- b" ]/ x& ]4 L( }
  13. 13#include <libopencm3/stm32/gpio.h>/ u3 Y0 G, L* f
  14. 14
    3 Z) Q; Y$ i& \  E! i' h
  15. 15int main(void)
    1 _. s$ U7 l: v1 V9 s
  16. 16{
    3 y6 e  d9 b( ]
  17. 17
    . C( T+ Y' `, J; R. a+ O. E$ W1 F
  18. 18    //system clock$ B# G1 B( A. W; a9 j+ Y
  19. 19    rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
    3 q4 F* P0 l, f$ D' _
  20. 20  s* {- B& w: b$ {
  21. 21    //gpio setting7 C. H. ^- o+ b" L
  22. 22    rcc_periph_clock_enable(RCC_GPIOC);
    3 ?) s; l8 h$ r8 x& V3 f+ ^
  23. 23    gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);' a8 P$ N; ~6 u2 a8 P. b  ~4 c
  24. 24
    , R0 ~/ r6 h1 \+ f- E% G& G
  25. 25    while (1)
    , X! f$ }7 O# j% W
  26. 26    {
    8 d9 c* n0 j" V( l3 A$ g  o
  27. 27        //toggle gpio+ w! M# h% P6 q0 @4 G
  28. 28        gpio_toggle(GPIOC,GPIO12);% ~% j6 {( x  N- U( G+ Z
  29. 29% i, D$ _; W. Z! ]" I* ^
  30. 30        for(int i=0; i<4000000; i++){) r8 C2 l& ], E
  31. 31            __asm__("nop;");
    # i2 R- G+ r& p0 S" v
  32. 32        }' J0 M, y% O$ m1 f+ R: X5 z% n
  33. 33    }
    ! T  `* d) R; {1 h, e0 V) Y# K
  34. 347 m5 n! S, @" e5 n/ f* o
  35. 35    return 0;2 Z5 p; ]8 s1 J
  36. 36}
复制代码
3 H' l1 p) \8 {! W

! m' R/ \; D- ~( h
这个测试程序中 先使用 rcc_clock_setup 函数配置系统时钟为64MHz,然后使用 gpio_mode_setup 函数设置GPIO模式,最后调用 gpio_toggle 对GPIO进行翻转操作。
: I! K0 \: s, O9 j% C/ r- l" f
3 编译和下载
  • 下载方式需要根据自己的硬件进行修改,在项目的platformio.ini文件中可以配置,这里使用DAPLink SWD方式下载,因此将upload_protocol更改为cmsis-dap,则platformio.ini文件如下:
    6 \) v+ x$ x/ C. s; j, D, Z# @. J
  1. 1[env:MonkeyPi_STM32_G070RB]8 p) H& Z5 b2 s  S
  2. 2platform = ststm328 w1 c/ B7 O  J0 E4 E& @
  3. 3board = MonkeyPi_STM32_G070RB
    ( E7 ]0 h2 K7 j& F+ W* A
  4. 4framework = libopencm3
    & t: R! U( s9 p5 T: T4 L
  5. 5$ W$ T* R& S! w  T
  6. 6upload_protocol=cmsis-dap
    ( E9 z$ Q+ M, ?+ U
  7. 7debug_tool=cmsis-dap
复制代码
4 r3 x$ b2 `% j$ U& V4 [
% m8 a& x$ z1 u3 V
  • 然后就可以进行烧录和调试了(使用openocd方式进行下载和调试):

    : N5 e% d! x2 W) Z9 C5 Z1 {
微信图片_20230222214916.png
' O& |( \; r5 ?; b转载自:MakerInChina.cn0 }" y+ L! @7 R3 O
. G4 x' B5 g. I" s- K# X

  q2 M% O) \1 {# r
7 e* j" Z* V; v2 l% U& e/ c; O: H
收藏 评论0 发布时间:2023-2-23 21:00

举报

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