wuzhengmin
发表于 2025-8-12 10:04:26
为什么要搞不停电下载?就是要像STC89C52RC用在清翔C51实验板上那样,下载的时候不用按任何按键!
方便我们下载调节程序,既然STC开发了这么好用的AI8H2K12U, USB 转双串口,STC自然有办法解决不停电下载功能,我们今天就跟着冲哥搞掂它(不见得能搞懂,只是照猫画虎先学会用)
一个是需要手动按按钮进下载模式,另一个可以直接点击下载,或者只要重新编译了,就自动下载!
接下来冲哥演示在STC官网下载相关资料---库文件,相关例子程序,给STC一万个赞!!!资料实在是太方便啦
PC我从8088-80286搞起,这些就不详细记录啦
我们先开个新目录,把上节课点灯的项目copy过来!接着打开这个项目,然后继续打开STC的示例项目(选32位的)
注意示例项目,我的裁剪图片是完整的!
wuzhengmin
发表于 2025-8-12 10:10:52
先把库文件和STC32_STC8_SUB.H添加进项目:
wuzhengmin
发表于 2025-8-12 10:35:03
记得顺手编译一下,没问题才能往下走!
我们先确定用比较稳定的查询方式(不要中断就不需要保护现场,就没有恢复的麻烦,增加程序的稳定性)
打开查询方式USB_CDC例程项目后可以对比一下:
前面我们要把32位的库文件和STC32_STC8_USB.h头文件复制到我们项目所在目录,并加入项目
前面已经顺利完成,接着看:
添加调用头文件:
wuzhengmin
发表于 2025-8-12 10:47:04
3.2 USB初始化函数(lib+h库实现)
下面这几句是USB初始化:
usb_init(); //USB CDC 接口配置
命令参数:
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
直接复制过来:
wuzhengmin
发表于 2025-8-12 10:53:49
合适的直接复制,不要重新录入,重复造轮子,没有意义!
已经形似啦,补充关键的灵魂:
有些约定的关键字要注意:"@STCISP#"
wuzhengmin
发表于 2025-8-12 11:06:44
P_SW2 |= 0x80; //B7位写1,使能访问XFR
这行是打开XFR寄存器的一个操作!
wuzhengmin
发表于 2025-8-12 11:15:06
其实就是要求第七位EAXFR要置1,才能有效访问,因为USB的很多寄存器,都在XFR的列表里:
wuzhengmin
发表于 2025-8-12 11:28:49
P_SW2 |= 0x80;
这里的| ,是或的意思,我们只是第7位置1,0---6位不要改变!
IE2 |= 0x80; //使能USB中断
EA = 1; //IE |= 0X80;
这就简单,打开USB中断,打开总中断
wuzhengmin
发表于 2025-8-12 11:40:38
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
这句实际是等USB完成配置:
接下来这4行:
if (bUsbOutReady)
{
USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done();
}
意思是不管USB接受到的是什么,都把它发回去...........
这串代码,还有实现不停电下载的功能
wuzhengmin
发表于 2025-8-12 11:45:13
到此为止,我们就实现了不停电下载功能!
顺带点亮几颗LED!
编译过程产生的57号警告,可以关闭,方法见下图: