以下是代码片段: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);
}
用户377235 2012-11-23 23:49