CH376T 修改波特率失败

我使用MSP430F1611控制CH376T读写U盘,采用默认的9600bps控制CH376读写U盘正常,但是设置UART_WORK_BAUDRATE后,一直初始化错误。现在电压为3.3V,一直查不出问题来,请大家帮忙。下面是我修改后的UART_HW.C文件的代码。程序中设置的工作波特率为100000bps。

/* CH376芯片 硬件标准异步串口连接的硬件抽象层 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#引脚,如果未连接那么也可以通过查询串口中断状态码实现 */


#defineUART_INIT_BAUDRATE9600/* 默认通讯波特率9600bps,建议通过硬件引脚设定直接选择更高的CH376的默认通讯波特率 */

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


voidCH376_PORT_INIT( void )  /* 由于使用异步串口读写时序,所以进行初始化 */

{

/* 如果单片机只有一个串口,那么必须禁止通过串口输出监控信息 */

          

  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写数据 */

{

    while(!(IFG2&UTXIFG1));

    TXBUF1=mData;   /* 串口输出 */

}


UINT8xReadCH376Data( void )  /* 从CH376读数据 */

{

UINT32i;

for ( i = 0; i < 500000; i ++ ) {  /* 计数防止超时 */

          if(IFG2&URXIFG1)

          {

            return(RXBUF1);

          }

}

return( 0 );  /* 不应该发生的情况 */

}


/* 查询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 );  /* 通讯接口不正常,可能原因有:接口连接异常,其它设备影响(片选不唯一),串口波特率,一直在复位,晶振不工作 */

        

#ifdefUART_WORK_BAUDRATE

xWriteCH376Cmd( CMD21_SET_BAUDRATE );  /* 设置串口通讯波特率 */

        xWriteCH376Data( 0x03 );

xWriteCH376Data( 0xc4 );

        

SET_WORK_BAUDRATE( );  /* 将单片机切换到正式通讯波特率 */

res = xReadCH376Data( );

if ( res != CMD_RET_SUCCESS ) return( ERR_USB_UNKNOWN );  /* 通讯波特率切换失败,建议通过硬件复位CH376后重试 */

#endif

xWriteCH376Cmd( CMD11_SET_USB_MODE );  /* 设备USB工作模式 */

xWriteCH376Data( 0x06 );

res = xReadCH376Data( );

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

else return( ERR_USB_UNKNOWN );  /* 设置模式错误 */

}


按照客服的方法,已经可以正常工作,谢谢了。方法见:

/bbs/thread-63195-1.html

我使用的是第一种方法。


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