如何将并口程序改成串口

我看到你们公司网站上都是用并口读u盘,那怎么用串口读呢,下面的程序怎么改写,我用的是arm单片机,stm32f103zet6芯片,144脚,还请管理员指教。 void CH375_PORT_INIT( ) /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ { IO0SET |= 0x000000E0; /* 设置CS,WR,RD默认为高电平 */ IO0DIR &= 0xFFFF00F7; /* 设置8位并口和INT#为输入 */ IO0DIR |= 0x000000F0; /* 设置CS,WR,RD,A0为输出 */ }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时1uS */ IO0CLR |= 0x0000FF00; /* 清并口输出 */ IO0SET |= ( (UINT32)mCmd << 8 ) | 0x00000010; /* 向CH375的并口输出数据, 输出A0(P0.4)=1; */ IO0DIR |= 0x0000FFF0; /* 写操作所以数据输出, 设置CS,WR,RD,A0为输出 */ IO0CLR |= 0x000000C0; /* 输出有效写控制信号, 写CH375芯片的命令端口, A0(P0.4)=1; CS(P0.7)=0; WR=(P0.6)=0; RD(P0.5)=1; */ IO0DIR = IO0DIR; IO0DIR = IO0DIR; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ IO0SET |= 0x000000E0; /* 输出无效的控制信号, 完成操作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; /* 禁止数据输出 */ mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { IO0CLR |= 0x0000FF00; /* 清并口输出 */ IO0SET |= (UINT32)mData << 8; /* 向CH375的并口输出数据 */ IO0DIR |= 0x0000FF00; /* 写操作所以数据输出 */ IO0CLR |= 0x000000D0; /* 输出有效写控制信号, 写CH375芯片的数据端口, A0(P0.4)=0; CS(P0.7)=0; WR=(P0.6)=0; RD(P0.5)=1; */ IO0DIR = IO0DIR; IO0DIR = IO0DIR; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ IO0SET |= 0x000000E0; /* 输出无效的控制信号, 完成操作CH375芯片, A0(P0.4)=0; CS(P0.7)=1; WR=(P0.6)=1; RD(P0.5)=1; */ IO0DIR &= 0xFFFF00FF; /* 禁止数据输出 */ mDelay1_2uS( ); /* 至少延时1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; mDelay1_2uS( ); /* 至少延时1.2uS */ IO0DIR &= 0xFFFF00FF; /* 读操作所以数据输入 */ IO0CLR |= 0x000000B0; /* 输出有效读控制信号, 读CH375芯片的数据端口, A0(P0.4)=0; CS(P0.7)=0; WR=(P0.6)=1; RD(P0.5)=0; */ IO0DIR = IO0DIR; IO0DIR = IO0DIR; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ mData = (UINT8)( IO0PIN >> 8 ); /* 从CH375的并口P0.15-P0.8输入数据 */ IO0SET |= 0x000000E0; /* 输出无效的控制信号, 完成操作CH375芯片, A0(P0.4)=0; CS(P0.7)=1; WR=(P0.6)=1; RD(P0.5)=1; */ return( mData ); }

/* 在P0.2连接一个LED用于监控演示程序的进度,低电平LED亮 */ #define LED_OUT_INIT( ) { IO0DIR |= 0x04; } /* P0.2 高电平为输出方向 */ #define LED_OUT_ACT( ) { IO0CLR |= 0x04; } /* P0.2 低电平驱动LED显示 */ #define LED_OUT_INACT( ) { IO0SET |= 0x04; } /* P0.2 低电平驱动LED显示 */

/* 延时指定毫秒时间,根据单片机主频调整,不精确 */ void mDelaymS( UINT32 ms ) { UINT32 i; while ( ms -- ) for ( i = 25000; i != 0; i -- ); }

/* 检查操作状态,如果错误则显示错误代码并停机 */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ _printf( "Error: %02X\n", (UINT16)iError ); /* 显示错误 */ while ( 1 ) { LED_OUT_ACT( ); /* LED闪烁 */ mDelaymS( 100 ); LED_OUT_INACT( ); mDelaymS( 100 ); } }

/* 为printf和getkey输入输出初始化串口 */ void mInitSTDIO( ) { UINT32 x; PINSEL0 = PINSEL0 & 0xFFFFFFF0 | 0x00000005; // 设置I/O连接到UART0 U0LCR = 0x80; // DLAB位置1 x = (Fpclk>>4)/9600; // 9600bps U0DLM = x>>8; U0DLL = x&0xff; U0LCR = 0x03; // 8位数据位,1位停止位,无奇偶校验 U0FCR = 0x01; }[Emot]1[/Emot][Emot]20[/Emot][Emot]20[/Emot][Emot]20[/Emot]

void xWriteCH375Cmd( UINT8 mCmd ) void xWriteCH375Data( UINT8 mData ) UINT8 xReadCH375Data( void ) 把这三个函数改成串口接收发送。 void CH375_PORT_INIT( ) 修改为初始化串口


您好,红桃六。我的问题就是该怎么改,我是一个初学者,问的问题比较幼稚,还望您不要嫌麻烦!串口只要用到三个脚就行了#int,rxd,txd,到底该怎么设置这三个脚呢???


就是初始化串口。 这样吧,如果你不太了解,你先在你用的单片机上,做一个串口收发的实验。


这个实验已经做成功了,单片机串口已经初始化成功了,就是我买的ch375b怎么初始化,只能下载到并口初始化,那串口怎么办


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