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.

[参考译文] Linux/processor-SDK-AM335X:UART 自定义波特率

Guru**** 2609955 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/654035/linux-processor-sdk-am335x-uart-custom-baud-rate

器件型号:PROCESSOR-SDK-AM335X

工具/软件:Linux

您好,

设置自定义波特率时遇到问题

root@sfms:~ stty -F /dev/ttyS4 1200
root@sfms:~ stty -F /dev/ttyS4 10400
stty:无效参数'10400'
root@sfms:~ stty -F /dev/ttyS4 10965
stty:无效参数'10965' 

我参考了以下 TI 链接

在此过程中、您请求通过系统调用将特定 UART 端口的波特率设置为38400、然后将其设置为10400。
那么,10965的波特率是多少? 如何计算? 是否可以直接设置自定义波特率?

e2e.ti.com/.../1357293


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,感谢 Biser 的回复
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Karthitheyan、

    我认为问题是 UART 驱动程序不允许更改为自定义波特率。 您可以尝试修改驱动程序。

    另一个机会是制作您自己的应用并定义自定义波特率、如下所述:

    #include 
    #include 
    …
    
    struct termios2 tio;
    
    ioctl (fd、TCGETS2、&tio);
    tio.c_cflag &=~CBAUD;
    tio.c_cflag |= SEARED;
    tio.c_ispeed = 12345;
    tio.c_ospeed = 12345;
    ioctl (FD、TCSETS2、 (&T); 

    BR

    Tsvetolin Shulev

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Cvetolin:

    感谢您的回复。 我继续使用应用方法

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Cvetolin:

    我使用 API 配置了串行端口。

    已振荡和已等电流的输出根据我的配置发生了变化。

    但我没有获得10400波特率的正确数据。
    能够以1200波特率接收适当的数据。

    API 方法配置中可能会出现什么问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我的 API 中、

    INT8_t klineConfigPort (uint64_t 波特率)

       struct termios2选项;
       内部转台、FD;

       /*打开 Kline UART 连接*/
       if ((波特率< 0)||(波特率> MAX_BAUDRATE)){
          FMS_log (log_ERR、"波特率错误[0-460800]:%d\r\n"、波特率);
          返回-1;
       }

       /*打开 Kline UART 连接*/
       FD =开路(KLINE_DEV、O_RDWR | O_NOCTTY);
       if (fd < 0){
          FMS_LOG (LOG_ERR、"打开 %s 时出错\r\n、KLINE_DEV);
          返回-1;
       }

       /*获取串行端口参数*/
       RET = ioctl (FD、TCGETS2、选项);
       if (ret!=0){
          FMS_log (log_ERR、"获取 Kline UART 参数时出错\r\n);
          返回-1;
       }

       FMS_log (log_debug、"当前波特率(I/O):%d/%d\n"、
          options.c_ispeed、options.c_ospeed);

       /*设置波特率*/
       options.c_cflag &=~CBAUD;
       options.c_cflag |=干扰;
       options.c_ispeed =波特率;
       options.c_ospeed =波特率;

       /*启用接收器并设置本地模式*/
       options.c_cflag |=(CLOCAL | CREAD);

       /*无奇偶校验(8N1)*/
       options.c_cflag &=~PARENB;
       options.c_cflag &=~CSTOPB;
       options.c_cflag &=~CSIZE;
       options.c_cflag |= CS8;

       /*对硬件流控进行放捆(CNEW_RTCCTS)*/
       /* N7分机*/
       options.c_cflag &=~CRTSCTS;

       /* N7 FIX,明确禁用 XON XOFF */
       options.c_iflag &=~(INLCR | ICRNL | IGNCR | IXON | IXOFF);
       /* N7忽略帧和奇偶校验错误*/
       options.c_iflag |= IGNPAR;

       /*设置原始输出*/
       options.c_oflag &=~OPOST;
       options.c_oflag &=~OLCUC;
       options.c_oflag &=~ONLRET;
       options.c_oflag &=~ONOCR;
       options.c_oflag &=~OCRNL;

       /*为端口设置新选项*/
       RET = ioctl (FD、TCSETS2、选项);
       如果(ret!= 0){
          FMS_log (log_ERR、"设置 Kline UART 参数时出错\r\n);
          返回-1;
       }
       /*获取串行端口参数*/
       RET = ioctl (FD、TCGETS2、选项);
       if (ret!=0){
          FMS_log (log_ERR、"获取 UART 参数时出错\r\n);
          返回-1;
       }

       FMS_log (log_debug、"更新的波特率(I/O):%d/%d\n"、
          options.c_ispeed、options.c_ospeed);

       关闭(FD);
       返回0;

    你能告诉我出了什么问题吗?