来源:公众号【鱼鹰谈单片机】
作者:鱼鹰Osprey
ID :emOsprey
本篇介绍整个例程的结构和程序流程。Github 里面有一个仓库CMSIS-DAP(https://github.com/x893/CMSIS-DAP ,该工程可以导入到gitee中,加快下载速度,底部点击阅读原文即可进入该链接),x893大神移植的,网上大部分 CMSIS-DAP 的程序应该都是基于这个工程,鱼鹰提供的工程也是基于该工程,只不过为了简化工程,降低学习难度,鱼鹰把CDC 之外的移除了。但是使用该工程有一个麻烦就是不能用KEIL直接编译通过,必须安装兼容包,这个鱼鹰在之前的笔记介绍过。只有把兼容包安装好了才能正确编译,才能继续研究。鱼鹰闲这一步太麻烦了,所以重新整理了一个新工程,把兼容包里面的东西放到新工程里面,这样一来,即使没有安装过兼容包,也是能正确编译并进行后续测试的。所以大家获取到该工程后直接编译即可。(鱼鹰之前提供的工程因为已经安装了兼容包,所以编译没有发现什么问题,后来重新安装了KEIL发现,这个工程还是编译不了,需要在 CMSIS 工程下添加这两个文件,这两个文件可以在 KEIL 安装目录下找到,把它拷贝到这里就能正常编译了)
USB 所有的事件响应(发送完成、接收完成、复位等)都是通过中断来处理的,所以主要介绍一下这些中断,着重介绍正确传输中断CTR。
复位中断Main 函数的初始化主要是针对STM32的 USB 外设来主动进行初始化的,但除了该初始化外,在USB 设备插入主机后,主机都会发送复位信号来复位 USB 外设,而我们的应用程序也可以通过开启该中断来来复位软件上的数据信息,比如指针复位,缓存清除、寄存器初始化等操作。这样可以在每次插入 USB 后自动完成必要的初始化工作。
主机一般会发送两次复位信号,所以这个中断会进入两次,不过对