找回密码
 立即注册
楼主: wuzhengmin

第一次:环境的创立 | 送实验箱

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2025-08-22 10:12:58
已绑定手机

1

主题

158

回帖

407

积分

中级会员

积分
407
发表于 2025-8-12 10:04:26 | 显示全部楼层
为什么要搞不停电下载?就是要像STC89C52RC用在清翔C51实验板上那样,下载的时候不用按任何按键!

方便我们下载调节程序,既然STC开发了这么好用的AI8H2K12U, USB 转双串口,STC自然有办法解决不停电下载功能,我们今天就跟着冲哥搞掂它(不见得能搞懂,只是照猫画虎先学会用)


一个是需要手动按按钮进下载模式,另一个可以直接点击下载,或者只要重新编译了,就自动下载!

接下来冲哥演示在STC官网下载相关资料---库文件,相关例子程序,给STC一万个赞!!!资料实在是太方便啦

PC我从8088-80286搞起,这些就不详细记录啦

我们先开个新目录,把上节课点灯的项目copy过来!接着打开这个项目,然后继续打开STC的示例项目(选32位的)

注意示例项目,我的裁剪图片是完整的!
截图202508120943046907.jpg
截图202508121002235322.jpg
截图202508121003372423.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2025-08-22 10:12:58
已绑定手机

1

主题

158

回帖

407

积分

中级会员

积分
407
发表于 2025-8-12 10:10:52 | 显示全部楼层
先把库文件和STC32_STC8_SUB.H添加进项目:


截图202508121009393852.jpg
截图202508121010452988.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2025-08-22 10:12:58
已绑定手机

1

主题

158

回帖

407

积分

中级会员

积分
407
发表于 2025-8-12 10:35:03 | 显示全部楼层
记得顺手编译一下,没问题才能往下走!


我们先确定用比较稳定的查询方式(不要中断就不需要保护现场,就没有恢复的麻烦,增加程序的稳定性)

打开查询方式USB_CDC例程项目后可以对比一下:

前面我们要把32位的库文件和STC32_STC8_USB.h头文件复制到我们项目所在目录,并加入项目

前面已经顺利完成,接着看:

添加调用头文件:



截图202508121034553800.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2025-08-22 10:12:58
已绑定手机

1

主题

158

回帖

407

积分

中级会员

积分
407
发表于 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#";


直接复制过来:




截图202508121046568554.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2025-08-22 10:12:58
已绑定手机

1

主题

158

回帖

407

积分

中级会员

积分
407
发表于 2025-8-12 10:53:49 | 显示全部楼层
合适的直接复制,不要重新录入,重复造轮子,没有意义!


已经形似啦,补充关键的灵魂:

有些约定的关键字要注意:"@STCISP#"


截图202508121053451271.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2025-08-22 10:12:58
已绑定手机

1

主题

158

回帖

407

积分

中级会员

积分
407
发表于 2025-8-12 11:06:44 | 显示全部楼层
P_SW2 |= 0x80;                //B7位写1,使能访问XFR


这行是打开XFR寄存器的一个操作!


截图202508121106359547.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2025-08-22 10:12:58
已绑定手机

1

主题

158

回帖

407

积分

中级会员

积分
407
发表于 2025-8-12 11:15:06 | 显示全部楼层
其实就是要求第七位EAXFR要置1,才能有效访问,因为USB的很多寄存器,都在XFR的列表里:





截图202508121114562502.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2025-08-22 10:12:58
已绑定手机

1

主题

158

回帖

407

积分

中级会员

积分
407
发表于 2025-8-12 11:28:49 | 显示全部楼层
P_SW2 |= 0x80;

这里的  | ,是或的意思,我们只是第7位置1,0---6位不要改变!


    IE2 |= 0x80;                                    //使能USB中断
    EA = 1;                                                                                        //IE |= 0X80;


这就简单,打开USB中断,打开总中断


截图202508121125131601.jpg
截图202508121128425764.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2025-08-22 10:12:58
已绑定手机

1

主题

158

回帖

407

积分

中级会员

积分
407
发表于 2025-8-12 11:40:38 | 显示全部楼层
while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置



这句实际是等USB完成配置:

接下来这4行:


if (bUsbOutReady)
        {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            
            usb_OUT_done();
        }


意思是不管USB接受到的是什么,都把它发回去...........
这串代码,还有实现不停电下载的功能


截图202508121132576454.jpg
截图202508121140325839.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:17
  • 最近打卡:2025-08-22 10:12:58
已绑定手机

1

主题

158

回帖

407

积分

中级会员

积分
407
发表于 2025-8-12 11:45:13 | 显示全部楼层
到此为止,我们就实现了不停电下载功能!

顺带点亮几颗LED!

编译过程产生的57号警告,可以关闭,方法见下图:

截图202508121145093574.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-24 09:13 , Processed in 0.121364 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表