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

STM32G0-Platformio平台下使用libopencm3库

[复制链接]
STMCU小助手 发布时间:2023-2-23 21:00
使用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
  1. 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. 1{! j4 C/ k3 e  \1 e& v; e
  2. 2  "build": {% }$ _7 d' l8 Y9 T8 p
  3. 3    "core": "stm32",
      N, X1 a3 v4 K% p, ^3 l
  4. 4    "cpu": "cortex-m0plus",) L; H' U. @% P) U, ~5 \1 _/ C
  5. 5    "extra_flags": "-DSTM32G0xx -DSTM32G070xx",
    ! [' n2 d$ [6 O4 |- V
  6. 6    "f_cpu": "64000000L",' }" z- s( ^/ o6 R6 I
  7. 7    "framework_extra_flags": {
    $ u, J5 f- I; T
  8. 8      "arduino": "-D__CORTEX_SC=0"7 A8 m6 {9 ]8 @) O6 j) N4 R
  9. 9    },
    - ~6 h5 m2 G" s# ]
  10. 10    "mcu": "stm32g070rbt6",$ `* U' k- c2 i0 B4 q
  11. 11    "product_line": "STM32G070xx",0 F+ K* u3 q7 h1 c2 G2 u/ \
  12. 12    "variant": "STM32G0xx/G070RBT", ~7 ~# D. O7 p+ e
  13. 13  },* |/ m$ P8 V' {4 Q, G
  14. 14  "debug": {* o8 P% V6 }. ]. G# S
  15. 15    "default_tools": [
    $ T* A  {$ ~: o5 k6 d! \
  16. 16      "stlink"
    1 O  b8 n+ i( m# B
  17. 17    ],) `% b8 ~3 F$ D/ F8 ?6 G( h) L
  18. 18    "jlink_device": "STM32G070RB",
    9 p; z: o, T$ f, ]3 e
  19. 19    "onboard_tools": [& R6 n; A) l8 N
  20. 20      "stlink"
    ( f8 t4 m7 A! q) H' B/ B! r
  21. 21    ],  ^9 M2 j; @# B8 ?3 ^
  22. 22    "openocd_target": "stm32g0x",
    / C4 G- }  d5 d- v! Q+ x# B
  23. 23    "svd_path": "STM32G070.svd"3 o: t, p/ Z3 k
  24. 24  },+ B9 x& M" y6 S5 H% d' x$ a' u8 ^
  25. 25  "frameworks": [
    ' w! d# P* ^% y! W
  26. 26    "arduino",$ z! L: P0 f9 T* o; J
  27. 27    "cmsis",
    4 T; i; \4 T! F3 t5 E1 D
  28. 28    "libopencm3",
    / r: K; ^! a9 m
  29. 29    "stm32cube",2 X$ {& f2 n5 L3 `1 Z1 A, @4 w
  30. 30    "zephyr"
    8 t) M! l1 P, G- \' Q! Y* j# K- J
  31. 31  ],) i, w* t# U4 O
  32. 32  "name": "MonkeyPi_STM32_G070RB",
    ( z- A1 e( \& g9 y" N
  33. 33  "upload": {
    ' j# x( l8 D* a  [( m* ^+ ~
  34. 34    "maximum_ram_size": 36864,$ s5 L. }& q* B5 k
  35. 35    "maximum_size": 131072,
    9 g7 G, A. E" i% h
  36. 36    "protocol": "stlink",
    % e  w; p( t4 D- P8 b
  37. 37    "protocols": [7 f- @6 M' ]7 M( N6 }% N& b
  38. 38      "stlink",3 |9 ^7 ?2 I3 T2 R! \4 _3 V  v
  39. 39      "jlink",
    / s( d1 O2 G9 T) i3 x; d
  40. 40      "cmsis-dap",) F/ V& W. z5 q- y
  41. 41      "blackmagic",
    % P7 @( ^! a6 u( p$ c) U2 z
  42. 42      "mbed"
    , Z' J; T  M4 I4 w3 Y+ ^9 D: k9 e+ L
  43. 43    ]* N6 v/ q* z2 a7 z- i2 l; n
  44. 44  },- o: i4 y* m7 l5 z% U0 }) P
  45. 45  "url": "https://www.st.com/zh/microcontrollers-microprocessors/stm32g070rb.html",
    5 H4 e$ {: f! F5 y# `: a
  46. 46  "vendor": "ST"
    % b+ E5 L; q/ M0 n
  47. 47}
复制代码
/ ^) }  f$ u' @! d3 s
2 新建测试项目
  • 新建项目,并选择开发板型号为自定义板子名称 MonkeyPi_STM32_G070RB,开发框架选择libopencm3

    5 Q4 D2 b8 m6 u
