最近跟着冲哥的视频系统的学习STC32G单片机编程,我的keil5和实验工程文件夹都在D盘,使用复制粘贴例程的方法建立了自己的工程,结果编译失败提示:LED.c(39): error C318: can't open file '../comm/STC32G.h' LED.c(40): error C318: can't open file '../comm/usb.h';后来发现例程文件夹中有一个“COMM”文件夹,文件夹中有如下文件:
为了以后编程方便,我将这两个.LIB文件移到了keil5的根目录下C251文件下的LIB文件夹里,因为安装软件时已经通过STC-ISP软件添加了STC头文件,系统中的INC文件中已经有了STC32G.H头文件,再将这里的USB.H移到这个STC头文件夹下就可以了,为了日后编程根据方便索性再修改一下这两个头文件并且重新做了一个.h文件,方法如下:
1.剪切/粘贴USB.H文件中的如下内容到STC32.H中:
typedef bit BOOL;
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned int ushort;
typedef unsigned long ulong;
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
2.添加如下内容到STC32G.H中:
//以下为自定义设置、将所有I/O配置为准双向口
#define GPIO_set() do{\
P0M0 = 0x00;\
P0M1 = 0x00;\
P1M0 = 0x00;\
P1M1 = 0x00;\
P2M0 = 0x00;\
P2M1 = 0x00;\
P3M0 = 0x00;\
P3M1 = 0x00;\
P4M0 = 0x00;\
P4M1 = 0x00;\
P5M0 = 0x00;\
P5M1 = 0x00;\
P6M0 = 0x00;\
P6M1 = 0x00;\
P7M0 = 0x00;\
P7M1 = 0x00;\
}while(0)
3.在USB.H中调用STC32G.H头文件:(我已经将USB.H更名为STC_USB.H了)
#ifndef __STC_USB_H__
#define __STC_USB_H__
#include <STC32G.h>//引用一些变量名称的宏定义
//使用串口“printf”打印信息需屏蔽以下两个定义
//#define PRINTF_SEGLED //printf输出重定向到ISP下载软件中的7段数码管
//#define PRINTF_HID //printf输出直接重定向到USB HID接口
#ifndef NULL
#define NULL ((void *) 0)
#endif
#define DEVSTATE_ATTACHED 0
#define DEVSTATE_POWERED 1
#define DEVSTATE_DEFAULT 2
#define DEVSTATE_ADDRESS 3
#define DEVSTATE_CONFIGURED 4
#define DEVSTATE_SUSPENDED 5
void usb_init();
void usb_IN(); //USB HID
void usb_IN(WORD size); //USB CDC
void usb_OUT_done();
void USB_SendData(BYTE *dat, int size);
BOOL usb_OUT_callback(); //包含中断模式的CDC库时,需要编写此回调函数代码,查询模式则不需要
int SEG7_ShowString(const char *fmt, ...);
void
4.重新做一个头文件如下:
STC32G_USB.H:
#ifndef __STC32G_USB_H__
#define __STC32G_USB_H__
#include <STC32G.H>
#include <STC_USB.H>
//USB调试及复位所需定义
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";//设置自动复位到ISP区的用户接口命令
#endif
通过以上整改,如果新建工程有用到usb功能就调用这个STC32G_USB.H,否则就调用STC32G.H,这样就会使新编的程序简洁明了很多,也不用每次都复制COMM文件夹了,折腾这些源于有兴趣、有闲工夫,至于多少使用价值我就不知道了只当是消闲了。下面是我的第一个STC32G的程序:
- #include <STC32G_USB.h> //此头文件包含stc_usb.h
- #include "delay.h"
-
- #define MAIN_Fosc 24000000L //定义主时钟
-
- void main(void)
- {
- WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
- EAXFR = 1; //扩展寄存器(XFR)访问使能
- CKCON = 0; //提高访问XRAM速度
- RSTFLAG |= 0x04; //设置硬件复位后需要检测P3.2的状态选择运行区域,否则硬件复位后进入USB下载模式
- GPIO_set();//配置所有I/O口为准双向口
- usb_init();
- EA = 1; //打开总中断
- while(1)
- {
- P20 = 0;
- delay_ms(250);
- P20 = 1;
- delay_ms(250);
-
- }
- }
复制代码
|