CH376T 修改波特率失敗

我使用MSP430F1611控制CH376T讀寫U盤,采用默認(rèn)的9600bps控制CH376讀寫U盤正常,但是設(shè)置UART_WORK_BAUDRATE后,一直初始化錯誤。現(xiàn)在電壓為3.3V,一直查不出問題來,請大家?guī)兔ΑO旅媸俏倚薷暮蟮腢ART_HW.C文件的代碼。程序中設(shè)置的工作波特率為100000bps。

/* CH376芯片 硬件標(biāo)準(zhǔn)異步串口連接的硬件抽象層 V1.0 */

/* 提供I/O接口子程序 */


#include "msp430x14x.h"

#include"HAL.H"


#define CPU_F ((double)8000000)?

#define mDelayuS(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))?

#define mDelaymS(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))?


#define CH376_INT_WIRE ?(P4IN&BIT1) ? ?/* 假定CH376的INT#引腳,如果未連接那么也可以通過查詢串口中斷狀態(tài)碼實現(xiàn) */


#defineUART_INIT_BAUDRATE9600/* 默認(rèn)通訊波特率9600bps,建議通過硬件引腳設(shè)定直接選擇更高的CH376的默認(rèn)通訊波特率 */

#defineUART_WORK_BAUDRATE100000 ?//57600/* 正式通訊波特率57600bps */


voidCH376_PORT_INIT( void ) ?/* 由于使用異步串口讀寫時序,所以進(jìn)行初始化 */

{

/* 如果單片機只有一個串口,那么必須禁止通過串口輸出監(jiān)控信息 */

? ? ? ? ??

? P3SEL|=BIT6+BIT7; ? ?//采用UART1作為工作串口,P3.6為TXD,P3.7為RXD

? ME2|=UTXE1+URXE1;

? UCTL1|=CHAR;

? UTCTL1|=SSEL0+SSEL1;

? UBR01=0x41; ? ?//9600bps

? UBR11=0x03;

? UMCTL1=0x00;

? UCTL1&=~SWRST; ?

}


#ifdefUART_WORK_BAUDRATE

voidSET_WORK_BAUDRATE( void ) ?/* 將單片機切換到正式通訊波特率 */

{

? P3SEL|=BIT6+BIT7; ? ?//采用UART1作為工作串口,P3.6為TXD,P3.7為RXD

? ME2|=UTXE1+URXE1;

? UCTL1|=CHAR;

? UTCTL1|=SSEL0+SSEL1;

? UBR01=0x50; ? ? //100000bps

? UBR11=0x00; ?

? UMCTL1=0x00;?

? UCTL1&=~SWRST;?

}

#endif



voidxWriteCH376Cmd( UINT8 mCmd ) ?/* 向CH376寫命令 */

{

? ? while(!(IFG2&UTXIFG1));

? ? TXBUF1=SER_SYNC_CODE1; ?/* 啟動操作的第1個串口同步碼 */ ? ?

? ? while(!(IFG2&UTXIFG1));

? ? TXBUF1=SER_SYNC_CODE2; ?/* 啟動操作的第2個串口同步碼 */ ? ?

? ? while(!(IFG2&UTXIFG1));

? ? TXBUF1=mCmd; ?/* 串口輸出 */

}


voidxWriteCH376Data( UINT8 mData ) ?/* 向CH376寫數(shù)據(jù) */

{

? ? while(!(IFG2&UTXIFG1));

? ? TXBUF1=mData; ? /* 串口輸出 */

}


UINT8xReadCH376Data( void ) ?/* 從CH376讀數(shù)據(jù) */

{

UINT32i;

for ( i = 0; i < 500000; i ++ ) { ?/* 計數(shù)防止超時 */

? ? ? ? ? if(IFG2&URXIFG1)

? ? ? ? ? {

? ? ? ? ? ? return(RXBUF1);

? ? ? ? ? }

}

return( 0 ); ?/* 不應(yīng)該發(fā)生的情況 */

}


/* 查詢CH376中斷(INT#低電平) */

UINT8Query376Interrupt( void )

{

? ? UINT8 itemp;

#ifdefCH376_INT_WIRE

return( CH376_INT_WIRE ? FALSE : TRUE ); ?/* 如果連接了CH376的中斷引腳則直接查詢中斷引腳 ,如果輸入非零,返回FALSE,輸入為零,返回TRUE*/

#else

if ( IFG2&URXIFG1 ) {?

?itemp=RXBUF1;

? ? ? ? ? return( TRUE );

}

else return( FALSE );

#endif

}


UINT8mInitCH376Host( void ) ?/* 初始化CH376 */

{

UINT8res;

CH376_PORT_INIT( ); ?/* 接口硬件初始化 */

xWriteCH376Cmd( CMD11_CHECK_EXIST ); ?/* 測試單片機與CH376之間的通訊接口 */

xWriteCH376Data( 0x65 );

res = xReadCH376Data( );

if ( res != 0x9A ) return( ERR_USB_UNKNOWN ); ?/* 通訊接口不正常,可能原因有:接口連接異常,其它設(shè)備影響(片選不唯一),串口波特率,一直在復(fù)位,晶振不工作 */

? ? ? ??

#ifdefUART_WORK_BAUDRATE

xWriteCH376Cmd( CMD21_SET_BAUDRATE ); ?/* 設(shè)置串口通訊波特率 */

? ? ? ? xWriteCH376Data( 0x03 );

xWriteCH376Data( 0xc4 );

? ? ? ??

SET_WORK_BAUDRATE( ); ?/* 將單片機切換到正式通訊波特率 */

res = xReadCH376Data( );

if ( res != CMD_RET_SUCCESS ) return( ERR_USB_UNKNOWN ); ?/* 通訊波特率切換失敗,建議通過硬件復(fù)位CH376后重試 */

#endif

xWriteCH376Cmd( CMD11_SET_USB_MODE ); ?/* 設(shè)備USB工作模式 */

xWriteCH376Data( 0x06 );

res = xReadCH376Data( );

if ( res == CMD_RET_SUCCESS ) return( USB_INT_SUCCESS );

else return( ERR_USB_UNKNOWN ); ?/* 設(shè)置模式錯誤 */

}



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

按照客服的方法,已經(jīng)可以正常工作,謝謝了。方法見:

http://m.findthetime.net/bbs/thread-63195-1.html

我使用的是第一種方法。


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

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