电子产业一站式赋能平台

PCB联盟网

搜索
查看: 223|回复: 0
收起左侧

如何在Linux环境下进行STM32开发?

[复制链接]

1001

主题

1001

帖子

8809

积分

高级会员

Rank: 5Rank: 5

积分
8809
发表于 2025-2-14 08:03:00 | 显示全部楼层 |阅读模式

gmr0dafuhvv6405773549.gif

gmr0dafuhvv6405773549.gif
6 o4 z$ }( Y7 l6 n
点击上方蓝色字体,关注我们
. J9 f3 v$ g& T! S: J1 _! N: W  F* r9 E4 _; O) Y
以下是我的一些看法。' O3 n! j) R. N" A

; |  X* g3 s) F

55mlihrfuwb6405773650.png

55mlihrfuwb6405773650.png

  f6 j* X+ {& H. x6 T1 L2 H, ]下面我详细聊一下常见的开发流程,以及如何优化你的现有流程。
4 ?# W* M8 F+ ]5 j0 T( j. J1
& ?2 v0 Q  e0 B, P工具链和开发环境% C6 R( G& ?' ^8 k' t" L- y' r
STM32CubeIDE 是 ST 官方提供的跨平台 IDE,支持 Linux,可以直接安装。
3 o/ t9 n. u" N, c. e
: g" z: Q* z# K! k  M1 O它整合了 Eclipse 和 GCC ARM 工具链,你可以在一个环境里完成开发、编译和烧录,非常适合 STM32 系列 MCU。
) }& e3 D3 I: h, Y# Q
- W# D: G' E* B0 `* Y5 K使用 ARM GCC 编译器和 OpenOCD 烧录工具也是不错的选择。2 R7 X: M0 ~9 f' @* Z) g. M- e& y
; H/ b9 [/ G, W0 |5 M* |9 n
很多人选择这种方式进行纯命令行开发,尤其适合 Linux 用户。8 w3 L& l1 o: d8 H$ _+ J+ q
0 L( x1 y7 j3 u0 s' `
你可以通过以下步骤设置环境,安装 ARM GCC 工具链:* p' [1 L( t  h! f; c

# T% `3 ]2 E6 P+ e
  • sudo apt install gcc-arm-none-eabi; k6 W) l1 j5 i
    安装 OpenOCD 用于调试和烧录:3 Z* G: H3 G/ C) D- t
    9 M5 r! D( }4 b
  • sudo apt install openocd% k: d, E, N" N# w; I
    VSCode + PlatformIO,这也是一套流行的开发环境,PlatformIO 可以轻松配置编译工具链和调试器,支持丰富的 STM32 系列开发板。# a/ r6 C8 n8 K3 u  g2 Q5 S
    2
    $ _3 _  f4 Z' c1 J& }; ISTM32flash vs OpenOCD- D, ^1 M1 H- Q
    STM32flash 是一个轻量级工具,用于通过串口(UART)烧录程序,适合一些基础的烧录需求。. W" m8 Z7 ]& o" Y( N9 Z$ _+ t0 d

    / K" r" ^3 J4 {% m9 Y然而它的局限性在于并非所有 STM32 型号都能用 UART 模式烧录。
    ) s' r7 m6 z7 R$ l9 q/ U4 l* P6 x* @8 ~6 @
    某些 STM32 型号可能需要通过 SWD 或 JTAG 接口进行烧录,特别是高性能的 STM32F4、STM32H7 系列。
    0 u/ V1 q; O) o" N3 ~% L
    ! G& D5 f, l  d" d0 G9 r% W这里有几种解决方案:
    2 j6 V9 w" }. Y  U5 d
    / A+ ?* h; d  E) r
  • 检查是否支持串口烧录: 确保你尝试烧录的 STM32 型号支持通过 UART 进行烧录。如果你使用的芯片不支持 UART 烧录,STM32flash 就无法工作。
  • 转用 OpenOCD: 如果你的开发板或者芯片支持 SWD 接口,你可以使用 OpenOCD 进行烧录。它支持的接口更丰富,兼容的芯片也更广泛。配置 OpenOCD 需要一个硬件调试器(如 ST-Link),使用 SWD 或 JTAG 烧录。
    0 f' S. c- c4 m6 N) v3 F

    " `8 s1 p# j' N2 K  G! a配置示例:% B# V. A- g& |4 T* u. Z' |) K

    : _: A1 I9 l# o: v+ h4 E. a连接 ST-Link 调试器,运行以下命令:" N6 J) e: l0 j, i; P6 P. z# k
    , t7 v& @! b$ k" [3 b2 |$ s
  • openocd -f interface/stlink.cfg -f target/stm32f1x.cfg% t: |3 N- m. n) b$ R: L2 b
    在另一个终端中,使用 GDB 进行调试和烧录:1 |. Y( j2 U# S# B0 |$ x3 Z
    8 ~# l$ I$ W9 E1 p- E
  • arm-none-eabi-gdb main.elf target remote localhost:3333 load
    - W$ j1 s' i8 R1 _: j如果你的 STM32 芯片支持 DFU(USB 设备固件升级),你可以尝试使用 dfu-util 工具。+ N/ Y7 H" p* D4 R3 q2 B

    ' |: K- U1 S0 c2 D, T+ H8 i: \4 _4 d; y进入 DFU 模式:按住 BOOT0 引脚,并复位 MCU。
    # z' \7 r/ f* _' s, W% U" m7 ]3 F9 J# Z
    烧录命令:* N! i, O+ B& o8 H. @: p5 w- ~

      l" H9 ~' ]0 Y
  • dfu-util -a 0 -s 0x08000000 -D firmware.bin% j, U" C( R6 G3 ?  N- a% W0 Z' W
    3" q* N1 ~  e( L. b7 t# f$ r  X; I
    程序烧录问题分析3 I, j4 R0 z1 O+ ^- J2 N
    针对你遇到的 STM32flash 无法烧录某些单片机的问题,可能的原因有以下几种:
      g! X% M2 c' I; x  Z2 q
  • 电平问题: 某些 STM32 芯片对 UART 电平要求比较严格,特别是 3.3V 和 5V 电平不匹配可能导致无法正常通信。你可以尝试使用 USB 转 TTL 工具,确保电平匹配。
  • 启动模式: 确保你的芯片在启动时进入 Bootloader 模式(BOOT0 引脚需要拉高)。如果 MCU 直接启动应用程序而非 Bootloader,STM32flash 可能无法正常通信。
  • 芯片锁定问题: 某些芯片可能启用了读保护(RDP),你可以通过 STM32CubeProgrammer 或 OpenOCD 来解锁该芯片,再尝试重新烧录。7 R2 Q3 X4 o: X$ J
    7 B8 k  `/ O. K1 P* t( Q
    4
    $ _$ m) M: l; ]% P9 n2 B. b2 p7 Z优化开发流程的建议5 g& n$ N5 S% c
    如果你已经适应了 MDK 和 STM32flash 的方式,继续用 Wine 也可以,但不如尝试 STM32CubeIDE 或者 VSCode + PlatformIO,它们在 Linux 环境下会更顺畅,调试和开发体验也更好。
    9 h2 E5 u7 q  E7 U6 H# N2 v) Y/ G8 g" s$ w! P' a6 W/ l
    对于烧录问题,考虑使用 SWD 或 JTAG 接口的工具(如 ST-Link),通过 OpenOCD 解决 STM32flash 不能支持的芯片。/ A9 N/ U( k" u
    4 }0 X( J; F; D4 N5 ]
    这么做不仅提高了开发效率,还能帮你解决一些硬件上的烧录局限问题。
    : ]5 r/ {, i, h' i  v0 [0 G

    zzwwaqdsoh36405773750.jpg

    zzwwaqdsoh36405773750.jpg
    2 ?6 z, {- m  n1 c- B& Q

    vztfvm1yfyx6405773850.gif

    vztfvm1yfyx6405773850.gif
    + S$ }- |) }+ r  g7 O( H5 n9 D
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表