热度 14
2012-11-26 10:18
1221 次阅读|
1 个评论
以下是代码片段:lm3s9b92上的串口发送函数对比 //***************************************************************************** // // The UART0 INIT. // //***************************************************************************** void Uart0Init() { SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); //移植时更改 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //移植时更改 GPIOPinConfigure(GPIO_PA0_U0RX); //移植时更改 GPIOPinConfigure(GPIO_PA1_U0TX); //移植时更改 GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(),115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); // // Enable the UART interrupt. // IntEnable(INT_UART0); UARTIntEnable(UART0_BASE, UART_INT_RX|UART_INT_RT); IntMasterEnable(); UARTEnable(UART0_BASE); } //***************************************************************************** //方法1:发少量字符(不推荐) // Send a string to the UART(这个函数发送字符数不能一次性超过17个(byte)). // //***************************************************************************** void UARTSend(const uint8 *pucBuffer, uint16 ulCount) { // // Loop while there are more characters to send. // while(ulCount--) { // // Write the next character to the UART. // UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++); } while(UARTBusy(UART0_BASE)) {}; //是否发送结束? } //***************************************************************************** //方法二:建议使用,无限制 // Send a string to the UART. //这个发送函数使用无任何限制(推荐,但是如果是485发送需要加上 while(UARTBusy(UART0_BASE)) {}; //是否发送结束? ) // //***************************************************************************** void UART0Send (const uint8 *pucBuffer,uint16 Length) { uint16 ucByte = Length; while (ucByte) { if ( UARTSpaceAvail(UART0_BASE) ) { UARTCharNonBlockingPut(UART0_BASE, *pucBuffer++); ucByte--; } } } 第三部分:RS485的一个发送实例 /************************************************************************ * 函数名: * 函数功能: * 输入参数: * 输出参数: * 返回值: ************************************************************************/ void Rs485Send(const unsigned char *pucBuffer, unsigned long ulCount) { GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_6,GPIO_PIN_6); //RS485发送 SysCtlDelay(230); UART1Send((unsigned char *)pucBuffer, ulCount); while(UARTBusy(UART1_BASE)) {}; //等待串口空闲 GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_6,0X00); //RS485接收 SysCtlDelay(230); }