stm32 调试

发布者:SereneGardener最新更新时间:2025-01-15 来源: jianshu关键字:stm32  调试 手机看文章 扫描二维码
随时随地手机看文章

keil armcc这编译,elf运行不正常(突然崩溃、停在HardFault_Handler (void)),照着VSM Studio改了改编译选项似乎还是不行

还是用gcc编译出elf正常

--c99 -c --cpu Cortex-M3 -D__EVAL -g -O0 --apcs=interwork --split_sections

-I ......

-D__UVISION_VERSION='518' -D_RTE_ -DUSE_HAL_DRIVER -DSTM32F103x6 -o 'jiaotongdeng*.o' --omf_browse 'jiaotongdeng*.crf' --depend 'jiaotongdeng*.d'



armcc.exe --cpu=cortex-m3 --thumb -I.. -I../../../../../../../../../Keil_v5/ARM/CMSIS/Include -g  '../main.c' -c -o 'main.o'



似乎的确跟编译器版本有一定关系

反正就是自带的VSM Studio的编译器和选项,一般还是没问题的,别的IDE(keil什么的)的编译器和选项,就可能有问题

(C:yagarto-20121222 自带的gcc是这个东西,问题是这东西编译起来也有点问题,我把stm32cubeide的tool chain换了个gcc-arm-embedded 2014q2,但是吧,编译出来看着是没问题(仔细看了看,可能是ld文件有点语法不支持),到proteus上运行就会死循环HardFault_Handler()

同样的选项用最新版armgcc就能运行(就是局部变量地址经常有问题。。。))


此外,还有一点比较坑,就是proteus自带的yagarto gcc,编译自带的stm32代码,居然都会报错,我也是醉了。。。改了一下代码里的static inline,才能跑



总而言之,用armgcc,有些bug,但是可以用,不是正版用户,也不能要求太高

还有就是那个官方支持论坛,updates and fixes区域http://support.labcenter.co.uk/forums/viewforum.php?f=12,也是只有正版验证用户才能看


< 1><0x00000a4b>    DW_TAG_subprogram

                      DW_AT_external              yes(1)

                      DW_AT_name                  main

                      DW_AT_decl_file             0x00000001 C:/Users//STM32CubeIDE/workspace_1.8.0/proj4/Debug/../Core/Src/main.c

                      DW_AT_decl_line             0x00000044

                      DW_AT_decl_column           0x00000005

                      DW_AT_prototyped            yes(1)

                      DW_AT_type                  <0x000001be>

                      DW_AT_low_pc                0x08000250

                      DW_AT_high_pc               0x08000308

                      DW_AT_frame_base           

[ 0]< offset pair low-off : 0x08000250 addr  0x08000250 high-off  0x08000252 addr 0x08000252>DW_OP_breg13+0

[ 1]< offset pair low-off : 0x08000252 addr  0x08000252 high-off  0x08000254 addr 0x08000254>DW_OP_breg13+8

[ 2]< offset pair low-off : 0x08000254 addr  0x08000254 high-off  0x08000256 addr 0x08000256>DW_OP_breg13+32

[ 3]< offset pair low-off : 0x08000256 addr  0x08000256 high-off  0x08000308 addr 0x08000308>DW_OP_breg7+32


DW_AT_frame_base为r7+0d32

r7:2000 27E0 +0d32/0x20 后为2000 2800



< 3><0x00000ab3>        DW_TAG_variable

                          DW_AT_name                  shi1

                          DW_AT_decl_file             0x00000001 C:/Users//STM32CubeIDE/workspace_1.8.0/proj4/Debug/../Core/Src/main.c

                          DW_AT_decl_line             0x0000006d

                          DW_AT_decl_column           0x00000007

                          DW_AT_type                  <0x000001be>

                          DW_AT_location              DW_OP_fbreg -20

