TaterLi's LazyBlog

自言自语,不喜绕路,科学上网,远离天国.

@TaterLi4周前

04/1
21:11
技术控

教你做CMSIS-DAP仿真器(基于Nucleo-F767ZI)

为什么选这个板子,因为我就这个高性能.哈哈.

新建Keil工程把我所列的组件都选上.

首先我们用的FULL SPEED模式.

修改USB_Config_0.c配置,这里名字记得改,他识别名字和VID PID.一定要带CMSIS-DAP字的.

再把具体USB_Config_HID_0.h修改.

我们这次是FullSpeed,先试试延迟16ms的版本.(默认值),接着把堆栈改大.

修改操作系统的参数.

在组右键通过模板增加一个文件,测试一下配置.

因为是HSI,注意修改一下main中的配置.

这时候编译应该就不会出什么错误.

设置一下让他ST-Link下载.

进入调试查看时钟对不对.时钟配置后下断点观察.

找到CMSIS-DAP源码.我的地址是[C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.0.1\CMSIS\DAP\Firmware]

把配置文件搞过来.

同样如此.

然后搞这两个过来,Main不要覆盖.

把源码挪过来.

里面这个文件不要.

把刚才添加的一些东西加到Keil里面.

在main.c中增加include.

#include "osObjects.h"
#include "rl_usb.h"
#include "DAP_config.h"
#include "DAP.h"

RTOS调度相关函数删掉.添加我们的DAP数据.

  DAP_Setup();                          // DAP Setup
Delayms(100U);                        // Wait for 100ms
USBD_Initialize(0U);                  // USB Device Initialization
USBD_Connect(0U);                     // USB Device Connect
while (!USBD_Configured(0U));         // Wait for USB Device to configure

把这个文件的只读去掉.(在资源管理器)

然后把device.h改成stm32f7xx.h

CPU_CLOCK填真实系统时钟.

暂时不要SWO功能.

添加INCLUDE,自身项目目录和RTE目录.

这时候编译,应该会出错的.通过错误快速引导到需配置的地方.

一般情况已经可以了,如果还不可以,请加装HSE晶振.

但是这个时候不能仿真啊,不能不能啊.因为我们PIN脚都还没定义呢.由于硬件限制和偷懒,先只实现一个SWD吧,另外SWD有双向引脚,正常来说呢,不应该一个IO搞定的.但是速度无所谓党表示算了.把函数按照最后的改装表改装,如果SWDIO是不是很难控制?外部电路当然容易,当然也可以采用不断切换输入输出模式.就像我这样,但是缺点是最慢速度才能满足他检测所需时间了.

 

全部IO改好后,调到最低速度,连接了一个STM32F103,检测成功,仿真肯定也是可以的,只是慢得…

具体每个函数解释如下.

未来设想,做个带屏幕的调试器?

教你做CMSIS-DAP仿真器(基于Nucleo-F767ZI)