|
UOLCR和U1LCR对串口奇偶校验设置出现的奇怪现象:<br />1.设置为无校验,只能收到并返回上位机串口设置的无校验的串口数据;<br />2.设置为奇校验,能收到并返回上位机串口设置的无校验奇校验和偶校验所有类型的串口数据;<br />3.设置为偶校验,能收到并返回上位机串口设置的无校验奇校验和偶校验所有类型的串口数据。<br /><br />uint8 UART0_Ini(uint32 baud, UARTMODE set)<br />{ <br /> uint32 bak;<br /> <br /> /* 参数过滤 */<br /> if( (0==baud)||(baud>115200) ) return(0);<br /> if( (set.datab<5)||(set.datab>8) ) return(0);<br /> if( (0==set.stopb)||(set.stopb>2) ) return(0);<br /> if( set.parity>2 ) return(0);<br /> <br /> /* 设置串口波特率 */<br /> U0LCR = 0x80; // DLAB位置1<br /> bak = (Fpclk>>4)/baud;<br /> U0DLM = bak>>8;<br /> U0DLL = bak&0xff;<br /> <br /> /* 设置串口模式 */<br /> bak = set.datab-5; // 设置字长度<br /> if(2==set.stopb) bak |= 0x04; // 判断是否为2位停止位 <br /> <br /> if(0!=set.parity) {set.parity = set.parity-1; bak |= 0x08;}<br /> bak |= (set.parity<<4); // 设置奇偶校验<br /> <br /> U0LCR = bak;<br /> return(1);<br />}<br />还有其他地方需要设置吗? |
|