历史上的今天
返回首页

历史上的今天

今天是:2025年08月06日(星期三)

正在发生

2019年08月06日 | Ubuntu环境下使用stlink调试和下载stm32f4-discovery程序

2019-08-06 来源:eefocus

首先下载stlink的Linux版本。


然后解压到你所指定的路径下,参照其中的README文件进行编译配置。如下:(笔者在此将对关键点进行标注)


HOWTO

=====


First, you have to know there are several boards supported by the software.

Those boards use a chip to translate from USB to JTAG commands. The chip is

called stlink and there are 2 versions:

. STLINKv1, present on STM32VL discovery kits,

. STLINKv2, present on STM32L discovery and later kits.


2 different transport layers are used:

. STLINKv1 uses SCSI passthru commands over USB,

. STLINKv2 uses raw USB commands.


Common requirements(依赖环境)

~~~~~~~~~~~~~~~~~~~


. libusb-1.0  (You probably already have this, but you'll need the

development version to compile)

(这个工具只需要执行sudo apt-get install libusb-dev && sudo apt-get install libusb-1.0-0-dev这两个命令即可。)

. pkg-config

(这个工具一般Ubuntu都会默认安装,注意变量PKG-CONFIG-PATH的设置)

IF YOU HAVE AN STLINKv1

~~~~~~~~~~~~~~~~~~~~~~~

The STLINKv1's SCSI emulation is very broken, so the best thing to do

is tell your operating system to completely ignore it.


Options (do one of these before you plug it in)

   *) modprobe -r usb-storage && modprobe usb-storage quirks=483:3744:i

or *)1. add "options usb-storage quirks=483:3744:i" to /etc/modprobe.conf

   *)2. modprobe -r usb-storage && modprobe usb-storage

or *)1. cp stlink_v1.modprobe.conf /etc/modprobe.d

   *)2. modprobe -r usb-storage && modprobe usb-storage


IF YOU HAVE AN STLINKv2(我们的开发板支持STLINKv2,所以这里不做配置)

~~~~~~~~~~~~~~~~~~~~~~~


You're ready to go :)


COMPILING(编译:下边3个指令即可)

~~~~~~~~~

This project was converted to Autotools by a well meaning individual. The

following steps will build the project for you.


$ ./autogen.sh

$ ./configure

$ make


USING THE GDBSERVER(使用GDB调试服务)

~~~~~~~~~~~~~~~~~~~

To run the gdb server: (you do not need sudo if you have set up

permissions correctly)

(此时连上你的开发板,一般都要sudo)

$ make && [sudo] ./st-util


There are a few options:


./st-util - usage:


  -h, --help Print this help

  -vXX, --verbose=XX Specify a specific verbosity level (0..99)

  -v, --verbose Specify generally verbose logging

  -s X, --stlink_version=X

Choose what version of stlink to use, (defaults to 2)

  -1, --stlinkv1 Force stlink version 1

  -p 4242, --listen_port=1234

Set the gdb server listen port. (default port: 4242)

  -m, --multi

Set gdb server to extended mode.

st-util will continue listening for connections after disconnect.

  -n, --no-reset

Do not reset board on connection.


The STLINKv2 device to use can be specified in the environment

variable STLINK_DEVICE on the format :.


Then, in your project directory, someting like this...

(remember, you need to run an _ARM_ gdb, not an x86 gdb)

(重新打开一个终端,找到你编译好的应用程序的目录,就是存在elf文件的地方)

$ arm-none-eabi-gdb fancyblink.elf  (开启调试)

...

(gdb) tar extended-remote :4242  (连上GDB服务)

...

(gdb) load

Loading section .text, size 0x458 lma 0x8000000

Loading section .data, size 0x8 lma 0x8000458

Start address 0x80001c1, load size 1120

Transfer rate: 1 KB/sec, 560 bytes/write.

(gdb)

...

(gdb) continue


Have fun!


Resetting the chip from GDB

===========================


You may reset the chip using GDB if you want. You'll need to use `target

extended-remote' command like in this session:

(gdb) target extended-remote localhost:4242

Remote debugging using localhost:4242

0x080007a8 in _startup ()

(gdb) kill

Kill the program being debugged? (y or n) y

(gdb) run

