- 打卡等级:常住居民III
- 打卡总天数:172
- 最近打卡:2025-05-07 08:02:19
已绑定手机
金牌会员
- 积分
- 1201
|
发表于 2024-12-1 21:03:47
|
显示全部楼层
本帖最后由 lao4jiadian 于 2024-12-2 16:44 编辑
第5天,·实现自动下载工程不断电下载
第1种方法:向寄存器IAP_CONTR,写入0x60,即可实现不停电ISP下载。
第2种方法:使用STC-ISP下载软件发送的用户下载命令(USB项目)
把STC32G-DEMO-CODE-V9.6文件夹里的COMM复制到工程目录.
不例程:76-通过USB HID协议打印数据信息-可用于调试 文件夹复制到工程目录,参考一下.
引用头文件的简介
路径中“./”、“../”、“/”代表的含义是什么?
“./”:代表目前所在的目录。“../”:代表上一层目录。“/”:代表根目录。
#include "./COMM/stc32_stc8_usb.h"含义就是:包含本文件夹下COMM文件夹内的stc32_stc8_usb.h 头文件
书写完毕后,显示蓝色的文字的都是关键词,显示黑色的文字是我们自己定义的名字.
typedef 类型定义(重命名)
stc32_stc8_usb.h头文件里的sfr的简单认识,体会.
KEIL报错排除方法.
函数声明 函数定义与编译顺序
没发现冲哥说的设置USB时钟源的有关代码,看有用的代码好像只有一下几行,其他好像都是设置端口模式的代码.
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
把以上3行代码复制到USB初始化语句的前面,编译后测试,竟然可以了,好神奇啊!
尝试单独注释这几行代码,发现起作用的只有扩展寄存器(XFR)访问使能语句.
总结:不停电下载在STC32G单片机最小代码如下6行(注意定义的顺序):
char *USER_DEVICEDESC = NULL; //不定义会报错误L127,L128
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
EAXFR = 1; //扩展寄存器(XFR)访问使能
usb_init(); //USB初始化
EA = 1; //IE寄存器--EA 中断总开关
在反复下载的时候,咨询查看,未下载之前,ISP软件显示连接到了一个HID\VID_34BF\PID_FF01的设备,终于明白了不停电下载的实现原理.
总结`:写入以上代码后,单片机创建了一个USB_HID接口,一直连在电脑上,下载时ISP软件通过USB_HID接口发出用户命令,单片机收到信息后,复位到USB下载模式,实现不停电下载.
同理USB_CDC为虚拟串口实现的不停电下载.
|
|