这里说明shi1这个int变量在内存中的位置为DW_OP_fbreg -0d20,即DW_AT_frame_base -0d20,即2000 2800-0d20=2800 27EC

经验证,2800 27EC这个地址是对的,的确是int shi1这个变量的内容,那么问题就确定,出在proteus对于dwarf的解析上了。。。


8.9/8.12换到8.13版本后,变量地址和反汇编代码出现两段重复 问题修复了,但是源代码断点断不下来了,要反汇编断点

另外一些改进:

可以自动检测.c源文件了,不需要跟.pdsprj同一目录了

可以看函数调用栈了

仿真开启更快了,13以前的版本开启的挺慢

(多个版本不能共存,虽然新版本可以安在另一个文件夹,保留旧版本,但是具体可能有一些覆盖,导致运行中报错)

又发现一个很坑的问题:

如果用外部的elf文件的话,必须得先点Source Code,然后点Project,然后Delete掉proteus自己的Project,它才会自动检测.pdsprj文件附近的.c文件,在调试界面显示出来


双击芯片后

元件属性里这个 Crystal Frequency:

应该是控制HSI,高速内部时钟,72MHz


Wire labels may only be assigned via the Property Assignment Tool when it is used in On Click mode. This is because there is no way for ISIS to determine where a wire label should be placed on a tagged wire, unless you mark the position with the mouse.

根据这个说法,比较可惜,没法通过替换,来修改Wire labels的名字,只能一个个click了

而且

action中的RENAME 

The string should contain both a property assignment of the form:

current_keyword=new_keyword

The name to the left of the assignment is the existing property name you wish to rename; the name to the right is the new name you wish to rename it to.

Only user properties can be renamed.(所以只有user properties可以重命名)(懂了,这个是重命名keyword的,并不能重命名value,value还是得用assign)


You can place more than one label on a wire. If you wish them all to have the same name, and for all of them to update automatically whenever any of the names are changed, the click the Auto-Sync checkbox.

多个标签都得手动勾选上,才能同步,但是实际上我并没有看出来这个功能有什么用。。


关键字:stm32  调试 引用地址:stm32 调试

上一篇:STM32结合ESP8266初始准备
下一篇:STM32学习(三)串口实验

推荐阅读最新更新时间:2026-03-25 11:41

DSP编程技巧之14-揭开编译器神秘面纱之链接器的高级选项
  在对 编译器 / 链接器 的各个选项的分析中,我们多次提到了“符号(symbol)”这个概念,而 DSP 调试的过程,往往也有个显著的特点,叫“符号调试”。每个可充定位目标模块都有一个符号表,它包含了模块中所定义和使用的符号的信息。在 链接器 的上下文中,有三种不同的符号:   1. 在目标模块中定义,并能被其它模块所引用的符号全局符号。全局 链接器 符号对应于非静态的C函数以及被定义为不带C static属性的全局变量。   2. 由其它模块所定义,并在当前目标模块中被引用的全局符号,这些符号被定义为外部符号(external),对应于定义为其它模块中的C函数和变量。例如我们在一个C文件中使用exter
