我看到你們公司網(wǎng)站上都是用并口讀u盤,那怎么用串口讀呢,下面的程序怎么改寫,我用的是arm單片機(jī),stm32f103zet6芯片,144腳,還請(qǐng)管理員指教。 void CH375_PORT_INIT( ) /* 由于使用通用I/O模塊并口讀寫時(shí)序,所以進(jìn)行初始化 */ { IO0SET |= 0x000000E0; /* 設(shè)置CS,WR,RD默認(rèn)為高電平 */ IO0DIR &= 0xFFFF00F7; /* 設(shè)置8位并口和INT#為輸入 */ IO0DIR |= 0x000000F0; /* 設(shè)置CS,WR,RD,A0為輸出 */ }
void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延時(shí)1uS */ IO0CLR |= 0x0000FF00; /* 清并口輸出 */ IO0SET |= ( (UINT32)mCmd << 8 ) | 0x00000010; /* 向CH375的并口輸出數(shù)據(jù), 輸出A0(P0.4)=1; */ IO0DIR |= 0x0000FFF0; /* 寫操作所以數(shù)據(jù)輸出, 設(shè)置CS,WR,RD,A0為輸出 */ IO0CLR |= 0x000000C0; /* 輸出有效寫控制信號(hào), 寫CH375芯片的命令端口, A0(P0.4)=1; CS(P0.7)=0; WR=(P0.6)=0; RD(P0.5)=1; */ IO0DIR = IO0DIR; IO0DIR = IO0DIR; /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */ IO0SET |= 0x000000E0; /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0(P0.4)=1; CS(P0.7)=1; WR=(P0.6)=1; RD(P0.5)=1; */ IO0CLR |= 0x00000010; /* 輸出A0(P0.4)=0; 可選操作 */ IO0DIR &= 0xFFFF00FF; /* 禁止數(shù)據(jù)輸出 */ mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延時(shí)2uS */ }
void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { IO0CLR |= 0x0000FF00; /* 清并口輸出 */ IO0SET |= (UINT32)mData << 8; /* 向CH375的并口輸出數(shù)據(jù) */ IO0DIR |= 0x0000FF00; /* 寫操作所以數(shù)據(jù)輸出 */ IO0CLR |= 0x000000D0; /* 輸出有效寫控制信號(hào), 寫CH375芯片的數(shù)據(jù)端口, A0(P0.4)=0; CS(P0.7)=0; WR=(P0.6)=0; RD(P0.5)=1; */ IO0DIR = IO0DIR; IO0DIR = IO0DIR; /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */ IO0SET |= 0x000000E0; /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0(P0.4)=0; CS(P0.7)=1; WR=(P0.6)=1; RD(P0.5)=1; */ IO0DIR &= 0xFFFF00FF; /* 禁止數(shù)據(jù)輸出 */ mDelay1_2uS( ); /* 至少延時(shí)1.2uS */ }
UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫(kù)調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; mDelay1_2uS( ); /* 至少延時(shí)1.2uS */ IO0DIR &= 0xFFFF00FF; /* 讀操作所以數(shù)據(jù)輸入 */ IO0CLR |= 0x000000B0; /* 輸出有效讀控制信號(hào), 讀CH375芯片的數(shù)據(jù)端口, A0(P0.4)=0; CS(P0.7)=0; WR=(P0.6)=1; RD(P0.5)=0; */ IO0DIR = IO0DIR; IO0DIR = IO0DIR; /* 該操作無(wú)意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */ mData = (UINT8)( IO0PIN >> 8 ); /* 從CH375的并口P0.15-P0.8輸入數(shù)據(jù) */ IO0SET |= 0x000000E0; /* 輸出無(wú)效的控制信號(hào), 完成操作CH375芯片, A0(P0.4)=0; CS(P0.7)=1; WR=(P0.6)=1; RD(P0.5)=1; */ return( mData ); }
/* 在P0.2連接一個(gè)LED用于監(jiān)控演示程序的進(jìn)度,低電平LED亮 */ #define LED_OUT_INIT( ) { IO0DIR |= 0x04; } /* P0.2 高電平為輸出方向 */ #define LED_OUT_ACT( ) { IO0CLR |= 0x04; } /* P0.2 低電平驅(qū)動(dòng)LED顯示 */ #define LED_OUT_INACT( ) { IO0SET |= 0x04; } /* P0.2 低電平驅(qū)動(dòng)LED顯示 */
/* 延時(shí)指定毫秒時(shí)間,根據(jù)單片機(jī)主頻調(diào)整,不精確 */ void mDelaymS( UINT32 ms ) { UINT32 i; while ( ms -- ) for ( i = 25000; i != 0; i -- ); }
/* 檢查操作狀態(tài),如果錯(cuò)誤則顯示錯(cuò)誤代碼并停機(jī) */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ _printf( "Error: %02X\n", (UINT16)iError ); /* 顯示錯(cuò)誤 */ while ( 1 ) { LED_OUT_ACT( ); /* LED閃爍 */ mDelaymS( 100 ); LED_OUT_INACT( ); mDelaymS( 100 ); } }
/* 為printf和getkey輸入輸出初始化串口 */ void mInitSTDIO( ) { UINT32 x; PINSEL0 = PINSEL0 & 0xFFFFFFF0 | 0x00000005; // 設(shè)置I/O連接到UART0 U0LCR = 0x80; // DLAB位置1 x = (Fpclk>>4)/9600; // 9600bps U0DLM = x>>8; U0DLL = x&0xff; U0LCR = 0x03; // 8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn) U0FCR = 0x01; }[Emot]1[/Emot][Emot]20[/Emot][Emot]20[/Emot][Emot]20[/Emot]