乐此不疲 发表于 2024-7-12 09:58:21

将COMM文件夹中的文件整合到系统文件里,不用每次都复制到新工程目录下了

最近跟着冲哥的视频系统的学习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);
                                                                                       
    }
}

soma 发表于 2024-7-12 11:28:02

这样其实也不是很好,还是在工程目录里面放comm文件夹,这样复制到其它电脑上也可以轻松编译。
页: [1]
查看完整版本: 将COMM文件夹中的文件整合到系统文件里,不用每次都复制到新工程目录下了