[求助]单片机串口连接CH376 初始化失败

在插U盘上电的时候,初始化每次都能通过,

但是不插U盘初始化的时候偶尔会初始化失败,而且失败的频率比成功的频率高 s = mInitCH376Host( ); StopIfError( s );

(如果成功s的值就是 0x14 失败时为0xFA )

这是什么原因?

其他读写的功能都能实现了 就是一直存在这个问题


测试命令是否通过了? 这个现象可以这样解释。返回0XFA,明显是中断超时了。而你插入U盘后,就会产生一个插入中断。你把mInitCH376Host( );这个函数的源码贴出来看看


插着U盘每次都能成功,而不插U盘大多数都不成功 我想知道插U盘对CH376的初始化有什么影响。是硬件不够稳定的问题吗?有什么解决方法?

CH376_PORT_INIT( ); xWriteCH376Cmd( CMD11_CHECK_EXIST ); xWriteCH376Data( 0x65 ); res = xReadCH376Data( );//我做过测试 ,是因为测试这个没通过 返回0所以会返回0xFA超时

以下是程序

#define UART_WORK_BAUDRATE 57600

UINT8 mInitCH376Host( void ) { UINT8 res; CH376_PORT_INIT( ); xWriteCH376Cmd( CMD11_CHECK_EXIST ); xWriteCH376Data( 0x65 ); res = xReadCH376Data( );//我做过测试 ,是因为测试这个没通过返回超时的 if ( res != 0x9A ) return( ERR_USB_UNKNOWN ); #ifdef UART_WORK_BAUDRATE xWriteCH376Cmd( CMD21_SET_BAUDRATE ); #if UART_WORK_BAUDRATE >= 6000000/256 xWriteCH376Data( 0x03 ); xWriteCH376Data( 256 - 6000000/UART_WORK_BAUDRATE ); #else xWriteCH376Data( 0x02 ); xWriteCH376Data( 256 - 750000/UART_WORK_BAUDRATE ); #endif SET_WORK_BAUDRATE( ); res = xReadCH376Data( ); if ( res != CMD_RET_SUCCESS ) return( ERR_USB_UNKNOWN ); #endif xWriteCH376Cmd( CMD11_SET_USB_MODE ); xWriteCH376Data( 0x06 ); res = xReadCH376Data( );//这个函数超时会返回0 if ( res == CMD_RET_SUCCESS ) return( USB_INT_SUCCESS ); else return( ERR_USB_UNKNOWN ); }

//以下是针对我的w79e227单片机的串口程序22.1184MHz晶振,ch376T上电是默认的波特率 9600 //因为可以成功读写

void CH376_PORT_INIT( void ) { SCON1 = 0x50; TMOD |= 0x20; TH1 = 0xFa; TR1 = 1; ES1=0; }

#ifdef UART_WORK_BAUDRATE void SET_WORK_BAUDRATE( void ) {

TH1 = 0xff; TR1 = 1; ES1=0; } #endif


理论上来说是没有什么影响的。可能是你的硬件不稳定。 你检查一下你的硬件。另外你可以通过软件上的重试,看能否解决这个问题


是否连接U盘和是否可以成功初始化CH376没有关系, 上电延时50ms以后在初始化CH376


问题已经解决 是 电源不稳定造成的 多谢 刘工技术支持


DC-DC电路,电源务必处理好。电容太小会造成纹波很大,导致系统不稳定


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