这几天进行了串口通讯实验,串口发送测试正常,但接收却失败,即使使用范例编译下载测试也是接收不到任何信息,至今不清楚原因。
按照用户手册的说明,串口通讯使用的是开发板上的USART0接口,但此接口却没有对开发板进行供电,仍然需要通过GD_LINK接口供电,因此需要连接两根USB线:
首先测试的是串口发送,范例是按下KEY_B(上图的红色箭头处)时发送一串字符,测试很顺利,下图是串口调试助手接收到的信息:
但在测试轮询法接收并发送时却不成功,以下是测试的代码,是我从中断法范例中移植过来的,但接收不到电脑发送的信息,也许是我的代码有问题:
//串口接收并回应测试
if(RESET != usart_interrupt_flag_get(EVAL_COM0, USART_INT_FLAG_RBNE)){ //数据缓冲区不为空
gd_eval_led_on(LED1);
/* receive data */
rx_buffer[rx_count++] = usart_data_receive(EVAL_COM0);
if(rx_count >= rx_buffer_size){
usart_interrupt_disable(EVAL_COM0, USART_INT_RBNE); //缓冲区超限
}
usart_data_transmit(EVAL_COM0, tx_buffer[tx_count-1]);
while(RESET == usart_flag_get(EVAL_COM0, USART_FLAG_TC)){ //等待传输完成
}
gd_eval_led_off(LED1);
}
轮询法测试不成功,于是我就直接使用范例中的中断法,直接将范例编译下载到开发板上,按照《用户手册》的提示,上电之后开发板首先发送256字节的数据到超级终端,然后接收超级终端返回的数据:
测试时串口调试助手接收到完整的256字节数据:
但我尝试通过串口调试助手发送数据却得不到任何回应,查看范例中的串口中断处理代码,有接收并回应(发送)的代码,也许是还缺少哪项设置吧:
随后我又测试了DMA方式,结果仍然是发送正常,接收却没有任何反应。不知道有谁测试过串口接收么,是不是我的代码有什么问题?
|