这几天进行了串口通讯实验,串口发送测试正常,但接收却失败,即使使用范例编译下载测试也是接收不到任何信息,至今不清楚原因。
按照用户手册的说明,串口通讯使用的是开发板上的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方式,结果仍然是发送正常,接收却没有任何反应。不知道有谁测试过串口接收么,是不是我的代码有什么问题?
可能是串口助手的问题,我的串口助手每次运行前重新打开并设置。
引用: superstar_gu 发表于 2021-1-14 17:07 可能是串口助手的问题,我的串口助手每次运行前重新打开并设置。
好象不是这个原因,我用各种方式测试,结果均一样,单片机接收不到数据,就象串口接收功能没有启用一样。
我一直都用这个串口调试助手,从来没有遇到过问题。
到时候我试一下,这个是个问题,最近忙了点,没时间测评。有时间试一下。
范例是发送完数据后再接收数据,然后对比,数据正解点亮LED,不正确则闪烁LED。我使用的串口调试助手不知道如何设置将接收到的数据自动发送回去,因此测试时自然就不可能会收到返回数据。但是范例中断处理函数中有接收数据并直接发送回去的代码,按理串口调试助手发送数据后应该收到返回的数据,但实际上没有反应。另外我将接收缓存数组打印在屏幕上,也是空白的,间接证明没有接收到任何数据,就象接收功能没有使能一样。
引用: caizhiwei 发表于 2021-1-15 21:27 usb转虚拟串口那个吗?
不是,是板上的USART0接口,用户手册上有说明的。
引用: hujj 发表于 2021-1-15 09:35 范例是发送完数据后再接收数据,然后对比,数据正解点亮LED,不正确则闪烁LED。我使用的串口 ...
UART能和虚拟串口断开,然后把单片机的RX和TX短路吗?
引用: littleshrimp 发表于 2021-3-13 10:23 UART能和虚拟串口断开,然后把单片机的RX和TX短路吗?
没有测试过。