YangHY 发表于 2025-12-30 09:03:12

我们先总结一下不停电下载功能:

我们结合“擎天柱”的流水灯程序来看:


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的范例程序
实现一个流水灯,主要是体现不停地下载!

YangHY 发表于 2025-12-30 09:19:15

我们可以比较 直接下载和按钮重启下载的效果:

A 下载文件,STC官网-软件工程-函数库-USB库函数

B 移植关键代码和文件到工程

C添加头文件.lab和.h

DUSB初始化函数

E复制命令参数

F开中断等寄存器

实际完成这几步,就可以实现不停电下载!

上面的流水灯程序,其实实现流水灯的语句很少,大部分是准备好USB不停电下载

其实我慢慢看了一下,关键点在首先把USB转换为CDC双串口,然后在控制相关电路来完成MCU

状态的转换(实际上很可能很短的停电状态是有的,原因是我仔细看了供电电路,是有三极管控制的)

不过不用人工控制!

YangHY 发表于 2025-12-30 09:28:19

接着看李工的USB-CDC串口之printf函数的实现;

实际理论真没怎么掌握,现在是第二次回顾,还是只能跟着做.......

李工介绍的库文件和范例程序,我早已经下载好了

查询方式和中断方式都是跟着李工再走一次!






YangHY 发表于 2025-12-30 09:38:38

跟着我们来学习AiCube:

首先下载最新版的STC的ISP,接着把头文件和型号添加到Keil 里去:

直到出现成功画面:

YangHY 发表于 2025-12-30 09:52:26

点击AiCube,点击新建:


YangHY 发表于 2025-12-30 09:56:29

我们现在的芯片,就比李工的多出来很多:

包括最新的STC32G144K246

后一个截图是李工的:

YangHY 发表于 2025-12-30 10:05:06

基本是囊括了STC近20年的主力型号

本次我们选Ai8051U32Bit

自己起个名字,选好保存路径

项目类型,我们先选单文件

按确定,进入AiCube

YangHY 发表于 2025-12-30 10:10:32

在图形化I/O口配置下

可以用鼠标的左右键,来设置管脚的状态和功能:


YangHY 发表于 2025-12-30 10:13:12

当然,管脚设置要想生效,必须在对应的端口选择中选中:

仔细看下图:

YangHY 发表于 2025-12-30 10:14:27

第二项是图形化时钟配置:

李工建议,新手不要动这里,选择默认即可


页: 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49 50 51 52 53 54
查看完整版本: 第一课 序言《AI8051U的特点》