Starting program: /home/whitequark/ST/apps/bally/firmware.elf 


Remember that you can shorten the commands. `tar ext :4242' is good enough

for GDB.


Setting up udev rules

=====================


For convenience, you may install udev rules file, 49-stlinkv*.rules, located

in the root of repository. You will need to copy it to /etc/udev/rules.d,

and then either reboot or execute

$ udevadm control --reload-rules

$ udevadm trigger


Udev will now create a /dev/stlinkv2_XX or /dev/stlinkv1_XX file, with the appropriate permissions.

This is currently all the device is for, (only one stlink of each version is supported at 

any time presently)


Running programs from SRAM(在RAM上运行)

==========================


You can run your firmware directly from SRAM if you want to. Just link

it at 0x20000000 and do

(gdb) load firmware.elf


It will be loaded, and pc will be adjusted to point to start of the

code, if it is linked correctly (i.e. ELF has correct entry point).


Writing to flash(烧写Flash)

================


The GDB stub ships with a correct memory map, including the flash area.

If you would link your executable to 0x08000000 and then do

(gdb) load firmware.elf

then it would be written to the memory.



FAQ

===


Q: My breakpoints do not work at all or only work once.


A: Optimizations can cause severe instruction reordering. For example,

if you are doing something like `REG = 0x100;' in a loop, the code may

be split into two parts: loading 0x100 into some intermediate register

and moving that value to REG. When you set up a breakpoint, GDB will

hook to the first instruction, which may be called only once if there are

enough unused registers. In my experience, -O3 causes that frequently.


Q: At some point I use GDB command `next', and it hangs.


A: Sometimes when you will try to use GDB `next' command to skip a loop,

it will use a rather inefficient single-stepping way of doing that.

