您好,我们现在自制了一块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 句柄。你可以在需要发送或接收数据时使用句柄。