第四集
USB不停电下载
实现编译即下载




官网——软件工具——库函数——USB库文件
然后下载例程方便演示


两个汇编文件删掉后,剩下的两两区别就死HID下载喝CDC下载的区别,我们一般使用CDC下载即可
例程多一个Lib文件(较于上一节课代码)


找到USB的头文件,根据下载方式选择 带有 interrupt的文件是中断模式文件
查询和中断的区别在于:
查询模式在于每一次发送或者接收文件后都要检查相应的标志位后再继续传输,通常在一个while循环中执行
而中断模式则是每当数据传输时就会触发相应的中断,在中断内部执行相应操作,包括标志位的查询,其他外设操作等等
在收发数据这一块其实不管是中断模式还是查询模式,都会有可能会漏值的缺点。我们还需要在程序中定义环形缓冲区,这样就能有效解决这种情况。当然内部的USB收发应该很复杂,解决方式也可能不同。
对于漏值的原因,则是触发中断和查询过程都是需要时间的,在这段时间中就有可能产生少接收或者少发送值的情况,常见的是漏掉几个按键,或者和其他外设联动时会发生这种情况。


如下配置头文件和Lib文件即可
初始化函数
搜索usb_init()
但是搜不到 因为函数本体在LIb文件中,这个Lib文件集成了很多驱动文件,为了方便移植和不被修改而不可读
开始操作


配置准双向口


USB的寄存器都在FAXFR列表里面所以要使能列表
所以对这个寄存器| 0x80
为什么这样呢
这是位或的小知识 可以保证最高位置1 其他位保持原样


也是| 0x80,把USB的中断打开,在B7位
然后EA= 1 把所有中断打开
这里和普通的51是一样的没什么区别


最后一段(有点糊)这段实现了单片机对电脑的命令,让电脑自动下载,也就是不掉电下载