请教一下:M3出口通信为什么无法收到数据呢?但是可以发数据的。
下面是我的程序:
//
//UART0 inint
void UART0_Inint()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);//enable Port A
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);//enable UART0 CLOCK
GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_1|GPIO_PIN_0);//SET GPIO WORKED AS UART MODE
UARTConfigSetExpClk(UART0_BASE,SysCtlClockGet(),9600,UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE);
//cofigurate the UART
//baud rate is 9600
//data length is 8 bit
//one stop bit
//none parity bit
// UARTFIFOEnable(UART0_BASE);
UARTIntEnable(UART0_BASE,UART_INT_RT|UART_INT_RX);//set uart interrupt as receive and receive timeout interrupt
UARTEnable(UART0_BASE);//enable uart0
IntEnable(INT_UART0);//enable uart0 interrupt
}
中断服务函数:
void UART0InterruptHandler()
{
PC5_1;//灯亮 作为指示
PD7_1;
SysCtlDelay(0xffffff);
UARTIntClear(UART0_BASE,UART_INT_RT|UART_INT_RX);//clear interrupt flag
if(UARTCharsAvail(UART0_BASE))//judge if UART has received data
{
UARTCharPutNonBlocking(UART0_BASE,UARTCharGetNonBlocking(UART0_BASE));
}
}
使用串口调试助手时,只有在复位的时候串口调试助手能收到00的数据,然后手动发送就不行了。
但是我把发送数据的函数放在主函数中直接调用就可以,说明发送是没问题的,应该是接受端出了问题。
请哪位大哥哥大姐姐帮忙解答一下哈,小弟感激不尽!
可以经中断啊,如果我把中断中的发送函数UARTCharPutNonBlocking(UART0_BASE,UARTCharGetNonBlocking(UART0_BASE))
改写成UARTCharPutNonBlocking(UART0_BASE,0x90);就是任意发送确定的数值时,单片机就会不停地发送。
引用: 原帖由 bruthroc 于 2011-10-7 17:58 发表 可以经中断啊,如果我把中断中的发送函数UARTCharPutNonBlocking(UART0_BASE,UARTCharGetNonBlocking(UART0_BASE)) 改写成UARTCharPutNonBlocking(UART0_BASE,0x90);就是任意发送确定的数值时,单片机就会不停地发送 ...
那就定义一个中间变量,进入中断之后,把数据读出来UART0_BASE,UARTCharGetNonBlocking(UART0_BASE),然后再UARTCharPutNonBlocking发出去试试。
会不会是因为标志位那些给清零了的原因咧?
可以试试这个代码。
引用: 原帖由 bruthroc 于 2011-10-7 17:58 发表 可以经中断啊,如果我把中断中的发送函数UARTCharPutNonBlocking(UART0_BASE,UARTCharGetNonBlocking(UART0_BASE)) 改写成UARTCharPutNonBlocking(UART0_BASE,0x90);就是任意发送确定的数值时,单片机就会不停地发送 ...
这个时候上位机接收到的是0x90吗?
[ 本帖最后由 guguo2010 于 2011-10-8 12:08 编辑 ]