电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

989

主题

989

帖子

8577

积分

高级会员

Rank: 5Rank: 5

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

gmr0dafuhvv6405773549.gif

gmr0dafuhvv6405773549.gif
( G8 z7 i; i- E7 U1 F+ Z+ o
点击上方蓝色字体,关注我们
! Y# k7 m) f7 H, s- b$ M2 D% `  {' N
以下是我的一些看法。' j3 ~0 f5 g) N
! w6 u5 C% d% ^4 W  [' u* D

55mlihrfuwb6405773650.png

55mlihrfuwb6405773650.png

3 O/ w' I- V9 ?$ d! X+ |* T+ L; i下面我详细聊一下常见的开发流程,以及如何优化你的现有流程。5 t6 G7 X* w& c
1
1 d3 @4 g3 ?5 e4 m8 i4 p3 [0 G6 @5 v. `工具链和开发环境' L- I- x1 e- p# Q) E
STM32CubeIDE 是 ST 官方提供的跨平台 IDE,支持 Linux,可以直接安装。
( ]; W) P, D3 C+ R  P( k1 M4 O! Q9 l1 E& Z% L
它整合了 Eclipse 和 GCC ARM 工具链,你可以在一个环境里完成开发、编译和烧录,非常适合 STM32 系列 MCU。
- I4 _% X& C% h" ~
( p3 X, u3 o- [! _4 B使用 ARM GCC 编译器和 OpenOCD 烧录工具也是不错的选择。- v6 y/ U6 _% j; q2 a% k

+ K1 N0 h7 w& h: F* s很多人选择这种方式进行纯命令行开发,尤其适合 Linux 用户。
* |* |7 D- J- O
9 q' H/ S5 K% k8 `( E% |% C* w0 O# @你可以通过以下步骤设置环境,安装 ARM GCC 工具链:6 t! `& _. e) x6 ?

$ m  S' H- t4 }, u% `( Q* H
  • sudo apt install gcc-arm-none-eabi
    1 P0 h7 j) [' ?1 ^. V! A/ c' E安装 OpenOCD 用于调试和烧录:% p" X( L4 G7 U% g3 h2 r( ]/ k

    $ ^$ J" W6 ?/ g3 o+ X6 ]- L! x
  • sudo apt install openocd/ _7 k7 ^) `! @. b5 e
    VSCode + PlatformIO,这也是一套流行的开发环境,PlatformIO 可以轻松配置编译工具链和调试器,支持丰富的 STM32 系列开发板。
    3 L, M6 m& k$ K2# a5 d5 T& D1 v4 O( T
    STM32flash vs OpenOCD- m  ^$ o- u5 t9 j; c
    STM32flash 是一个轻量级工具,用于通过串口(UART)烧录程序,适合一些基础的烧录需求。4 z8 ?1 s" x  v" z: b3 _4 Q

    % G5 a. I1 B4 R5 N然而它的局限性在于并非所有 STM32 型号都能用 UART 模式烧录。* L  C# ?2 o3 J5 U: }

    ' S2 M% s" m" G7 W8 |5 Y+ {某些 STM32 型号可能需要通过 SWD 或 JTAG 接口进行烧录,特别是高性能的 STM32F4、STM32H7 系列。- L9 j% e" y* }, h  ]  w

    7 s$ G" U+ d4 _- ~这里有几种解决方案:6 ?9 R2 F3 H1 C$ _# j/ \( y
    ; X& H% S& a8 {( \# |, O8 f
  • 检查是否支持串口烧录: 确保你尝试烧录的 STM32 型号支持通过 UART 进行烧录。如果你使用的芯片不支持 UART 烧录,STM32flash 就无法工作。
  • 转用 OpenOCD: 如果你的开发板或者芯片支持 SWD 接口,你可以使用 OpenOCD 进行烧录。它支持的接口更丰富,兼容的芯片也更广泛。配置 OpenOCD 需要一个硬件调试器(如 ST-Link),使用 SWD 或 JTAG 烧录。4 I( _  ]# U2 B' [) n! u- Z) D; A

    * C2 ~2 r) H: ]配置示例:
    4 g! W" K; R. }6 s7 t. E0 c! Q
    连接 ST-Link 调试器,运行以下命令:
    ) O2 q, i1 o0 o% F7 ?
    : x* H# N  R& K' T
  • openocd -f interface/stlink.cfg -f target/stm32f1x.cfg
    0 N$ r& B. n0 K$ P. |# X# C在另一个终端中,使用 GDB 进行调试和烧录:
    3 w! \5 H$ c% [1 _" a# Q2 C
    * \/ x* K( h" |( k" c% w+ v! z
  • arm-none-eabi-gdb main.elf target remote localhost:3333 load/ I% Q3 C  p2 s5 o
    如果你的 STM32 芯片支持 DFU(USB 设备固件升级),你可以尝试使用 dfu-util 工具。
    1 D1 M3 {2 _4 _/ k. D
      q* c  G- `  n7 q9 E) O5 w0 p进入 DFU 模式:按住 BOOT0 引脚,并复位 MCU。$ W! g0 f- ?% O0 }9 k
    # s9 d& d1 P$ D' V/ }' P
    烧录命令:
    / u! b  U; p) z" F& i* P1 \
    % c& E6 M- r4 Z( y
  • dfu-util -a 0 -s 0x08000000 -D firmware.bin
    & b5 N" E/ d% @- u6 O: h3 W3
    4 M5 q& s4 r* B. \4 v- }- O# @" K( }程序烧录问题分析; l' h2 \! x# s) N) p/ S
    针对你遇到的 STM32flash 无法烧录某些单片机的问题,可能的原因有以下几种:9 F2 q/ l+ i7 X$ s
  • 电平问题: 某些 STM32 芯片对 UART 电平要求比较严格,特别是 3.3V 和 5V 电平不匹配可能导致无法正常通信。你可以尝试使用 USB 转 TTL 工具,确保电平匹配。
  • 启动模式: 确保你的芯片在启动时进入 Bootloader 模式(BOOT0 引脚需要拉高)。如果 MCU 直接启动应用程序而非 Bootloader,STM32flash 可能无法正常通信。
  • 芯片锁定问题: 某些芯片可能启用了读保护(RDP),你可以通过 STM32CubeProgrammer 或 OpenOCD 来解锁该芯片,再尝试重新烧录。
    5 R+ J+ m1 [+ e+ ^8 P- c

    ) ?4 c# l9 Y& j; d2 x4
    ' g' ~2 ]8 B9 N+ Q$ w0 \* G优化开发流程的建议5 q/ F9 P  ^$ j& f+ w1 Q3 d! }
    如果你已经适应了 MDK 和 STM32flash 的方式,继续用 Wine 也可以,但不如尝试 STM32CubeIDE 或者 VSCode + PlatformIO,它们在 Linux 环境下会更顺畅,调试和开发体验也更好。3 t( x% q  w+ s& v0 P

    ) J8 y; X/ j: b9 \/ `+ b对于烧录问题,考虑使用 SWD 或 JTAG 接口的工具(如 ST-Link),通过 OpenOCD 解决 STM32flash 不能支持的芯片。  J7 _- Y3 r- m6 F$ z  L. |
    % S+ {2 J5 W! u/ f3 R
    这么做不仅提高了开发效率,还能帮你解决一些硬件上的烧录局限问题。$ ?9 t9 h$ G! y9 U

    zzwwaqdsoh36405773750.jpg

    zzwwaqdsoh36405773750.jpg
    ) [6 t  ^/ }2 p

    vztfvm1yfyx6405773850.gif

    vztfvm1yfyx6405773850.gif
      X  R& C5 W: Q( }: r0 |& c2 S
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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