2015-10-20
无线手柄也能稳定接收到数据了,串口方式每次返回27个字节,分析了一下只有前7个字节有用,其他20个字节都是垃圾数据。
用bushund5.0抓到的数据,确实是7字节。
以前用并行方式接收的数据只有7个,为什么用串口方式会接收到这么多垃圾数据。
2015-10-20
现在接无线鼠标已经正常,效果很好,但是接无线手柄的时候,issue_token()会返回一个错误值0x2B,但我查遍你公司有关ch375的手册上可以找到的资料都没有定义这个返回值是什么含义。有高手知道吗?
/* 主机接收usb数据操作 */
unsigned char issue_token( unsigned char endp_and_pid ) /* 执行USB事务 */
{
/* 执行完成后, 将产生中断通知单片机, 如果是USB_INT_SUCCESS就说明操作成功 */
CH375_WR_CMD( CMD_ISSUE_TOKEN );
CH375_WR_DAT( endp_and_pid ); /* 高4位目的端点号, 低4位令牌PID */
return(wait_interrupt()); /* 等待CH375操作完成 */
}
/* 主机端等待操作完成, 返回操作状态 */
unsigned char wait_interrupt(void)
{
CH375_INT_WIRE = 1;
while( CH375_INT_WIRE );
CH375_WR_CMD( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */
return( CH375_RD_DAT() );
}
2015-10-17
又有了新的问题,串口host方式连鼠标,用有线的鼠标连接,能读到鼠标数据,连接状况非常好,但换成无线鼠标连接状况却不理想,十次大概有两、三次能连上,不知道什么原因,希望路过的各位神仙能点拨下小弟。
原帖:
我用stc89C52和ch375b串行通信,一直卡在取反测试过不去,返回的值不对,我用T2定时器做串行通信的波特率,感觉是串口初始化不对,也不知道错在哪里,望大神指点一下,如果有测试过的例子,还望能提供一个,不胜感激。
硬件连接如下
C51 CH375B
P3^0(RXD) TXD
P3^1(TXD) RXD
P1^5 INT#
执行到下面代码时过不去
CH375_WR_CMD( CMD_CHECK_EXIST ); /* 测试单片机与CH375之间的通讯接口 */
CH375_WR_DAT( 0x65 );
retChar = CH375_RD_DAT( );
if ( retChar != 0x9A )
{
#ifdef ENABLE_DEBUG
SendString("CH375 test fail!\nretChar = \n"); //通过IO模拟串口向PC发送监视信息
SendHex(retChar);
#endif
while(1) //阻塞
{
flash_led(); //错误
}
}
我的串口初始化如下
void UartInit(void) /* 串行口初始化 */
{
SCON = 0xD0; //串口方式1,1个起始位,1个停止位,9位数据
T2CON = 0x30; //计数器2,T2用做发送接收时钟,作为串口波特率发生器
RCAP2H = 0xFF; //9600波特率,11.0592Mhz晶振
RCAP2L = 0 - 11059200/32/9600; /* (0xDC) 11.0592MHz晶振 */
TH2 = RCAP2H;
TL2 = RCAP2L;
TR2 = 1; //启动T2
RI = 0;
}
访问ch375b的三个基本函数如下
/* 向CH375的串口写入命令 */
void CH375_WR_CMD( unsigned char mCmd ) /* 向CH375写命令 */
{
TI = 0;
TB8 = 1;
SBUF = mCmd;
while ( TI == 0 );
}
/* 向CH375的串口写入数据 */
void CH375_WR_DAT( unsigned char mData ) /* 向CH375写数据 */
{
TI = 0;
TB8 = 0;
SBUF = mData;
while ( TI == 0 );
}
/* 通过串口从CH375读出数据 */
unsigned char CH375_RD_DAT( void )
{
while ( RI == 0 );
RI = 0;
return( SBUF );
}