STM32
直播中

cherry1989

12年用户 898经验值
擅长:嵌入式技术
私信 关注
[问答]

在Ubuntu环境下如何使用stlink调试stm32f4-discovery程序呢

在Ubuntu环境下如何使用stlink调试STM32f4-discovery程序呢?
在Ubuntu环境下如何使用stlink下载stm32f4-discovery程序呢?

回帖(1)

余正成

2021-11-2 17:06:06
  首先下载stlink的Linux的版本,下载地址。
  然后解压到你所指定的路径下,参照其中的自述文件进行编译配置。如下:(笔者在此将对关键点进行标注)
  HOWTO
  == ===
  首先,您必须知道该软件支持几种板。
  这些板使用芯片从 USB 转换为 JTAG 命令。该芯片
  称为 stlink,有 2 个版本:
  。 STLINKv1,存在于 STM32VL 探索套件中,
  。 STLINKv2,出现在 STM32L 发现和更高版本的套件中。
  使用了 2 个不同的传输层:
  。 STLINKv1 通过 USB 使用 SCSI passthru 命令,
  。 STLINKv2 使用原始 USB 命令。
  共同需求(依赖环境)
  ~~~~~~~~~~~~~~~~~~~
  。 libu***-1.0 (你可能已经有了这个,但你需要
  开发版才能编译)
  (这个工具只需要执行 sudo apt-get install libu***-dev && sudo apt-get install libu***-1.0-0-dev 这个命令分类。)
  。pkg-config
  (这个工具一般Ubuntu都默认安装,注意变量PKG-CONFIG-PATH的设置)
  IF YOU HAVE AN STLINKv1
  ~~~~~~~~~~~~~~~~~~~~~~~
  STLINKv1 的 SCSI 仿真非常糟糕,所以最好的办法
  是告诉您的操作系统完全忽略它。
  选项(在插入之前执行其中一项)
  *) modprobe -r u***-storage && modprobe u***-storage quirks=483:3744:i
  或 *)1。将“options u***-storage quirks=483:3744:i”添加到/etc/modprobe.conf
  *)2。modprobe -r u***-storage && modprobe u***-storage
  或 *)1。cp stlink_v1.modprobe.conf /etc/modprobe.d
  *)2. modprobe -r u***-storage && modprobe u***-storage
  IF YOU HAVE AN STLINKv2(我们的开发板支持STLINKv2,所以这里不做配置)
  ~~~~~~~~~~~~~~~~~~~~ ~~~
  你准备好了 :)
  COMPILING(编译:下边3个清洗消毒)
  ~~~~~~~~~
  这个项目是由一个好心人转换成Autotools的。在
  下面的步骤将构建项目给你。
  $ 。/autogen.sh
  $ 。/configure
  $ make
  USING THE GDBSERVER(使用GDB调试服务)
  ~~~~~~~~~~~~~~~~~~~
  运行gdb服务器:(你不
  权限设置正确就需要sudo )
  (此时连上你的开发板,一般都要sudo)
  $ make && [sudo] 。/st-util
  有几个选项:
  。/st-util - 用法:
  -h, --help 打印此帮助
  -vXX, --verbose=XX 指定特定的详细级别 (0..99)
  -v, --verbose 指定一般详细日志记录
  -s X, --stlink_version=X
  选择使用哪个版本的stlink,(默认为2)
  -1, --stlinkv1 Force stlink version 1
  -p 4242, --listen_port=1234
  设置gdb服务器监听端口。(默认端口:4242)
  -m, --multi
  将 gdb 服务器设置为扩展模式。
  st-util 将在断开连接后继续侦听连接。
  -n, --no-reset
  不要在连接时重置板。
  要使用的 STLINKv2 设备可以在环境
  变量 STLINK_DEVICE 中以 《USB_BUS》:《USB_ADDR》 格式指定。
  然后,在你的项目目录中,像这样。..。..
  (记住,你需要运行一个 _ARM_ gdb,而不是一个 x86 gdb)
  (重打开一个终端,找到你编译好的应用程序的目录,就是存在自己的文件地方)
  $ arm-none-eabi-gdb Fantasyblink.elf (开启调试)
  。..
  (gdb) tar extended-remote :4242 (连上 GDB 服务)
  。..
  (gdb) load
  Loading section .text, size 0x458 lma 0x8000000
  加载部分 .data,大小 0x8 lma 0x8000458
  起始地址 0x80001c1,加载大小 1120
  传输速率:1 KB/秒,560 字节/写入。
  (gdb)
  。..
  (gdb) 继续
  玩得开心!
  从 GDB 重置芯片
  ============================
  如果需要,您可以使用 GDB 重置芯片。您将需要
  在此会话中使用“target extended-remote”命令:
  (gdb) target extended-remote localhost:4242
  Remote debugging using localhost:4242
  0x080007a8 in _startup ()
  (gdb) kill
  杀死正在调试的程序?(y or n) y
  (gdb) run
  启动程序:/home/whitequark/ST/apps/bally/firmware.elf
  请记住,您可以缩短命令。`tar ext :4242‘
  对 GDB来说已经足够了。
  设置 udev 规则
  ====================
  为方便起见,您可以安装 udev 规则文件,49-stlinkv*.rules,位于
  在存储库的根目录中。您需要将其复制到 /etc/udev/rules.d,
  然后重新启动或执行
  $ udevadm control --reload-rules
  $ udevadm trigger
  Udev 现在将创建一个 /dev/stlinkv2_XX 或 /dev/stlinkv1_XX 文件,适当的权限。
  这是目前所有的设备,(
  目前任何时候只支持每个版本的一个stlink )
  从SRAM运行程序(在RAM上运行)
  ================== ==========
  如果需要,您可以直接从 SRAM 运行固件。就
  在0x20000000链接,做
  (gdb) loadfirmware.elf
  就会加载,然后调整pc指向开始
  代码,如果链接正确(即 ELF 具有正确的入口点)。
  写入闪存(烧写Flash)
  ================
  GDB 存根附带正确的内存映射,包括闪存区域。
  如果您将可执行文件链接到 0x08000000,然后执行
  (gdb) load firmware.elf,
  那么它将被写入内存。
  常见问题
  ===
  问:我的断点根本不起作用或只起作用一次。
  答:优化会导致严重的指令重新排序。例如,
  如果你正在做类似`REG = 0x100;’ 在循环中,代码可以
  分为两部分:将 0x100 加载到某个中间寄存器
  并将该值移动到 REG。当你设置断点时,GDB 会
  挂钩到第一条指令,如果有
  足够的未使用寄存器,则可能只调用一次。根据我的经验,-O3 经常导致这种情况。
  问:在某些时候,我使用 GDB 命令“next”,但它挂起。
  A: 有时,当您尝试使用 GDB 的“next”命令跳过循环时,
  它会使用一种相当低效的单步执行方式。
  在这种情况下手动设置断点并执行“继续”。
  当前已知的程序员和目标的工作组合
  ========================================== ==================
  STLink v1(在 32VL Discovery 板上找到)
  已知工作目标:
  * STM32F100xx(中等密度 VL)
  * STM32F103(根据 jpa- on # #stm32)
  没有信息:
  * 其他一切!
  STLink v2(可在 32L 和 F4 探索板上找到)
  已知工作目标:
  * STM32F0Discovery(STM32F0 探索板)
  * STM32F100xx(中密度 VL,如 32VL 探索板)
  * STM32L1xx(STM32L 探索板)
  * STM32F0STM7RC1、STM32F12F STM32L151RB、STM32F205RE 和 STM32F405RE 在定制板上
  * STM32F303xx (STM32F3 Discovery board)
  * STM32F407 Discovery board
  (STM32F407带 LCD)
  * STM32F439VIT6(发现板重新安装 CPU)
  * STM32L151CB(定制板)
  * STM32L152RB(STM32L-Discovery 板,定制板)
  STLink v2-1(可在 Nucleo 板上找到)
  已知工作目标:
  * STM32F401xx(STM32 Nucleo-F401RE 板)
  请报告任何和所有已知的工作组合,以便我更新!
  按照上边步骤编译配置,就可以调试和下载应用程序。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分