请问,我如何实现LM3S 6911 的3个串口同时接受和发送数据?要实现这个功能,需要如何初始化?
我刚写的程序,实现两个,不行,只有uCOS上面的第一个发送后然后就会全部同时发送了,程序如下:
void init_urat(void)
{
#if 1
SysCtlLDOSet(SYSCTL_LDO_2_75V);
SysCtlClockSet(SYSCTL_XTAL_6MHZ | SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN ); // The crystal is 6MHz
//Sysclk=SysCtlClockGet();
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //使能RX/TX所在的GPIO端口
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); //使能UART模块
GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0 | GPIO_PIN_1);// 配置RX/TX所在管脚为UART收发功能
UARTConfigSet(UART0_BASE,9600,UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);
//配置UART端口、波特率:9600、 数据位:8、停止位:1、 校验位:无
UARTEnable(UART0_BASE); // 使能UART端口
Sysclk=SysCtlClockGet();
#endif
}
void init_urat1(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_75V);
SysCtlClockSet(SYSCTL_XTAL_6MHZ | SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN ); // The crystal is 6MHz
//Sysclk=SysCtlClockGet();
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); //使能RX/TX所在的GPIO端口
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1); //使能UART模块
GPIOPinTypeUART(GPIO_PORTD_BASE,GPIO_PIN_2 | GPIO_PIN_3);// 配置RX/TX所在管脚为UART收发功能
UARTConfigSet(UART1_BASE,9600,UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);
//配置UART端口、波特率:9600、 数据位:8、停止位:1、 校验位:无
UARTEnable(UART1_BASE); // 使能UART端口
Sysclk=SysCtlClockGet();
}
void putstring(const char *x)
{
while(*x!='\0')
{
UARTCharPut(UART0_BASE,*(x++)); //通过UART发送字符串
}
}
void Uart0TxRxTest(void *parg)
{
unsigned char c;
parg=parg;
while(1)
{
//putstring("http://www.cdxy.edu.cn\n");
//putstring("UTAT0 active\n");
//SysCtlDelay(Sysclk/3);
c = UARTCharGet(UART0_BASE); // 等待接收字符
UARTCharPut(UART0_BASE, c); // 回显
//GPIOPinWrite(GPIO_BASE_PORTB,0xf0,c);
//GPIOPinWrite(GPIO_PORTB_BASE,0xf0,c);
//SysCtlDelay(Sysclk/10);
//Counter++;
//Receive[0]=Counter;
//Receive[1]=Counter;
OSTimeDly(1);
}
}
void Uart1TxRxTest(void *parg)
{
unsigned char c;
parg=parg;
while(1)
{
//putstring("http://www.cdxy.edu.cn\n");
//putstring("UTAT0 active\n");
//SysCtlDelay(Sysclk/3);
c = UARTCharGet(UART1_BASE); // 等待接收字符
UARTCharPut(UART1_BASE, c); // 回显
//GPIOPinWrite(GPIO_BASE_PORTB,0xf0,c);
//GPIOPinWrite(GPIO_PORTB_BASE,0xf0,c);
//SysCtlDelay(Sysclk/10);
//Counter++;
//Receive[0]=Counter;
//Receive[1]=Counter;
c = UARTCharGet(UART0_BASE); // 等待接收字符
UARTCharPut(UART0_BASE, c); // 回显
OSTimeDly(1);
}
}