|
原文链接:
教你做CMSIS-DAP仿真器(基于Nucleo-F767ZI)2017年4月1日 BY : TATERLI
为什么选这个板子,因为我就这个高性能.哈哈.
新建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.
1
[color=rgb(49, 124, 197) !important]2
3
[color=rgb(49, 124, 197) !important]4
| [color=rgb(184, 92, 0) !important]#include "osObjects.h"
[color=rgb(184, 92, 0) !important]#include "rl_usb.h"
[color=rgb(184, 92, 0) !important]#include "DAP_config.h"
[color=rgb(184, 92, 0) !important]#include "DAP.h"
|
RTOS调度相关函数删掉.添加我们的DAP数据.
1
[color=rgb(49, 124, 197) !important]2
3
[color=rgb(49, 124, 197) !important]4
5
| [color=rgb(0, 111, 224) !important] [color=rgb(0, 78, 208) !important]DAP_Setup[color=rgb(51, 51, 51) !important]([color=rgb(51, 51, 51) !important])[color=rgb(51, 51, 51) !important];[color=rgb(0, 111, 224) !important] [color=rgb(255, 128, 0) !important]// DAP Setup
[color=rgb(0, 111, 224) !important] [color=rgb(0, 78, 208) !important]Delayms[color=rgb(51, 51, 51) !important]([color=rgb(206, 0, 0) !important]100U[color=rgb(51, 51, 51) !important])[color=rgb(51, 51, 51) !important];[color=rgb(0, 111, 224) !important] [color=rgb(255, 128, 0) !important]// Wait for 100ms
[color=rgb(0, 111, 224) !important] [color=rgb(0, 78, 208) !important]USBD_Initialize[color=rgb(51, 51, 51) !important]([color=rgb(206, 0, 0) !important]0U[color=rgb(51, 51, 51) !important])[color=rgb(51, 51, 51) !important];[color=rgb(0, 111, 224) !important] [color=rgb(255, 128, 0) !important]// USB Device Initialization
[color=rgb(0, 111, 224) !important] [color=rgb(0, 78, 208) !important]USBD_Connect[color=rgb(51, 51, 51) !important]([color=rgb(206, 0, 0) !important]0U[color=rgb(51, 51, 51) !important])[color=rgb(51, 51, 51) !important];[color=rgb(0, 111, 224) !important] [color=rgb(255, 128, 0) !important]// USB Device Connect
[color=rgb(0, 111, 224) !important] [color=rgb(128, 0, 128) !important]while[color=rgb(0, 111, 224) !important] [color=rgb(51, 51, 51) !important]([color=rgb(0, 111, 224) !important]![color=rgb(0, 78, 208) !important]USBD_Configured[color=rgb(51, 51, 51) !important]([color=rgb(206, 0, 0) !important]0U[color=rgb(51, 51, 51) !important])[color=rgb(51, 51, 51) !important])[color=rgb(51, 51, 51) !important];[color=rgb(0, 111, 224) !important] [color=rgb(255, 128, 0) !important]// Wait for USB Device to configure
|
把这个文件的只读去掉.(在资源管理器) 然后把device.h改成stm32f7xx.h CPU_CLOCK填真实系统时钟. 暂时不要SWO功能.
添加INCLUDE,自身项目目录和RTE目录. 这时候编译,应该会出错的.通过错误快速引导到需配置的地方. 一般情况已经可以了,如果还不可以,请加装HSE晶振. 但是这个时候不能仿真啊,不能不能啊.因为我们PIN脚都还没定义呢.由于硬件限制和偷懒,先只实现一个SWD吧,另外SWD有双向引脚,正常来说呢,不应该一个IO搞定的.但是速度无所谓党表示算了.把函数按照最后的改装表改装,如果SWDIO是不是很难控制?外部电路当然容易,当然也可以采用不断切换输入输出模式.就像我这样,但是缺点是最慢速度才能满足他检测所需时间了.
全部IO改好后,调到最低速度,连接了一个STM32F103,检测成功,仿真肯定也是可以的,只是慢得… 具体每个函数解释如下. 未来设想,做个带屏幕的调试器?
|
|