tohturusul 发表于 2023-8-30 10:33:41

usb不停电下载

stc32的不停电下载模式(这个必要)
[*]设计方案:第一步:去官方下载USB的资源官方下载地址: https://www.stcai.com/Customer/FileDownloadVerifyPass?fileid=656048下载完成后后面的步骤按官方文档来设置。下面给大家提供实现代码:
[*]代码
[*]// 头文件
#include "stc32g.h"         //stc32g头文件
#include "stc32_stc8_usb.h"

// USB 不停电自动下载必要的代码
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";                        //不停电自动ISP下载命令

void sys_init();                        // 设置为准双向口函数的声明
void delay_ms(u8 ms);                // 延时函数的声明

//主函数
void main()
{
    sys_init();          // USB函数
    usb_init();         // USB初始化
    EUSB = 1;         // 使用USB中断
    EA = 1;

    while (DeviceState != DEVSTATE_CONFIGURED);         //等待 USB 完成配置
    while (1)
    {
      delay_ms(2);
      if (bUsbOutReady)//判断时候生成虚拟端口
      {
            USB_SendData(UsbOutBuffer,OutNumber);
            usb_OUT_done();
      }
    }
}


// 准双向口函数
void sys_init()
{
    WTST = 0;
    CKCON = 0;
    EAXFR = 1;

    P0M1 = 0;        P0M0 = 0;        //设置为准双向口
    P1M1 = 0;        P1M0 = 0;        //设置为准双向口
    P2M1 = 0;        P2M0 = 0;        //设置为准双向口
    P3M1 = 0;        P3M0 = 0;        //设置为准双向口
    P4M1 = 0;        P4M0 = 0;        //设置为准双向口
    P5M1 = 0;        P5M0 = 0;        //设置为准双向口
    P6M1 = 0;        P6M0 = 0;        //设置为准双向口
    P7M1 = 0;        P7M0 = 0;        //设置为准双向口
//    P3.0/P3.1和USB的D-/D+共用PIN脚,需要将P3.0/P3.1设置为高祖输入模式
    P3M0 &= ~0X03;
    P3M1 |= 0X03;

    IRC48MCR = 0X80;
    while (!(IRC48MCR & 0X01));
    USBCLK = 0X00;
    USBCON = 0X90;
}

//延时函数
void delay_ms(u8 ms)
{
    u16 i;
    do {
      i = MAIN_Fosc / 6000;
      while (--i);
    } while (--ms);
}




页: [1]
查看完整版本: usb不停电下载