|
发表于 2023-10-17 19:01:03
|
显示全部楼层
本帖最后由 STC89C51 于 2023-10-21 14:23 编辑
.
第四集:建立工程点亮第一颗LED下
.......................................................
5.15
用户程序复位到系统区进行 USB 模式 ISP 下载的方法(不停电)
1、下载最新版本的 STC-ISP 下载软件
2、选择正确的单片机型号
3、打开“收到用户命令后复位到 ISP 监控程序区”选项页
4、选择“USB(HID)模式”,并设置 USB 设备的 VID 和 PID,STC 提供的范例中的 VID 为“34BF”,
PID 为“FF01”
5、选择 HEX 模式或者文本模式
6、设置自定义下载命令,需要和代码中的自定义命令相一致
7、选择上这两项,当目标代码重新编译后,STC-ISP 下载软件便会自动发送复位命令,并自动开始
USB 模式的 ISP 下载
注意:若需要使用此模式,则必须将 STC 提供的“stc_usb_hid.lib”代码库添加到项目中,并按照下
图所示的方式设置自定义下载命令。
..........................................................................................
编写代码程序 USB-HID模式 DEMO.rar 压缩包文件
#include "COMM/stc.h"
#include "COMM/usb.h"
#define MAIN_Fosc 24000000L //¶¨ÒåÖ÷ʱÖÓ
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //ÉèÖÃ×Ô¶¯¸´Î»µ½ISPÇøµÄÓû§½Ó¿ÚÃüÁî
void sys_init()
{
WTST = 0; //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È
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 ³õʼ»¯ ======
P3M0 &= ~0x03;
P3M1 |= 0x03;
IRC48MCR = 0x80;
while (!(IRC48MCR & 0x01));
USBCLK = 0x00;
USBCON = 0x90;
//========================
}
//========================================================================
// º¯Êý: void delay_ms(u8 ms)
// ÃèÊö: ÑÓʱº¯Êý¡£
// ²ÎÊý: ms,ÒªÑÓʱµÄmsÊý, ÕâÀïÖ»Ö§³Ö1~255ms. ×Ô¶¯ÊÊÓ¦Ö÷ʱÖÓ.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2021-3-9
// ±¸×¢:
//========================================================================
void delay_ms(u8 ms)
{
u16 i;
do{
i = MAIN_Fosc / 6000;
while(--i); //6T per loop
}while(--ms);
}
sfr P4 = 0XC0;
sfr P4M1 = 0XB3;
sfr P4M0 = 0XB4;
sfr P6 = 0XE8;
sfr P6M1 = 0XCB;
sfr P6M0 = 0XCC;
sbit P40 = P4^0;
sbit P60 = P6^0;
void main()
{
P6M0 = 0X00;
P6M1 = 0X00;
P4M1 = 0X00;
P4M0 = 0X00;
P6M1 = 0X00;
P6M0 = 0X00;
sys_init();
usb_init();
EA = 1;
while(1)
{
P40 = 0;
P60 = 0;
}
}
.................................................................................
程序代码编译
0错误 0警告
Rebuild target 'Target 1'
compiling main.c...
linking...
Program Size: data=8.3 edata+hdata=404 xdata=192 const=39 code=6792
creating hex file from ".\Objects\DEMO"...
".\Objects\DEMO" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:00
..................................................................................................
编写代码程序 USB-CDC 串口模式 1.LED.rar 压缩包文件
#include "COMM/stc.h"
#include "COMM/usb.h"
#define MAIN_Fosc 24000000L //¶¨ÒåÖ÷ʱÖÓ
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //ÉèÖÃ×Ô¶¯¸´Î»µ½ISPÇøµÄÓû§½Ó¿ÚÃüÁî
void sys_init()
{
WTST = 0; //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È
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 ³õʼ»¯ ======
P3M0 &= ~0x03;
P3M1 |= 0x03;
IRC48MCR = 0x80;
while (!(IRC48MCR & 0x01));
USBCLK = 0x00;
USBCON = 0x90;
//========================
}
//========================================================================
// º¯Êý: void delay_ms(u8 ms)
// ÃèÊö: ÑÓʱº¯Êý¡£
// ²ÎÊý: ms,ÒªÑÓʱµÄmsÊý, ÕâÀïÖ»Ö§³Ö1~255ms. ×Ô¶¯ÊÊÓ¦Ö÷ʱÖÓ.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2021-3-9
// ±¸×¢:
//========================================================================
void delay_ms(u8 ms)
{
u16 i;
do{
i = MAIN_Fosc / 6000;
while(--i); //6T per loop
}while(--ms);
}
sfr P4 = 0XC0;
sfr P4M1 = 0XB3;
sfr P4M0 = 0XB4;
sfr P6 = 0XE8;
sfr P6M1 = 0XCB;
sfr P6M0 = 0XCC;
sbit P40 = P4^0;
sbit P60 = P6^0;
void main()
{
P6M0 = 0X00;
P6M1 = 0X00;
P4M1 = 0X00;
P4M0 = 0X00;
P6M1 = 0X00;
P6M0 = 0X00;
sys_init();
usb_init();
EA = 1;
while(1)
{
P40 = 0;
P60 = 0;
}
}
.................................................................................
程序代码编译
0错误 0警告
Rebuild target 'Target 1'
compiling main.c...
linking...
Program Size: data=8.3 edata+hdata=420 xdata=192 const=44 code=7024
creating hex file from ".\Objects\DEMO"...
".\Objects\DEMO" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:01
.................................................................................
.................................................................................
USB-CDC 串口模式 编写代码程序 2.LED.rar 压缩包文件
/************* ¹¦ÄÜ˵Ã÷ **************
±¾Àý³Ì»ùÓÚSTC32GºËÐÄת½Ó°å£¨ÍÀÁúµ¶£©½øÐбàд²âÊÔ¡£
ʹÓÃUSBÏßÁ¬½ÓºËÐİåUSB½Ó¿ÚÓëµçÄÔ;
MCUͨ¹ýUSB CDC(Communication Device Class)ÐÒéʶ±ðΪ´®¿ÚÉ豸;
ʹÓô®¿ÚÖúÊÖ´ò¿ªCDCÐéÄâ´®¿Ú£¬È»ºóÏòMCU·¢ËÍÊý¾Ý£¬MCU·µ»Ø½ÓÊÕµ½µÄÊý¾Ýµ½´®¿ÚÖúÊÖ;
Êý¾Ý³¤¶ÈÏÞÖÆÔÚ63×Ö½ÚÒÔÄÚ¡£
´ËÍâ³ÌÐòÑÝʾÁ½ÖÖ¸´Î»½øÈëUSBÏÂÔØÄ£Ê½µÄ·½·¨£º
1. ͨ¹ýÿ1ºÁÃëÖ´ÐÐÒ»´Î¡°KeyResetScan¡±º¯Êý£¬ÊµÏÖ³¤°´P3.2¿Ú°´¼ü´¥·¢MCU¸´Î»£¬½øÈëUSBÏÂÔØÄ£Ê½¡£
(Èç¹û²»Ï£Íû¸´Î»½øÈëUSBÏÂÔØÄ£Ê½µÄ»°£¬¿ÉÔÚ¸´Î»´úÂëÀォ IAP_CONTR µÄbit6Çå0£¬Ñ¡Ôñ¸´Î»½øÓû§³ÌÐòÇø)
2. ͨ¹ý¼ÓÔØ¡°stc_usb_cdc_32g.lib¡±¿âº¯Êý£¬ÊµÏÖʹÓÃSTC-ISPÈí¼þ·¢ËÍÖ¸Áî´¥·¢MCU¸´Î»£¬½øÈëUSBÏÂÔØÄ£Ê½²¢×Ô¶¯ÏÂÔØ¡£
(×¢Ò⣺ʹÓÃCDC½Ó¿Ú´¥·¢MCU¸´Î»²¢×Ô¶¯ÏÂÔØ¹¦ÄÜ£¬ÐèÒª¹´Ñ¡¶Ë¿ÚÉèÖãºÏ´ÎÇ¿ÖÆÊ¹Óá±STC USB Writer (HID)¡±½øÐÐISPÏÂÔØ)
ÏÂÔØÊ±, Ñ¡ÔñʱÖÓ 24MHZ (Óû§¿É×ÔÐÐÐÞ¸ÄÆµÂÊ)¡£
******************************************/
#include "stc.h"
#include "usb.h"
#define MAIN_Fosc 24000000L //¶¨ÒåÖ÷ʱÖÓ
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //ÉèÖÃ×Ô¶¯¸´Î»µ½ISPÇøµÄÓû§½Ó¿ÚÃüÁî
//P3.2¿Ú°´¼ü¸´Î»ËùÐè±äÁ¿
bit Key_Flag;
u16 Key_cnt;
void sys_init();
void delay_ms(u8 ms);
void KeyResetScan(void);
sfr P4 = 0XC0;
sfr P4M1 = 0XB3;
sfr P4M0 = 0XB4;
sfr P6 = 0XE8;
sfr P6M1 = 0XCB;
sfr P6M0 = 0XCC;
sbit P40 = P4^0;
sbit P60 = P6^0;
void main()
{
sys_init(); //ϵͳ³õʼ»¯
usb_init(); //USB CDC ½Ó¿ÚÅäÖÃ
EA = 1;
{
P6M0 = 0X00;
P6M1 = 0X00;
P4M1 = 0X00;
P4M0 = 0X00;
P6M1 = 0X00;
P6M0 = 0X00;
sys_init();
usb_init();
EA = 1;
while(1)
{
P40 = 0;
P60 = 0;
}
}
while (1)
{
delay_ms(1);
KeyResetScan(); //³¤°´P3.2¿Ú°´¼ü´¥·¢Èí¼þ¸´Î»£¬½øÈëUSBÏÂÔØÄ£Ê½£¬²»ÐèÒª´Ë¹¦ÄÜ¿Éɾ³ý±¾ÐдúÂë
if(DeviceState != DEVSTATE_CONFIGURED) //µÈ´ýUSBÍê³ÉÅäÖÃ
continue;
if (bUsbOutReady)
{
usb_OUT_done(); //½ÓÊÕÓ¦´ð£¨¹Ì¶¨¸ñʽ£©
printf("OutNumber=0x%X\r\n",OutNumber); //ʹÓà printf º¯Êý´òÓ¡½ÓÊÕÊý¾Ý³¤¶È
memcpy(UsbInBuffer, UsbOutBuffer, OutNumber); //½«½ÓÊÕÊý¾Ý(UsbOutBuffer)£¬¸´ÖƵ½·¢ËÍ»º³åÇø(UsbInBuffer)
usb_IN(OutNumber); //Ô··µ»Ø, ÓÃÓÚ²âÊÔ
}
}
}
void sys_init()
{
WTST = 0; //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È
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 ³õʼ»¯ ======
P3M0 &= ~0x03;
P3M1 |= 0x03;
IRC48MCR = 0x80;
while (!(IRC48MCR & 0x01));
USBCLK = 0x00;
USBCON = 0x90;
//========================
}
//========================================================================
// º¯Êý: void delay_ms(u8 ms)
// ÃèÊö: ÑÓʱº¯Êý¡£
// ²ÎÊý: ms,ÒªÑÓʱµÄmsÊý, ÕâÀïÖ»Ö§³Ö1~255ms. ×Ô¶¯ÊÊÓ¦Ö÷ʱÖÓ.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2021-3-9
// ±¸×¢:
//========================================================================
void delay_ms(u8 ms)
{
u16 i;
do{
i = MAIN_Fosc / 6000;
while(--i); //6T per loop
}while(--ms);
}
//========================================================================
// º¯Êý: void KeyResetScan(void)
// ÃèÊö: P3.2¿Ú°´¼ü³¤°´1Ãë´¥·¢Èí¼þ¸´Î»£¬½øÈëUSBÏÂÔØÄ£Ê½¡£
// ²ÎÊý: none.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2022-6-11
// ±¸×¢:
//========================================================================
void KeyResetScan(void)
{
if(!P32)
{
if(!Key_Flag)
{
Key_cnt++;
if(Key_cnt >= 1000) //Á¬Ðø1000msÓÐЧ°´¼ü¼ì²â
{
Key_Flag = 1; //ÉèÖð´¼ü״̬£¬·ÀÖ¹ÖØ¸´´¥·¢
USBCON = 0x00; //Çå³ýUSBÉèÖÃ
USBCLK = 0x00;
IRC48MCR = 0x00;
delay_ms(10);
IAP_CONTR = 0x60; //´¥·¢Èí¼þ¸´Î»£¬´ÓISP¿ªÊ¼Ö´ÐÐ
while (1);
}
}
}
else
{
Key_cnt = 0;
Key_Flag = 0;
}
}
..................................................................................................
程序代码编译
0错误 0警告
Rebuild target 'Target 1'
compiling main.c...
linking...
Program Size: data=8.4 edata+hdata=417 xdata=192 const=61 code=6982
creating hex file from ".\obj\stc_usb_ser"...
".\obj\stc_usb_ser" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:01
...........................................................................................
.
|
|