基于STM32 串口操作CH375读写U盘问题

读写函数

-----------------------------------------------------

void xWriteCH375Cmd( u16 mCmd )//1

{

    UsartSendData(USART1, mCmd | 0x100);

}


void xWriteCH375Data( u16 mData ) //0

{

  

     UsartSendData(USART1,mData &0x0ff) ;  

}


u8 xReadCH375Data( void )

{

    u8 rdata;

    rdata=UsartReceiveData(USART1); 

    return rdata;

}



工作步骤。。。

---------------------------------------------------------------------

void ch375main( void) 

{

u8i;

u16len,act;

    

     mDelay100mS( );      

i = CH375LibInit( );  /* 初始化CH375程序库和CH375芯片,操作成功返回0 */

mStopIfError( i );

printf( "CH375 Start\n" );      

mDelay100mS( );  

    

    xWriteCH375Cmd(CMD_SET_USB_MODE);/**/

    xWriteCH375Data(6);

    mDelay100mS( ); 

    mDelay100mS( ); 

    xWriteCH375Cmd( CMD_GET_STATUS );  

    if(xReadCH375Data( )==CMD_RET_SUCCESS)           

    {

        printf( "CH375 SET USB MODE host\n" );

    }

    

while ( 1 ) 

{

printf( "Wait Udisk\n" );

          /* 查询CH375中断并更新中断状态,等待U盘插入 */

while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( );  

mDelay100mS( );  /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */

           mDelay100mS( );


for ( i = 0; i < 5; i ++ ) 

          {   /* 检查U盘是否准备好,有些U盘不需要这一步,但是某些U盘必须要执行这一步才能工作 */

            // 有的U盘总是返回未准备好,不过可以被忽略 

            mDelay100mS( );

            mDelay100mS( );            

printf( "Ready ?\n" );

            act=CH375DiskReady();

            printf( "Error: %02X\n", act );  

if (act == ERR_SUCCESS ) break;  // 查询磁盘是否准备好 /

}

                

        /* 查询磁盘物理容量 */

printf( "DiskSize\n" );

i = CH375DiskSize( );  

mStopIfError( i );

printf( "TotalSize = %d MB \n", (unsigned int)( mCmdParam.DiskSize.mDiskSizeSec >>                                 11 ) ); /// 显示为以MB为单位的容量


        mDelay100mS( );


        /* 如果MY_ADC.TXT文件已经存在则添加数据到尾部,如果不存在则新建文件 */

printf( "Open\n" );

mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/MY_ADC.TXT" );  /* 文件名,该文

i = CH375FileOpen( );  /* 打开文件 */

          mDelay100mS( );

if ( i == ERR_SUCCESS ) 

          {  

            /* 文件存在并且已经被打开,移动文件指针到尾部以便添加数据 */

printf( "File size = %ld\n", CH375vFileSize );  

printf( "Locate tail\n" );

mCmdParam.ByteLocate.mByteOffset = 0xffffffff;  /* 移到文件的尾部 */

i = CH375ByteLocate( );

mStopIfError( i );

}

else if ( i == ERR_MISS_FILE ) 

          {  

            /* 没有找到文件,必须新建文件 */

printf( "Create\n" );

mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/MY_ADC.TXT" ); 

i = CH375FileCreate( );  

mStopIfError( i );

}

else 

          {

            mStopIfError( i );  /* 打开文件时出错 */

     }

          mDelay100mS( );

printf( "Write begin\n" );

i = sprintf( mCmdParam.ByteWrite.mByteBuffer, "此前文件长度= %ld 字节\xd\xa",                                                     CH375vFileSize );

mCmdParam.ByteWrite.mByteCount = i;  

i = CH375ByteWrite( );  

mStopIfError( i );


            mDelay100mS( );


printf( "Write end\n" );

i = mCopyCodeStringToIRAM( mCmdParam.ByteWrite.mByteBuffer, "今天的ADC数据到此结束                            \xd\xa" );

mCmdParam.ByteWrite.mByteCount = i;  

i = CH375ByteWrite( );  

mStopIfError( i );

        


           mDelay100mS( );

printf( "Close\n" );

mCmdParam.Close.mUpdateLen = 1;  /* 自动计算文件长度,以字节为单位写文件

i = CH375FileClose( );  /* 关闭文件 */

mStopIfError( i );

           mDelay100mS( );

printf( "Take out\n" );

while ( CH375DiskStatus != DISK_DISCONNECT ) xQueryInterrupt( ); 

}

}



QQ图片20160106131223.png


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