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.

IWR1843: iwr1843串口数据收发

Part Number: IWR1843

您好,我们现在自制了一块1843板子,直接利用usb to ttl连接pc与雷达板串口的TX/RX,现在雷达板可以正常烧写程序,程序采用SDK 03_05_00_01的out box of demo,但调试发现数据的收发有些问题,原来的雷达板是有一个cfg和一个data口,但这样连接pc设备上只会显示一个usb serial口,请问我应该如何调整代码,使得数据能够通过这个串口收发

  • 我定位到代码中mss.main的MmwDemo_initTask()函数

    这里初始化了两个UART_Handle,那么我是不是可以只初始化一个,将cfg和data合在一起。

  • 请问我应该如何调整代码

    我写了一段示例,请参考

    #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 句柄。你可以在需要发送或接收数据时使用句柄。