CH375B總是初始化失敗,返回值0x51

使用STM32串口操作CH375BUSB主機(jī),一直初始化不成功,返回0x51.主要函數(shù)如下:

void CH375_WR_CMD_PORT( unsigned char cmd ) {??
?short cmd_data=0;
?delay2us();
?cmd_data=cmd+0x0100;
?USART_SendData( USART2, cmd_data);
?while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);?
?delay2us();
}

void CH375_WR_DAT_PORT( unsigned char dat ) {
?USART_SendData( USART2, dat);
?while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);??
//?delay1us();?
}

unsigned char CH375_RD_DAT_PORT() {?
?delay_us(1);
?while(USART_GetITStatus? (USART2, USART_IT_RXNE) == SET){}
?return(? USART_ReceiveData(USART2));
}

unsigned char wait_interrupt() {
?char i=0;
?while( KEY2 !=0 ){}?
?CH375_WR_CMD_PORT( CMD_GET_STATUS );?
?i=CH375_RD_DAT_PORT();

?return( i );
}

初始化函數(shù)如下:

void CH375_init() {
?unsigned char i=0,RD_Data=0,k=0;
?delay_ms(500);
?uart2_init(9600);
?for( k=100; k!=0; k-- )
?{
?CH375_WR_CMD_PORT( CMD_CHECK_EXIST )
;
?i = 0x5A;
?CH375_WR_DAT_PORT( i );?
?i = ~i;?
?RD_Data = CH375_RD_DAT_PORT();?????????
此處返回值正確
?printf("%d \n",RD_Data);
?if ( RD_Data != i )?
?{
??for ( i=5; i!=0; i-- )
??{
???CH375_WR_CMD_PORT( CMD_RESET_ALL );?
??}
??delay_ms(50);?
?}
?else break;
?}

?do
?{
??delay_ms(10);?
??i=set_usb_mode( 6 );??????????
此處返回值正確,設(shè)置成功?
??printf("%d ok \r\n",i);?
?}while(i==0);
?while(1)
?{?
??while ( wait_interrupt()!=USB_INT_CONNECT );?

此處一直通不過,wait_interrupt()一直返回的是0x51,只有當(dāng)USB設(shè)備拔出的瞬間才會(huì)返回0x15;


電路圖如下,其中V3和Vcc有短路,只使用了INT#、TXD、RXD三個(gè)腳。USB的D+和D-也沒有接錯(cuò)。


image.png


請(qǐng)麻煩檢查下哪里有問題,萬(wàn)分感謝!



熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

while(USART_GetITStatus? (USART2, USART_IT_RXNE) == SET){}
這里是不是有問題?



這條沒有問題啊,就算改成while(USART_GetITStatus? (USART2, USART_IT_RXNE) != RESET){}或者if(USART_GetITStatus? (USART2, USART_IT_RXNE) == RESET)都是一樣的

很奇怪的是當(dāng)我拔出設(shè)備的時(shí)候就能成功返回USB_INT_CONNECT

用示波器看的話INT#腳有兩次低電平,第一次時(shí)間較長(zhǎng),第二次時(shí)間較短,間隔幾個(gè)ms


參考一下底層串口寫法:

? * Function Name? : CH375_WR_CMD_PORT
? * Description??? : 寫命令
? * Input????????? : 命令碼
? * Return???????? : None
? */
void CH375_WR_CMD_PORT( unsigned char cmd )//第9位=1
?{
?USART_SendData(UART2_UART, (uint16_t)cmd|0x0100);
?while(USART_GetFlagStatus(UART2_UART,USART_FLAG_TXE)==RESET);
?mDelay1us(5);
}

/**
? * Function Name? : CH375_WR_DAT_PORT
? * Description??? : 寫數(shù)據(jù)
? * Input????????? : 數(shù)據(jù)
? * Return???????? : None
? */
void CH375_WR_DAT_PORT( unsigned char dat ) //第9位=0
{
?USART_SendData(UART2_UART, (uint16_t)dat);
?while(USART_GetFlagStatus(UART2_UART,USART_FLAG_TXE)==RESET);
?mDelay1us(5);
}

/**
? * Function Name? : CH375_RD_DAT_PORT
? * Description??? : 讀數(shù)據(jù)
? * Input????????? : None
? * Return???????? : 數(shù)據(jù)
? */
unsigned char CH375_RD_DAT_PORT(void)
{
?mDelay1us(5);
?while(USART_GetFlagStatus(UART2_UART,USART_FLAG_RXNE)==RESET);
?
?return( (uint8_t)USART_ReceiveData(UART2_UART) );
}


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频