8 d' E0 d8 x' u( a
* R! \; p& b- l* P
微信图片_20230222214924.png # a- D/ K* @' t3 y- B3 v1 m1 N
( e" M1 M2 R0 X2 \
4 M& v; `: D6 H: J& o& y) @" b
  • 在项目目录 src下新建主程序文件 main.c ,内容如下:
    3 R) ?( ~+ Q5 \
  1. 1/**
      G! i- t4 Z( S# m. d
  2. 2 * @file main.c. I* z5 [' z: f, w: v
  3. 3 * @author MakerInChina (makerinchina.cn)
    / m% n- a/ w  V7 C, Z
  4. 4 * @brief
    ; O9 P  M, R6 c
  5. 5 * @version 0.017 z" I5 W! G3 X' \
  6. 6 * @date 2022-09-04
    ' H( r; L0 S8 ~: k) D
  7. 7 * ; {2 j6 ?! c) ?& w: h- t
  8. 8 * @copyright Copyright (c) 2022
      L7 E1 _( N& V  `: R# U8 p1 J
  9. 9 *
    % P3 Q2 X9 x3 ?8 C$ l
  10. 10 */3 o" v/ {+ M9 c  i* T$ _
  11. 11
    . [0 o  ~. s5 m
  12. 12#include <libopencm3/stm32/rcc.h>5 K2 p+ x  J+ U' C
  13. 13#include <libopencm3/stm32/gpio.h>6 x2 x3 F6 a, j& I* x- ]2 h( R
  14. 14' b) X2 ]) a8 K; [1 V
  15. 15int main(void); J. I5 u9 R& `% Y
  16. 16{& P* F8 H  X  I# `9 J: G. }; \
  17. 17
    3 G, w) b# f; E' ^1 |( Q& [4 Z; q
  18. 18    //system clock
    8 ^  L  u7 U! V- C$ ~; f
  19. 19    rcc_clock_setup(&rcc_clock_config[RCC_CLOCK_CONFIG_HSI_PLL_64MHZ]);
    % E* l) O3 B8 _" i+ G
  20. 20
    : C- ?- L( N0 Q( L$ W/ v4 O$ q
  21. 21    //gpio setting+ H8 M3 F. M+ Z7 f# m
  22. 22    rcc_periph_clock_enable(RCC_GPIOC);
    ' U* o( d/ Y# V8 E+ z$ Y
  23. 23    gpio_mode_setup(GPIOC,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO12);
    2 [, N/ s/ H8 A! u2 T( x5 w
  24. 24% c) s, n( u3 H5 A* Z7 C
  25. 25    while (1)9 `# I- B3 x' P5 w6 p& |; A
  26. 26    {
    8 {- E: o3 i; m$ M/ s# k% |
  27. 27        //toggle gpio& e$ {$ S1 B2 _3 Q
  28. 28        gpio_toggle(GPIOC,GPIO12);
    4 t- R" T" K" u9 T4 u
  29. 294 [! r. {2 M$ ?4 ~2 e. n3 c
  30. 30        for(int i=0; i<4000000; i++){& x7 N" n$ S6 q9 p  Y6 H3 H
  31. 31            __asm__("nop;");
    2 r& @6 D' D+ C! e  ^$ @
  32. 32        }% }) P  d- e5 H/ D8 q, i
  33. 33    }
    , C$ k& T! B' V, K; F! _
  34. 34
    2 D6 K7 t2 V2 n6 f5 K* U0 c/ l
  35. 35    return 0;
    * d( F2 o* }/ Z2 Q& k5 ~; D2 U
  36. 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 编译和下载
  • 下载方式需要根据自己的硬件进行修改,在项目的platformio.ini文件中可以配置,这里使用DAPLink SWD方式下载,因此将upload_protocol更改为cmsis-dap,则platformio.ini文件如下:

    # i+ f1 `2 @' T/ Q' N' m' G
  1. 1[env:MonkeyPi_STM32_G070RB]
    " R! J" q( ^  E# w1 }. q. h
  2. 2platform = ststm32+ \4 k) x+ Z1 P' ~) Y# P1 Z
  3. 3board = MonkeyPi_STM32_G070RB
    6 ~# `# ~! K! i  }3 e3 b  Q1 r# Y
  4. 4framework = libopencm3
    2 i- M' y% \- }' \7 s3 U
  5. 53 P$ W" E1 ]3 y6 S! P4 o
  6. 6upload_protocol=cmsis-dap: H+ E, o  ?: e; Q, A6 ~3 d
  7. 7debug_tool=cmsis-dap
复制代码

  |6 K& e# C2 x  E$ Z) E
; G" p# X( ^( s! }# t
  • 然后就可以进行烧录和调试了(使用openocd方式进行下载和调试):
    / @2 H5 A9 k* B% v: _: ^$ ^0 U
微信图片_20230222214916.png ! 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
收藏 评论0 发布时间:2023-2-23 21:00

举报

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