【STM32Cube开发记录】7-Debug调试功能的使用

【STM32Cube开发记录】1-下载和安装STM32CubeIDE

【STM32Cube开发记录】2-STM32CubeProgrammer的使用

【STM32Cube开发记录】3-STM32CubeMX的使用

【STM32Cube开发记录】4-标准库 HAL库 LL库

【STM32Cube开发记录】5-寄存器和存储器映射

【STM32Cube开发记录】6-STM32核心功能

【STM32Cube开发记录】7-Debug调试功能的使用

大多数时候,我们可能写代码很快就写完了。但是一下载实际运行的时候就会遇到各种不正常工作的情况,这就需要我们区调试软件bug,所以有一个好的调试工具可以事半功倍。

STM32CubeIDE本身就提供了调试工具,除了需要一个STLINK,其它不需要额外的硬件或程序。

(好像还有其它调试工具,待补充)

1. 使用STM32CubeIDE的Debug

连接好你的硬件,点击下方的Debug图标

 会弹出一个选项框,提示是否切换到调试窗口。选择Switch(建议勾选上Remember my decision)

 这样就会进入到调试窗口了。

在变量窗格提供了查看当前堆栈帧(即调用堆栈中的所选过程)中定义的变量内容的功能。通过鼠标右键单击检查的变量,可以进一步自定义变量显示的方式。在右键菜单中单击“View Memory”,还可以转到变量存储的内存地址。(这里随意定义了一个变量a)

断点视图列出了应用程序中使用的所有断点。断点允许在程序计数器(PC)达到特定指令时停止固件的执行。当这种情况发生时,调试器会停止,并且Eclipse将显示停止指令的上下文。带代码行最前双击就可以设置断点。每个Cortex-M的MCU都有一定数量的硬件断点。

Cortex-MBreakpointsWatchpoints
M0/0+42
M3/4/7/3384

2. 调试图标的说明

 用于软复位,不会终止Debug。

  开启则忽略所有断点,继续执行而不中断。

 终止调试,并重新启动调试会话。

 触发断点或代码暂停后,恢复代码运行。

代码在运行的时候,暂停运行。

 终止调试,关闭调试会话。

 进入调用函数内部。

 执行下一个指令,不会进入函数内部。

 MCU将继续运行,直到退出(即返回)当前程序。执行将准确停在调用函数中的下一条指令上。
(除此之外的窗口还有寄存器窗口。后面学到再来补充)

3. 调试的配置

我们可以对我们的Debug进行一些配置,上面我们采用的方法是直接点击Debug那个图标,实际上STM32CubeIDE帮我们进行了一些配置。

点击这个进行配置
 

 我们关注的是STM32 C/C++ Application。

 在右侧有几个选项Main\调试器\StartUp

3.1 Main

选择项目,需要加载的二进制文件。 

3.2 调试器

GDB连接设置:选择连接本地还是远程。(这部分先不改动)。

调试探头:STM32CubeIDE支持三种不同的调试探头(标准ST-LINK、SEGGER J-Link和OpenOCD)。我使用的ST-LINK调试探针。(后续可能补充其它两种)

接口:可以选择使用哪个MCU调试接口。大多数STM32 MCU都支持JTAG和SWD接口。我使用的是SWD接口。
Reset behaviour:有时候可能会遇到无法烧录MCU或使用ST-LINK进行调试的情况,当发生这种情况时,意味着ST-LINK调试器无法访问目标MCU的调试端口(通过SWD接口),或者Flash已被锁定,阻止调试器访问。一般来说,如果SWD引脚已被配置为通用GPIO或者MCU处于深度低功耗模式,关闭了调试端口,再或者选项字节配置存在问题(可能Flash已被写保护,或者读保护级别1已经打开),就会造成这种原因。要解决这个,必须强制ST-LINK调试器在保持目标MCU的nRST引脚低电平的情况下连接到它。这个操作被称为"复位下连接",它可以通过选择一种复位行为来执行,接下来将对这些行为进行描述。

  • Connect under reset (default):复位下连接,reset线被激活,等待连接完成后,reset线被停用。
  • Software system reset:通过软件写入RCC寄存器来激活系统复位。这将重置核心和外设,并且可以重置整个系统,因为目标的复位引脚会自动断开。
  • Hardware reset:ST-LINK复位线被激活然后停用--产生一个脉冲,然后ST-LINK以SWD或JTAG模式连接。
  • Core reset:通过在Cortex-M寄存器中写入来激活core复位(不适用于Cortex-M0/0+/33核心)。这只重置core,不会重置外设或复位引脚。
  • None:用于连接到正在运行的目标,其中程序已经下载到设备中。在启动选项卡中不应有任何文件程序命令。

3.3 StartUp

Initializtion Commands: 这个可以配置如何启动调试会话。如果需要在发送加载命令之前向GDB服务器发送某些命令,可以在这里编辑任何类型的GDB或GDB服务器监视器命令。比如,如果需要在加载之前执行完整的FLASH存储器擦除,可以在这里输入monitor flash mass_erase命令。

load image and symbols:列表框必须包含要进行调试的文件。

Runtime Options: 用于设置启动地址和断点,启用异常处理和恢复。默认情况下,"设置断点"复选框被启用,并且编辑字段显示"main"。默认情况下,在调试程序时会在"main()"例程处设置一个断点。这就是为什么在每次调试会话开始时执行会在"main()"处停止的原因。
关于异常选项:

  • Exception on divide by zero:捕获除零错误。
  • Exception on unaligned access:如果存在任何未对齐的内存访问,会有这个异常。
  • Halt on exception:异常时停止。

4. 输入输出重定向

在调试过程中,如果有像C语言那种使用printf输出我们想要的调试信息,会方便很多,再者,使用断点调试,会导致丢失相关的事件。如何实现这种功能?我们可以重写函数来将标准输入(STDIN)、标准输出(STDOUT)和标准错误输出(STDERR)重定向到MCU的USART上。

对于float的支持,需要进行设置,勾选Use float with printf from newlib-nano and Use float with scanf from newlib-nano

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32CubeIDE 是一款用于开发基于STM32微控制器的集成开发环境。ST-Link 是一种用于连接STM32微控制器和计算机的调试和编程接口。在使用STM32CubeIDE时,有几种方法可以更新ST-Link固件。 首先,你可以在STM32CubeIDE的菜单栏中选择“Help->ST-LINK更新”,然后按照提示更新ST-LINK固件。 另外,你也可以通过更换ST-Link所使用的MCU来解决问题,比如更换为兼容的CBT6(128KB Flash),这个方法需要采购新的MCU并手动拆卸和焊接。然后,你还需要重新烧录ST-Link固件,这个过程可能有些麻烦,但可以解决问题。 除此之外,你还可以使用类似"everything"的搜索软件来快速定位STM32_Programmer_CLI.exe和ST-LINK_gdbserver.exe这两个可执行文件的路径。一般来说,STM32_Programmer_CLI.exe位于STM32CubeIDE安装目录下的plugins\com.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.win32_1.0.0.201904021149\tools\bin目录下,而ST-LINK_gdbserver.exe位于STM32CubeIDE安装目录下的plugins\com.st.stm32cube.ide.mcu.externaltools.stlink-gdb-server.win32_1.0.0.201904160814\tools\bin目录下。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STM32CubeIDE使用总结(三)——debug调试程序](https://blog.csdn.net/tuxinbang1989/article/details/100826820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [暴力升级你的 ST-Link 及 STM32CubeIDE](https://blog.csdn.net/zhutianlong/article/details/98382536)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值