[嵌入式]
DSP编程技巧之14-揭开<font color='red'>编译</font>器神秘面纱之链接器的高级<font color='red'>选项</font>
vofa+ : 优雅のSTM32串口调试
0、前言 最近工作和电机的学习都要频繁打印数据来调试,但用过keil自带的那debug的都懂啊,用来看看寄存器和打断点就还行,数据监看就完全是顶级折磨,将近半秒钟才刷新一次,纯纯看个乐了。单纯监看数据的话,用串口无疑是更好的选择,比如xcom和sscom,常用的115200波特率就足以把数据闪电般打印出来。 虽然速度的问题解决了,但是看到这无穷无尽的数据长龙宛如看到了我的人生走马灯.....想要在其中找到某几个出问题的数据更无疑是大海捞针。但今天,一切都好起来了,因为一个维新派串口工具改变了一切。 1、工具介绍 本次的主角:vofa+,非常简单的一个串口工具,常见的串口功能都有,但既然它出现在了文章里就证明它没那么简单,是的,
[单片机]
clion openocd调试stm32
set FLASH_SIZE 0x20000 #source adapter driver cmsis-dap source transport select swd source
[单片机]
《SLAM机器人基础教程》第三章 单片机与STM32:GPIO实验及Keil软件使用WatchWindows进行Debug调试
3.3节 GPIO实验及Keil软件使用WatchWindows进行Debug调试 本节将学习STM32基本的GPIO读取操作,并通过该GPIO实验学习keil软件的使用。 a.实验准备:碰撞开关/杜邦线,ST-Llink下载器,CHEAPX机器人控制板 b.实验目的:读取STM32芯片的管脚电平 c.相关知识点: STM32的I/O口有8种工作模式: GPIO_Mode_AIN = 0x0,//模拟输入,用于AD采集 GPIO_Mode_IN_FLOATING = 0x04,//浮空输入,用于判断外接电平是高电平还是低电平的情形 GPIO_Mode_IPD = 0x28, // 下拉输入,用于判断外接电平是高电平的情形 GPIO
[单片机]
《SLAM机器人基础教程》第三章 单片机与<font color='red'>STM32</font>:GPIO实验及Keil软件使用WatchWindows进行Debug<font color='red'>调试</font>
STM32开发/烧录/调试环境搭建 基于:Win10+STM32Cube+openocd+cmsis-dap(dap-link)
dap-link是个不错的STM32下载/调试工具,然而STM32Cube并没有直接支持它,只能通过openocd的方式间接支持. 网络上虽然已经有了其他人的教程,不过基本都是基于linux或者msys2的.我来出个纯windows的配置方案~ 软件环境下载 名称 网站 STM32CubeIDE https://www.st.com/zh/development-tools/stm32cubeide.html#get-software OpenOCD最新版 http://www.gnutoolchains.com/arm-eabi/openocd/ 部署OPENOCD 解压后会得到这样一个目录: scrip
[单片机]
<font color='red'>STM32</font>开发/烧录/<font color='red'>调试</font>环境搭建 基于:Win10+STM32Cube+openocd+cmsis-dap(dap-link)
STM32单片机一般有几种调试方式
1.JTAG调试 :这是一种常用的调试工具,可以用于单步执行、断点调试等操作。在STM32单片机中,可以使用ST-Link、STMicroelectronics IDE等工具进行JTAG调试。 2.串口调试 :通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息。这种方式的优势是可以借助强大的电脑来调试,不仅可以显示单独的参数,还可以显示曲线、图形、图像等。 3.仿真器调试 :STM32单片机可以使用仿真器进行开发和调试。仿真器可以在PC上模拟出STM32单片机的硬件环境,使得开发者可以在PC上进行程序编写、下载和调试等工作。 4.代码编辑器调试 :STM32单片机可以使用代码编辑器进行开发和调试。代码编辑器可以提供
[单片机]
基于stm32的uds Boot调试成功
一,前言 之前说找个周末调试下boot中移植过来的uds协议。那么我用原来单片机代码配对的上位机来进行调试。还是比较顺利的,3个小时调试完成。 二,遇到的问题 外部flash下载不成功。 原因我外部flash制作错误,生成hex的地址应该是ram地址,因为外部flash用来copy到内容ram区域来用的。链接存放地址修改为ram地址了。 LR_IROM1 0x20001000 0x1000 { ; load region size_region ER_IROM1 0x20001000 0x1000 { ; load address = execution address *.o (.flashVar, +First)
[单片机]
STM32在线调试时,出现BP could not be set问题解决办法
程序中设置了很多断点,因为IDE变异后有的地方是打不了断点的,所以有这种提示信息,按照下图操作,将断点全部取消进行编译。编译以后再进行断点设置就可以了!
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved