我们先总结一下不停电下载功能:
我们结合“擎天柱”的流水灯程序来看:
USB 不停电下载的实现原理,以及相关的硬件电路和软件编程。这种下载方式无需频繁给单片机上电断电,大大提高了开发效率,减少了开发过程中的
等待时间。
1.下载以下两个库文件到main.c路径相同。
2.添加头文件及其代码如下。
#include "ai8051u.h" //调用头文件
#include "stc32_stc8_usb.h" //调用头文件
//注意:擎天柱的LED端口在P2,注意和试验箱不同没有三极管的电源控制,所以只要控制P2端口即可,本节课程的其余内容(USB不停电下载)均通用!
char *USER_DEVICEDESC = NULL; //这3行就是启动USB转CDC及不停电下载
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void)
{unsigned char i;
P_SW2 |= 0x80; //B7位写1,使能访问XFR
P0M1 = 0x00; P0M0 = 0x00;
P1M1 = 0x00; P1M0 = 0x00;
P2M1 = 0x00; P2M0 = 0x00;
P3M1 = 0x00; P3M0 = 0x00;
P4M1 = 0x00; P4M0 = 0x00;
P5M1 = 0x00; P5M0 = 0x00;
P6M1 = 0x00; P6M0 = 0x00;
P7M1 = 0x00; P7M0 = 0x00;
usb_init(); //USB CDC 接口配置,做好USB转CDC串口工作
IE2 |= 0x80; //使能USB中断
EA = 1; //IE |= 0X80;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while(1)
{
if (bUsbOutReady)
{
USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done();
}
for(i=0;i<8;i++) //实现流水灯
{
P2=~(0X01<<i);
Delaynms(1000);
}
}
}
其中usb_init(); //USB CDC 接口配置,直接使用STC的范例程序
实现一个流水灯,主要是体现不停地下载!
我们可以比较 直接下载和按钮重启下载的效果:
A 下载文件,STC官网-软件工程-函数库-USB库函数
B 移植关键代码和文件到工程
C添加头文件.lab和.h
DUSB初始化函数
E复制命令参数
F开中断等寄存器
实际完成这几步,就可以实现不停电下载!
上面的流水灯程序,其实实现流水灯的语句很少,大部分是准备好USB不停电下载
其实我慢慢看了一下,关键点在首先把USB转换为CDC双串口,然后在控制相关电路来完成MCU
状态的转换(实际上很可能很短的停电状态是有的,原因是我仔细看了供电电路,是有三极管控制的)
不过不用人工控制!
接着看李工的USB-CDC串口之printf函数的实现;
实际理论真没怎么掌握,现在是第二次回顾,还是只能跟着做.......
李工介绍的库文件和范例程序,我早已经下载好了
查询方式和中断方式都是跟着李工再走一次!
跟着我们来学习AiCube:
首先下载最新版的STC的ISP,接着把头文件和型号添加到Keil 里去:
直到出现成功画面:
点击AiCube,点击新建:
我们现在的芯片,就比李工的多出来很多:
包括最新的STC32G144K246
后一个截图是李工的:
基本是囊括了STC近20年的主力型号
本次我们选Ai8051U32Bit
自己起个名字,选好保存路径
项目类型,我们先选单文件
按确定,进入AiCube
在图形化I/O口配置下
可以用鼠标的左右键,来设置管脚的状态和功能:
当然,管脚设置要想生效,必须在对应的端口选择中选中:
仔细看下图:
第二项是图形化时钟配置:
李工建议,新手不要动这里,选择默认即可