Linux驱动UART串口测试发送TX速率篇

一.环境:linux开发板+串口调试助手,条件好的可以用示波器,逻辑分析仪加深印象。以下内容是你有一定的linux驱动知识,至少懂一丢丢吧。

二.调试步骤:

1.先设置设备树dts,打开你的板子上面的debug串口,每个人可能具体不一样,我的是uart2。
 

&uart2 { status = "okay"; };

ps:注意这个是得你有其他的默认配置下,才只有okey设置,要不然你得声明其他具体的pinctrl子类的细节属性,可上网参考uart驱动开发如何设置设备树,但是一般DTS里面是有的。

2.重新编译内核,烧入板子。

3.写好uart测试程序(可以直接复制我的):

注意测试速率函数在这cfsetospeed(&uart_opts, B9600); 

交叉编译得到可执行文件,传输到linux板子上运行。(这步骤如果出问题,就百度一下吧,这个比较通用的知识点。)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>




int main() {


    int uart_fd = open("/dev/ttyS2", O_RDWR);
    if (uart_fd == -1) {
        perror("Error opening UART");
        return 1;
    }

    struct termios uart_opts;
    tcgetattr(uart_fd, &uart_opts);

    cfsetospeed(&uart_opts, B9600);   //这个是波特率,测试波特率就修改这里就可以了,可以设置为你要测试的波特率哦
    uart_opts.c_cflag |= CS8;
    tcsetattr(uart_fd, TCSANOW, &uart_opts);

   char uart[100]={
   0x00,0x01,0x02,0x03,0x04,   0x05,0x06,0x07,0x08,0xff,
   0x00,0x01,0x02,0x03,0x04,   0x05,0x06,0x07,0x08,0xff,
   0x00,0x01,0x02,0x03,0x04,   0x05,0x06,0x07,0x08,0xff,
   0x00,0x01,0x02,0x03,0x04,   0x05,0x06,0x07,0x08,0xff,
   0x00,0x01,0x02,0x03,0x04,   0x05,0x06,0x07,0x08,0xff,
   0x00,0x01,0x02,0x03,0x04,   0x05,0x06,0x07,0x08,0xff,
   0x00,0x01,0x02,0x03,0x04,   0x05,0x06,0x07,0x08,0xff,
   0x00,0x01,0x02,0x03,0x04,   0x05,0x06,0x07,0x08,0xff,
   0x00,0x01,0x02,0x03,0x04,   0x05,0x06,0x07,0x08,0xff,
   0x00,0x01,0x02,0x03,0x04,   0x05,0x06,0x07,0x08,0xff
//00000000     00000001   00000010    00000011   .......
   };



    while (1) {

        write(uart_fd, uart, 100);
      
        sleep(1);  // Wait for 1 second
        }


  //  close(uart_fd);

    return 0;
}

3.然后打开串口助手连上开发板,注意开发板的uart2的TX连接你的串口RX,GND相连就可以了。打开对应的波特率,看看接受的数据包是否正常,玩过单片机的应该都有串口助手的,我这里就不多说了。这里建议有条件的还是要用示波器、逻辑分析仪等等的抓一下显示一下,以更好理解每个bit的情况。


4.这个是我用逻辑分析仪抓的,我的之前的代码和我上面放的不一样,但是就是改了和数据包而已,没什么两样,这里可以很清楚看到每个bit。一个数据0x01,发出的就是0000 0001,加上起始位0,停止位1,得到就是0  0000  0001  1.可以自己分析看看。

我这里是拿整个数据包除于时间,得到大约9625波特率,也就是一秒9600个位。并在软件上也识别到了波特率为9615(有点误差)。

好了,步骤大概就这些,其实我这里出现了问题,在我波特率大于2M之后,收到的数据包停止位有延迟,4M更明显。目前猜测是波特率太大导致的,因为我是小白,希望有大神看见可以解释下下。

 本人第二篇文章,有错误请指出,望谅解。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值