[求助]CH375B初始化

#include "stc12c5a60s2.h" #include "ch375hf5.h"

typedef unsigned char u8; typedef unsigned int u16;

#define UINT8 u8 #define UINT16 u16

void Delay_ms(u16 z) // { u16 x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

void Uart1_Init(void) // { AUXR = 0x11; SCON = 0X50; BRT = 0XFD; PCON &= 0X7F; ES = 0; EA = 0; }

void Uart2_Init(void) // { S2CON = 0XD0; BRT = 0XFD; IE2&=0xFE; EA = 0; }

void Send_Byte(u8 cmd) // { SBUF=cmd; while(!TI); TI=0; }

void Send_String(u8 *pbuf) { while(*pbuf !='\0') { Send_Byte(*pbuf++); } }

void xWriteCH375Cmd( UINT8 mCmd ) // { S2CON |=0x08; S2BUF = mCmd; while (( S2CON&0x02) == 0 ); S2CON &=0xFD; }

void xWriteCH375Data( UINT8 mData )// { S2CON &=0xF7; S2BUF = mData; while (( S2CON&0x02) == 0 ); S2CON &=0xFD; }

UINT8 xReadCH375Data( void ) // { while ( (S2CON&0x01) == 0); S2CON&=0xFE; return( S2BUF ); }

void main(void) { u8 i=1; Uart1_Init(); Uart2_Init(); Delay_ms(100); Send_String("准备初始化"); i=CH375LibInit(); if(i == 0) Send_String("初始化成功"); else Send_String("初始化失败"); for(;;) { ; } } 一直卡在初始化那里,CH375Hf5.h和CH375Hf5.lib都添加了 疑问,库函数怎么知道我使用的是串行方式

USB工作模式在哪里设置呢?


你使用我们CH375库的话,设置USB工作模式在i=CH375LibInit();里面实现,库会调用程序中的接口函数。你可以在库初始化之前做一下测试命令check_exsit,验证串口的准确性。


xWriteCH375Cmd(CMD_CHECK_EXIST); xWriteCH375Data(0x11); i=xReadCH375Data();

i是不是等于0xEE


数据取反是正常的,就是初始化过不去


初始化函数返回0,说明初始化成功了啊。


如果i=CH375LibInit();返回0说明单片机与CH375通讯正常,库初始化成功。那你下面CH375DiskReady通过了吗?


程序一直卡在这条语句上面 if ( CH375DiskReady( ) == ERR_SUCCESS )

我采用的是查询法,那么在程序开始定义了端口号 sbit CH375_INT_WIRE = P1^5;


试了两个U盘,长城的U盘不会卡死,但是查询U盘CH375DiskReady( )不成功;另一个金士顿U盘,直接卡死在if ( CH375DiskReady( ) == ERR_SUCCESS ) 这条语句上面


长城的U盘CH375DiskReady()过了之后能正常进行文件的创建和读写吗?另外有的U盘CH375DiskReady()总是返回为准备好,你可以参考我们的例程,每隔100ms查询一次,查个5-6次的如果还是不过就直接跳过这条命令,看看后面的操作正不正常。


那你CH375DiskConnect( )有没有通过?CH375DiskReady( ) 按照下面的步骤做,返回值是多少? for ( i = 0; i < 5; i ++ ) { /* 有的U盘总是返回未准备好,不过可以被忽略 */ mDelay100mS( ); printf( "Ready ?\n" ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查询磁盘是否准备好*/ }


CH375DiskConnect( )都可以通过的。 H375DiskReady( )返回的是0x2C


mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/MY_ADC.TXT" ); i = CH375FileOpen( ); i还是等于0x2C


你在CH375DiskReady( ) 之前加上设置模式的命令试一下: for ( i = 0; i < 5; i ++ ) { /* 有的U盘总是返回未准备好,不过可以被忽略 */ mDelay100mS( ); printf( "Ready ?\n" ); xWriteCH375Cmd( CMD_SET_USB_MODE ); xWriteCH375Data( 0x06 ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查询磁盘是否准备好*/ }


不行, CH375DiskReady( )返回的值是0x82


中断引脚我自己配置一个IO口可以吗(查询法)


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