以E:\STC32\STC32G-DEMO-CODE-V9.6-20230425\01.1-用P6口做跑马灯-入门版为例,选择C语言版本例程:
打开工程文件:sample.uvproj
build:
使用Keil之前需要先安装STC的仿真驱动。STC的仿真驱动的安装步骤如下:
首先开 STC的ISP下载软件,然后在软件右边功能区的“Keil仿真设置”页面中点击“添加型号和头文件到Keil中添加STC仿真器驱动到Keil中”按钮:
将目录定位到Keil软件的安装目录,然后确定。
头文件默认复制到Keil安装目录下的“C251\INC\STC”目录中
在C代码中使用***#include “STC32GH” //#include ***进行包含均可正确使用。
部分系统需要安装USB驱动,可在STC-ISP菜单中找到。
将板子通过USB线链接电脑,软件中选择时钟为24Mhz(程序定义):
#define MAIN_Fosc 24000000L //定义主时钟24MHZ,软件按此设置
按下P3.2按钮,此时按下并松开OFF按钮,在松开P3.2进入USB下载模式(可参考:屠龙刀-烧录-不停电下载-仿真使用说明.pdf):
裸板为下载代码时必须使用纯手动方式进行下载,之后配合代码支持,可以选择其他方式。
如果信息显示窗格内出现“单片机型号错误”,则需要重新选择争取的单片机。
在项目栏程序组上点击鼠标右键,选择"Add Existing Files to Group ‘Source Group 1’…":
在弹框里选择库文件(stc_usb_hid_32g.LIB),并添加到项目里:
添加USB调试及复位所需定义∶
//USB调试及复位所需定义
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //设置自动复位到ISP区的用户接口命令
在初始化程序里添加USB初始化及时钟源启动程序:
//USB调试及复位所需代码-----
P3M0 &= ~0x03;
P3M1 |= 0x03;
IRC48MCR = 0x80;
while (!(IRC48MCR & 0x01));
usb_init();
//-------------------------
Timer0_Init();
EUSB = 1; //IE2相关的中断位操作使能后,需要重新设置EUSB
EA = 1; //打开总中断
主循环或者中断等能够及时周期性处理程序里添加USB接收判断以及应答指令:
if (bUsbOutReady) //USB调试及复位所需代码
{
// USB_SendData(UsbOutBuffer,64); //发送数据缓冲区,长度(接收数据原样返回, 用于测试HID)
usb_OUT_done();
}
本例中的应用代码部分:
void timer0_int(void) interrupt 1 //1ms 中断函数
{
if (bUsbOutReady) //USB调试及复位所需代码
{
// USB_SendData(UsbOutBuffer,64); //发送数据缓冲区,长度(接收数据原样返回, 用于测试HID)
usb_OUT_done();
}
KeyResetScan(); //P3.2口按键触发软件复位,进入USB下载模式,不需要此功能可删除本行代码
}
注意:如果如果程序里有对IE2寄存器里USB以外的中断进行位操作使能的话,在IE2相关的中断位操作使能后,需要重新设置EUSB:
至此,配套软件代码添加完毕。
打开STC-ISP软件(V6.89E以上版本)﹐选择芯片型号、打开需要烧录的程序文件、设置好硬件选项后,切换到“收到用户命令后复位到ISP监控程序区"标签:
如下图所示,选择"USB(HID)模式",设置默认VID:34BF, PID:FF01;
设置自定义命令: @STCISP#
取消“Hex”选项,命令应与程序里的定义相同:
char *USER_STCISPCMD = "@STCISP#"; //设置自动复位到ISP区的用户接口命令
点击"发送用户自定义命令并开始下载"按钮,或者在勾选"每次下载前都先发送自定义命令”选项情况下也可点击“下载/编程"按钮开始下载。
(此步骤需要完成前两步,并将编译的程序通过手动上电复位的方式下载到芯片后才能使用)
添加按键触发功能所需定义∶
//P3.2口按键复位所需变量
bit Key_Flag;
u16 Key_cnt;
添加P3.2口按键长按1秒触发软件复位,进入USB下载模式函数:
//========================================================================
// 函数: 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;
}
}
在1ms 周期性执行的中断或者主循环里调用按键扫描函数:
while (1)
{
KeyResetScan();
delay_ms(1);
}
或者:
void timer0_int(void) interrupt 1 //1ms 中断函数
{
KeyResetScan(); //P3.2口按键触发软件复位,进入USB下载模式,不需要此功能可删除本行代码
}
完成以上步骤并将编译的程序通过手动上电复位的方式下载到芯片一次以后,就可通过长按P3.2口按键方式自动触发进入USB下载模式(切换到“收到用户命令后复位到ISP监控程序区"标签):
选择USB-CDC/串口模式,点击“发送用户自定义命令并开始下载”或者“下载/编程”即可下载程序。
注意,需要将“收到用户命令后复位到ISP监控程序区"标签的设置,切换到"串口模式"或者取消“每次下载前都先发送自定义命令"选项,然后再点击“下载/编程"按钮开始下载。