Set up a breakpoint manually in that case and do `continue'.


Currently known working combinations of programmer and target

=============================================================


STLink v1 (as found on the 32VL Discovery board)


Known Working Targets:

* STM32F100xx (Medium Density VL)

* STM32F103 (according to jpa- on ##stm32)


No information:

* everything else!


STLink v2 (as found on the 32L and F4 Discovery boards)

Known Working Targets:

* STM32F0Discovery (STM32F0 Discovery board)

* STM32F100xx (Medium Density VL, as on the 32VL Discovery board)

* STM32L1xx (STM32L Discovery board)

* STM32F103VC, STM32F107RC, STM32L151RB, STM32F205RE and STM32F405RE on custom boards

  (https://github.com/UweBonnes/wiki_fuer_alex/layout/usps...)

* STM32F303xx (STM32F3 Discovery board)

* STM32F407xx (STM32F4 Discovery board)

* STM32F429I-DISCO (STM32F4 Discovery board with LCD)

* STM32F439VIT6 (discovery board reseated CPU)

* STM32L151CB (custom board)

* STM32L152RB (STM32L-Discovery board, custom board)


STLink v2-1 (as found on the Nucleo boards)

Known Working Targets:

* STM32F401xx (STM32 Nucleo-F401RE board) 


Please report any and all known working combinations so I can update this!

按照上边步骤编译配置,就可以调试和下载应用程序。


推荐阅读

史海拾趣

上海国芯(Gcore)公司的发展小趣事
选择合适的速度传感器,确保能够准确测量被测物体的速度,并将其转换为电信号供555定时器处理。
Cybernetic Micro Systems公司的发展小趣事

随着智能手机市场的迅猛发展,CMS看到了新的机遇。公司投入大量研发资源,成功开发出一款专为智能手机设计的超低功耗芯片。这款芯片不仅性能卓越,而且能够有效延长手机的续航时间。CMS通过与多家知名手机厂商合作,将这款芯片广泛应用于各类智能手机中,从而迅速打开了市场。

Gulf Semiconductor公司的发展小趣事

随着业务的不断发展,CMS开始将目光投向国际市场。他们通过设立海外研发中心和生产基地,积极拓展海外市场。同时,CMS还加强了与国际知名企业的合作与交流,共同推动电子行业的发展。如今,CMS的产品已经遍布全球多个国家和地区,成为电子行业中不可忽视的一股力量。

启攀微电子(Chiphomer)公司的发展小趣事

在技术创新方面,启攀微电子一直致力于提升产品的性能和可靠性。公司拥有一支技术骨干团队,他们拥有丰富的芯片设计开发和批量生产的经验。通过不断的技术创新和优化,公司成功推出了多款高性能、低成本的芯片产品,并在通讯、智能家电及个人消费类等高速成长的电子信息领域取得了广泛的应用。同时,公司还积极拓展海外市场,成功将产品打入韩国等国家和地区,进一步提升了公司的国际影响力。

American Technical Ceramics (ATC)公司的发展小趣事

2009年,全球经济遭受金融海啸的冲击,启攀微电子也面临着巨大的市场压力。然而,公司并没有选择退缩,而是选择了坚守与创新。在经济危机的背景下,公司加强了产品推广和客户支持,同时加快了新品开发的步伐。经过几年的打拼,启攀微电子的消费类电子产品在手机领域取得了一定的市场认可,出货量大幅提升,市场份额稳步上升。

Hi-Optel Technologly Co Ltd公司的发展小趣事

在知识产权保护方面,启攀微电子高度重视自主创新能力的培养和提升。公司成立了专门的知识产权保护团队,负责申请和管理公司的专利和集成电路布图设计专有权。截至目前,公司累计申请专利已达26项,集成电路布图设计专有权54项。这些知识产权的取得不仅保护了公司的技术成果和市场地位,也为公司的持续创新提供了有力的支持。

问答坊 | AI 解惑

大家给点意见好吗?

最近我有一个新的任务,希望在大家的帮助下快点完成,希望大家能帮助我,---------你们知道现在电机企业主要分布在哪个省份吗?或者说哪些地区的电机人才较多点,谢了…

查看全部问答>

某国企名牌钽电容不良案例(转载)

  刚看到一个帖子,与大家分享: 这次,我要讨论的是国企元器件。国产元器件应该分成两种,一种是国有企业生产的,另一种是民营企业生产的。民营企业生产出来的东西,水平参差不齐,但是也有一些比较优秀的企业。而有国营背景的企业,由于体制的 ...…

查看全部问答>

基于GAL16V8和ULN2003的步进电机驱动器的设计

本帖最后由 paulhyde 于 2014-9-15 04:17 编辑 分享分享  …

查看全部问答>

高分求救:谁用过Application Verifier在WINCE上检测过内存泄露啊

我在PC端用Application Verifier 检测WINCE上应用程序的内存泄露,已经连接到设备上,可Application Verifier界面右边的Test Settings栏目中始终都没有检测项目,就是空的,谁能告诉我是怎么回事呀?…

查看全部问答>

零基础学单片机视频教程——02讲 并行端口仿真实例

零基础学单片机视频教程——02讲  并行端口仿真实例     本讲演示了标准51系列单片机并行I/O端口的使用,程序实现了并行I/O端口的读操作和写操作。其中,演示了一个完整程序的创建,同时还演示了并行端口的仿真操作。通过本 ...…

查看全部问答>

照明用LED驱动电源设计--新手指南

采用恒压设计会危害LED未来! 1. LED肯定是需要恒流方式点亮,还是有些使用恒压方式设计,主要原因:一是,恒流方式限制达不到某些客户要求,迫于无赖!二是,电源IC厂家为了自己利益,会有些偏离实际的宣传。恒压方式是暂时的过度,很快会被成熟 ...…

查看全部问答>

把电脑装进书桌

有些人不喜欢他们的个人电脑安装的外围设备和电缆暴露。通常情况下,他们会隐藏在后面,但这张桌子的抽屉里却藏着PC。 办公桌的抽屉里,作为电脑的情况下使用是最好的方式。当然,最大的问题是散热,所以可能需要增添额外的风扇以及散热器。…

查看全部问答>

FIFO实际深度与软件设置不符

检查很多遍,FIFO深度软件设置是8192个,但是实际芯片跑的是32个深度,费解。求解释! 过两天就要报告进度了。…

查看全部问答>

如何保护射频采样ADC的输入?

本文转自ADI技术杂志《模拟对话》https://ezchina.analog.com/message/28501#28501 任何高性能ADC,尤其是射频采样ADC,输入或前端的设计对于实现所需的系统级性能而言很关键。很多情况下,射频采样ADC可以对几百MHz的信号带宽进行数字量化。前端 ...…

查看全部问答>