proteus8 单步调试stm32 外置arm gcc

发布时间 2024-01-10 16:58:16作者: 园友1683564

10年前proteus7的时代,51单片机就已经可以用keil和proteus联调了,单步调试,像连接了一个jtag调试口一样。

proteus官方提供的keil调试器驱动有arm 设备,不过我反复尝试,虽然识别到Proteus VSM Simulator设备和端口,但是还是报错,无法成功。

本文只是借助proteus内置的编辑器和单步调试器,做调试。——功能有限,proteus没有好好实现它们,不同的mcu可以调试的还不同。

gcc for arm编译器是自己从arm下载,并没有使用proteus的——下载不到。算是偷梁换柱。

 

1. 关于和keil联调:

请参考这篇:proteus 与 keil 联调 - lsgxeva - 博客园 (cnblogs.com)

      提醒:proteus8那边,需要在debug菜单中勾选 enable remote debug monitor

似乎有人成功过。

 

2. 使用官方例程

软件的安装文件夹下有许多例程,基本都自带或内置源码。

这些文件因为是和软件一起创建的,权限高,要用管理员权限打开proteus,才可以自由的打开这些工程并运行。

建议另存一份

C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\DATA\SAMPLES\VSM for Cortex M4\STM32

比如这个fft工程,可以用spi口驱动一个LCD屏幕

 

3. 使用内置IDE和源码,做单步调试

1. mcu上右键,点edit properties,然后点edit firmware按钮,可以调出source code标签页

2. 软件顶部菜单栏也变了。点project,creat project,选择器件。最后compiler只能选gcc for arm

      proteus的官网下载不到gcc for arm,即使我有梯子。估计网络有问题。我是外挂的一个gcc编译器,自己下载了一个:

          https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-win32.exe

图中的代码是新建工程后proteus自动创建的。源码在:C:/Users/xxxx/AppData/Local/Temp/VSM Studio/caee2f051f4b4a8bbe28861049d3748a/STM32F401VE

保存工程,这些代码也会保存到工程文件里。

 

这个功能实现的基础:

1.elf文件里有debug信息,可以指导proteus寻找源码文件

2.源码文件在source code标签页中有导入过

 理论上stm32cube生成的工程也可以拿进来,但是要在下图的project中导入一下,不然proteus找不到。

1. 自己写脚本或任何方式,编译这些源码。

比如:build.bat


SET output_filename=main

SET compiler_path="c:\gcc\bin"

SET include_dirs=-I"./" -I"./CMSIS/core" -I"./CMSIS/device"

SET linker_script=STM32F401XE.ld

SET defines=-DDEBUG -DSTM32F401xx -DPROTEUS_DEMO
SET compile=%compiler_path%\arm-none-eabi-gcc -gdwarf-2 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 %defines% %include_dirs% -O0 -g3 -Wall -fmessage-length=0 -ffunction-sections -c -MMD -MP

rem call Compiler
%compile% -MF"main.d" -MT"main.o" -o "main.o" "main.c"
%compile% -MF"./CMSIS/device/system_stm32f4xx.d" -MT"./CMSIS/device/system_stm32f4xx.o" -o "./CMSIS/device/system_stm32f4xx.o" "./CMSIS/device/system_stm32f4xx.c"

rem call Assembler
%compiler_path%\arm-none-eabi-as -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 %include_dirs% -g -o "./CMSIS/device/startup_stm32f401xx.o" "./CMSIS/device/startup_stm32f401xx.s"

rem call Linker
%compiler_path%\arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -T"%linker_script%" -Wl,-Map=%output_filename%.map -Wl,--gc-sections -o "%output_filename%.elf" main.o ./CMSIS/device/system_stm32f4xx.o ./CMSIS/device/startup_stm32f401xx.o -lm

rem Printing size information
%compiler_path%\arm-none-eabi-size "%output_filename%.elf"

2. 瞒天过海

mcu上右键,点edit properties,然后点program file,选择到刚刚编译出来的elf文件

然后运行,暂停,就会自动跳转到source code页。该页右上角就有单步调试,点击2~3次会单步一下。