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号警告,可以关闭,方法见下图:

页: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16
查看完整版本: 第一次:环境的创立 | 送实验箱