您好,我们现在自制了一块1843板子,直接利用usb to ttl连接pc与雷达板串口的TX/RX,现在雷达板可以正常烧写程序,程序采用SDK 03_05_00_01的out box of demo,但调试发现数据的收发有些问题,原来的雷达板是有一个cfg和一个data口,但这样连接pc设备上只会显示一个usb serial口,请问我应该如何调整代码,使得数据能够通过这个串口收发
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,我们现在自制了一块1843板子,直接利用usb to ttl连接pc与雷达板串口的TX/RX,现在雷达板可以正常烧写程序,程序采用SDK 03_05_00_01的out box of demo,但调试发现数据的收发有些问题,原来的雷达板是有一个cfg和一个data口,但这样连接pc设备上只会显示一个usb serial口,请问我应该如何调整代码,使得数据能够通过这个串口收发
请问我应该如何调整代码
我写了一段示例,请参考
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> int main() { int fd; struct termios options; // 打开串口设备文件 fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { perror("open_port: Unable to open /dev/ttyUSB0\n"); return -1; } // 获取当前串口配置 tcgetattr(fd, &options); // 设置波特率 cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); // 设置数据位、停止位、校验位等 options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; // 设置超时时间和最小字符数 options.c_cc[VMIN] = 1; options.c_cc[VTIME] = 0; // 设置新的串口配置 tcsetattr(fd, TCSANOW, &options); // 读取数据 char buffer[255]; int bytes_read; while (1) { bytes_read = read(fd, buffer, sizeof(buffer)); if (bytes_read > 0) { buffer[bytes_read] = '\0'; printf("Received: %s\n", buffer); } usleep(100000); // 等待100毫秒 } // 关闭串口 close(fd); return 0; }
我是不是可以只初始化一个,将cfg和data合在一起。
是的,您可以尝试将 cfg 和 data 合并在一起,只使用一个 UART_Handle。在初始化任务时,您可以使用一个串口句柄来进行通信。但是,你需要确保你的雷达板和 PC 之间的通信协议能够支持在一个串口上进行 cfg 和 data 的传输。
但是,您需要在数据流中添加标识符,以便区分 cfg 和 data。接收端就可以根据这些标识符来正确地解析数据
在初始化任务时,你可以这样操作:
#include <ti/drivers/uart/UART.h> /* 定义全局 UART 句柄 */ UART_Handle uartHandle; int main(void) { MmwDemo_DSS_initTask(taskHandle, &taskParams); /* 初始化 UART */ UART_Params uartParams; UART_Params_init(&uartParams); uartParams.readMode = UART_MODE_BLOCKING; uartParams.writeMode = UART_MODE_BLOCKING; uartParams.readTimeout = UART_WAIT_FOREVER; uartParams.writeTimeout = UART_WAIT_FOREVER; uartHandle = UART_open(Board_UART, &uartParams); if (uartHandle == NULL) { /* UART 打开失败 */ while (1); } BIOS_start(); /* 开始 BIOS */ }
`uartHandle` 是全局变量,用在整个程序中访问 UART 句柄。你可以在需要发送或接收数据时使用句柄。