[求助各位大侠]为什么我调用CH375hf5的库无法对CH375程序库和CH375芯片初始化呢??

#include #include #include"CH375HF5.h"

#define MAX_BYTE_IO 35 /* 以字节为单位单次读写文件时的最大长度,默认值是29,值大则占用内存多,值小则超过该长度必须分多次读写 */

/* 以下定义的详细说明请看CH375HF5.H文件 */ #define LIB_CFG_FILE_IO 1 /* 文件读写的数据的复制方式,0为"外部子程序",1为"内部复制" */ #define LIB_CFG_INT_EN 0 /* CH375的INT#引脚连接方式,0为"查询方式",1为"中断方式" */ #define DISK_BASE_BUF_ADDR 0x0000 /* 外部RAM的磁盘数据缓冲区的起始地址,从该单元开始的缓冲区长度为SECTOR_SIZE */ #define FILE_DATA_BUF_ADDR 0x0000 /* 外部RAM的文件数据缓冲区的起始地址,缓冲区长度不小于一次读写的数据长度,字节模式不用该缓冲区 */ #define FILE_DATA_BUF_LEN 0x0200 /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度,字节模式不用该缓冲区 */ #define NO_DEFAULT_CH375_F_ENUM 1 /* 未调用CH375FileEnumer程序故禁止以节约代码 */ #define NO_DEFAULT_CH375_F_QUERY 1 /* 未调用CH375FileQuery程序故禁止以节约代码 */ #define CH375_INT_WIRE INT0 /* P3.2, INT0, CH375的中断线INT#引脚,连接CH375的INT#引脚,用于查询中断状态 */

sbit CH375_A0 = P1^0; sbit CH375_CS = P1^1; sbit CH375_WR = P1^2; sbit CH375_RD = P1^3;

void mDelay1_2uS( ) /* 至少延时1.2uS,根据单片机主频调整 */ { return; }

void CH375_PORT_INIT( ) /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ { CH375_CS = 1; CH375_WR = 1; CH375_RD = 1; CH375_A0 = 0; P0 = 0xFF; /* 并口输入 */ }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时1uS */ P0 = mCmd; /* 向CH375的并口输出数据 */ CH375_A0 = 1; CH375_CS = 0; CH375_WR = 0; /* 输出有效写控制信号, 写CH375芯片的命令端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ CH375_WR = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; CH375_A0 = 0; P0 = 0xFF; /* 禁止数据输出 */ mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { P0 = mData; /* 向CH375的并口输出数据 */ CH375_A0 = 0; CH375_CS = 0; CH375_WR = 0; /* 输出有效写控制信号, 写CH375芯片的数据端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ CH375_WR = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; P0 = 0xFF; /* 禁止数据输出 */ mDelay1_2uS( ); /* 至少延时1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; mDelay1_2uS( ); /* 至少延时1.2uS */ P0 = 0xFF; /* 输入 */ CH375_A0 = 0; CH375_CS = 0; CH375_RD = 0; /* 输出有效写控制信号, 读CH375芯片的数据端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ mData = P0; /* 从CH375的并口输入数据 */ CH375_RD = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; return( mData ); }

/* 延时100毫秒,不精确 */ void mDelay100mS( ) { UINT8 i, j, c; for ( i = 200; i != 0; i -- ) for ( j = 200; j != 0; j -- ) c+=3; }

/* 将程序空间的字符串复制到内部RAM中,返回字符串长度 */ UINT8 mCopyCodeStringToIRAM( UINT8 idata *iDestination, UINT8 code *iSource ) { UINT8 i = 0; while ( *iDestination = *iSource ) { iDestination ++; iSource ++; i ++; } return( i ); }

/* 检查操作状态,如果错误则显示错误代码并停机 */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ printf( "Error: %02X\n", (UINT16)iError ); /* 显示错误 */ while ( 1 ) { // LED_OUT_ACT( ); /* LED闪烁 */ mDelay100mS( ); // LED_OUT_INACT( ); mDelay100mS( ); } }

/* 为printf和getkey输入输出初始化串口 */ void mInitSTDIO( ) { SCON = 0x50; PCON = 0x80; TMOD = 0x20; TH1 = 0xf3; /* 24MHz晶振, 9600bps */ TR1 = 1; TI = 1; }

main( ) { UINT8 i, month, hour; UINT16 date, adc, len; CH375_PORT_INIT( ); /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ mDelay100mS( ); /* 延时100毫秒 */ mInitSTDIO( ); /* 为了让计算机通过串口监控演示过程 */ printf( "Start\n" );

i = CH375LibInit( ); /* 初始化CH375程序库和CH375芯片,操作成功返回0 */ mStopIfError( i ); printf("i=%02x\n",i); }

环境说明:我使用的STC89C52的单片机,外围电路按照CH375官方文档中并口方式进行连接。编程用的是keil。程序是使用...\wch\ch\CH375LIB\MCS51\FILELIB5中的EXAM7,为了方便大家看,其中有很多注释掉的说明在以上程序已经省略。由于EXAM7源程序中对CS,A0,RD,WR端口与CH375官方文档中并口方式有所不同,因此对实际硬件中也和程序进行匹配修改。但是程序一直在i = CH375LibInit( );这句以上,执行不下去。串口调试输出是: Start Start Start Start . . . CH375HF.lib已经加进工程中,对库的option是:File type:C Source File,C51中,..evel是8....,...mphasis是Favour speed,下边的Don‘t use...之前的对勾已经拿掉,是想和工程中的设置一致,可是无论我怎么试,程序都不往下走。我已经纠结了很久了,在此小弟跪求各位大侠正解,谢谢了~~~

补充说明:我的CH375是买的模块的,其中只有CS,INT,A0,RD,WR,VCC,GND引出来了,单片机的晶振是24M,375模块的晶振是12M。 我若用 void CH375_INITIAL() //CH375初始化 { CH375_Write_CMD(CMD_RESET_ALL); delay10ms(); delay10ms(); delay10ms(); delay10ms(); printf("Reset Finished\n");

if(CH375_VER()<0xA2) { printf("CH375 Unsupport\n"); } CH375_Set_Mode(); } 对CH375进行初始化操作,就能成功读取CH375版本,也能成功对CH375进行硬件复位,纠结啊纠结,各位大侠,小弟跪求正解啊,急急急!!!!~~~~~~~~~~~


模块的程序你需要去下载CH375HM.ZIP,这个里面才是例子程序。


STC89C52用库肯定是不行的。52的MCU的代码空间太小。我们的库是MCU+375操作U盘的,你如果用的U盘读写模块,则不需要。


那目前我这里只有STC89C52,只需要实现查找出U盘中指定文件,然后对此文件进行删除,若不用贵公司的库,如何进行处理呢?有没有对应的子程序?


回复2楼:我的模块只是一块CH375芯片外加CH375芯片应有的外围而已,没有MCU集成


如果您是用的MCU(STC89C52)+CH375来实现的话,则需要用到库。没办法,您只能换MCU,这个MCU的资源太小,实现不了。如果不用我们的库,则需要自行编写FAT文件系统。这个工作量很大。更换54的MCU即可。


谢谢,我已经换过来了,换了个58的。


只有登录才能回复,可以选择微信账号登录