proteus8 单步调试stm32 外置arm gcc
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屏幕。其他文件夹还有树莓派的例子,带可视化编程,b站有人做过。
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次会单步一下。