精华内容
下载资源
问答
  • IMX6ULL串口波特率设置

    2021-10-15 20:10:48
    看了IMX6ULL的串口波特率配置,感觉太麻烦了,虽然官方有配置波特率的函数,但是写的很繁琐不好理解,所以自己写了一个自由配置波特率的函数 这是IMX6ULL求波特率的公式 通过公式知道求波特率需要确定三个寄存器的...

    看了IMX6ULL的串口波特率配置,感觉太麻烦了,虽然官方有配置波特率的函数,但是写的很繁琐不好理解,所以自己写了一个自由配置波特率的函数
    这是IMX6ULL求波特率的公式

    RH(G783EFV8ZUXR~IV8E1WM.png
    通过公式知道求波特率需要确定三个寄存器的值

    1. Ref Rreq   设置串口时钟频率寄存器的值
    2. UBMR     设置 UARTx_UBMR 寄存器的值
    3. UBIR    设置 UARTx_UBIR 寄存器的值

    其中Ref Rreq的值80MHZ为定值,Baud Rate是我们自己设置的波特率,我们只需要求(UBMR + 1 / UBIR + 1)的值
    相当于求一个只有一个方程的二元一次方程,化简得:
    ( U B M R + 1 U B I R + 1 ) = R e f R r e q B a u d R a t e ∗ 16 (\frac{UBMR + 1}{UBIR + 1})=\frac{Ref Rreq}{Baud Rate *16} (UBIR+1UBMR+1)=BaudRate16RefRreq
    所以问题就转换成已知一个小数求它的最简分数(知道了最简分数就可以通过分子分母的值来确定 UBMR + 1UBIR + 1 的值)的算法。这个算法有很多,我选择的是一个比较容易理解的

    简单来说就是:一个数有一个斜率与与之对应(斜率无穷大在这个问题中不存在),我们要做的是找到一个分子分母来接近或者等于这个斜率。比如我们以 1 为初始分子, 2 为初始分母,然后我们将给定的小数与 0.5 比较,如果小于给定的小数(0.5 这条直线的斜在给定小数直线的斜率的下方),我们就加大分子,使得它的斜率增加到大于给定小数的斜率;如果大于给定的小数,我们就加大分母,使得它的斜率减小到给定小数斜率的下方;如果等于给定的小数说明这就是我们要求的值。但是大多数情况下是不会等于的,所以这个算法就会一直进行下去,直到满足我们的精度要求(我这里精确到小数点后六位就停止)

    但还需要注意一点:UARTx_UBMRUARTx_UBIR 的 bit 0-15 是有效位,所以计算的分子分母不能超过65535,如果超过就降低精度,然后重新计算

     /* 设置ubir和ubmr寄存器 */
    target = (float)80000000 / (float)(bound * 16);
    fractions_to_decimals(&fra, &dec, target);
    UARTX->UBIR = ((int)dec - 1);
    UARTX->UBMR = ((int)fra - 1);
    
    
    /**************************************************************/
    
    
    /** 将小数转换成分数 
      * fra    分子
      *	dec	   分母
      * target 给定的小数
      **/
    void fractions_to_decimals(float *fra, float *dec, float target)
    {
        float result = 0.0f;
        float d_value = 0.0f;
    
        /* 精度设置 */
        float precision_l = 0.000000f;
        float precision_r = 0.000001f;
    
        /* 循环计算,直到满足条件退出 */
        while (1)
        {
            result = *fra / *dec;
    
            /* 如果大于target,分母就加1,减小result的值 */
            if (result > target)
            {
                *dec = *dec + 1.0f;
                result = *fra / *dec;
            }
    
            /* 如果小于target,分子就加1,加大result的值 */
            if (result < target)
            {
                *fra = *fra + 1.0f;
                result = *fra / *dec;
            }
    
            /* 将分子分母的值限定在65535范围内 */
            if ((*fra > 65535.0f) || (*dec > 65535.0f))
            {
                /* 分子分母超过65535就将精度减小,在重新计算 */
                precision_r = precision_r * 10;
                *fra = 1.0f;
                *dec = 2.0f;
                continue;
            }
    
            /* 检测精度是否符合条件,如果满足就退出循环,不满足就继续 */
            d_value = (result - target);
            if (d_value >= precision_l && d_value <= precision_r)
            {
                break;
            }
        }
    }
    

    如果直接将代码上传到板子中,会发现板子启动就会死机,这是因为我们使用了浮点运算,所以我们还需要开启硬件浮点支持,具体实现原理可参考正点原子教程

    /* 使能硬件浮动运算 */
    void imx6ul_hardfpu_enable(void)
    {
        uint32_t cpacr;
        uint32_t fpexc;
    
        /* 使能NEON和FPU */
        cpacr = __get_CPACR();
        cpacr = (cpacr & ~(CPACR_ASEDIS_Msk | CPACR_D32DIS_Msk)) | (3UL << CPACR_cp10_Pos) | (3UL << CPACR_cp11_Pos);
        __set_CPACR(cpacr);
        fpexc = __get_FPEXC();
        fpexc |= 0x40000000UL;
        __set_FPEXC(fpexc);
    }
    

    这样代码就可以正常运行了。除了支持 9600、115200 等标准的波特率外,还支持非标准的波特率,如图:
    }TF9AGC`0ZKH5PDG(($NTKM.png

    展开全文
  • 最近发现打开串口容易阻塞,后来发现是没配置串口参数,记录如下: struct termios Opt; memset(&Opt,0,sizeof(Opt)); if (tcgetattr(fd, &Opt) != 0) { printf("tcgetattr fd \n"); } /*设置数据位...

    最近发现打开串口容易阻塞,后来发现是没配置串口参数,记录如下: 

    struct termios Opt;
      memset(&Opt,0,sizeof(Opt));
      if (tcgetattr(fd, &Opt) != 0)
        {
        printf("tcgetattr fd \n");
        }
     
        /*设置数据位为8位*/
      Opt.c_cflag &= ~CSIZE;
      Opt.c_cflag |= CS8;
     
        /*设置校验位为奇偶校验*/
      Opt.c_cflag |= PARENB;
     
        /*设置停止位为2*/
      Opt.c_cflag |= CSTOPB;
     
        /*数据处理*/
      Opt.c_lflag |= ECHO;
      
      cfsetispeed(&Opt, B921600);
      cfsetospeed(&Opt, B921600);
      status = tcsetattr(fd, TCSANOW, &Opt);
      if (status != 0)
        {
        printf("tcsetattr fd1 \n");
        }

    具体参考:(34条消息) 设置串口通信参数_不完美星空-CSDN博客_串口配置的六个参数

    展开全文
  • Linux设置串口波特率等参数

    千次阅读 2021-05-11 19:59:33
    stty设置串口参数stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs811该命令将串口1(/dev/ttyS0)设置成115200波特率,8位数据模式。一般情况下设置这两个参数就可以了,如果显示数据乱码,可能还需要设...

    stty查看串口参数

    stty -F /dev/ttyS0 -a

    1

    1

    查看串口1(/dev/ttyS0)当前的参数,包括波特率、数据位等。

    stty设置串口参数

    stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs8

    1

    1

    该命令将串口1(/dev/ttyS0)设置成115200波特率,8位数据模式。一般情况下设置这两个参数就可以了,如果显示数据乱码,可能还需要设置其它参数,使用man查看stty其它设置选项。

    cat打印串口数据

    cat /dev/ttyS0

    1

    1

    串口数据就可以在终端上显示了。

    cygwin

    这种方法同样适用于cygwin环境。

    发送数据

    echo "sss" > /dev/ttyS0

    MSP430设置串口波特率的方法

    给定一个BRCLK时钟源,波特率用来决定需要分频的因子N:               N = fBRCLK/Baudrate 分频因子N通常是非整数值,因此至少一个分频器和一个调制阶段用来尽可能的接 ...

    Linux下串口编程【转】

    本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但 ...

    MSP430精准配置高速串口波特率的方法

    引言     在实际项目大批量生产调试设备时,笔者发现同样版本的程序在不同设备上运行时效果不一致,一部分设备串口通信正常,另外一部分串口通信不正常.通过示波器对多个设备的串口波特率及系统时钟频率测试, ...

    第十三章 Openwrt 修改串口波特率 以适应普通51不支持 115200高速率

    ,单片机或arduino的串口波特率可自行设置.当然,一般都会设置9600,也可以设置为115200.假设现在openwrt波特率为115200,单片机的串口波特率为9600.要进行一个通信,该如何设 ...

    Linux下串口编制【转】

    串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...

    Linux下串口編程遇到的接收数据错误及原因(0x0d&comma;0x11接收错误)

    摘要:Linux下串口编程遇到的接收数据错误及原因 来源:https://dotblogs.com.tw/k/2012/07/24/73572 近日在调试串口的时候发现,另一设备向我ARM板的串口发送 ...

    linux UART串口驱动开发文档

    转:http://www.360doc.com/content/10/0417/18/829197_23519037.shtml linux UART串口驱动开发文档时间:2010-01-09 14: ...

    Linux下串口配置初步探寻

    一.在struct termios结构体中,对串口进行基本配置(如波特率设置,校验位和停止位设置 等). (一): struct termios   //串口的设置主要是设置struct termio ...

    linux 使用串口连接设备console

    linux使用串口连接cisco设备的console   linux 自带一个串口命令:minicom,需要经过设置,之后就可以连接了.   传说是默认就可以,我可能RP不好,我必须要经过设置才可以. ...

    随机推荐

    reset&period;css css重置公共样式

    @charset "utf-8";/*Css Document*/ /*! * @名称:reset.css * @功能:1.重设浏览器默认样式 * 2.设置通用原子类 *//* 防 ...

    2016年省赛G题, Parenthesis

    Problem G: Parenthesis Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 398  Solved: 75[Submit][Status ...

    vue组件(将页面公用的头部组件化)

    呃……重新捡起前面用vue-cli快速生成的项目. 之前是做过一个多页面的改造,以及引入vux的ui组件,这次在这个项目的基础上,再来聊聊vue中的component. 别问我为啥总是写关于vue的博 ...

    lesson - 8 课程笔记 tar &sol; gzip &sol;bzip2 &sol; xz &sol;

    作用:为linux的文件和目录创建档案,也可以在档案中改变文件,或者向档案中加入新的文件即用来压缩和解压文件.tar本身不具有压缩功能.他是调用压缩功能实现的  语法:tar[必要参数][选择参数][ ...

    ML&colon; 聚类算法R包-K中心点聚类

    K-medodis与K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值, ...

    Java数组、集合的三种遍历方式(包懂)

    1 for循环 for(int i = 0;i

    CentOS系统下的数据盘挂载

    此教程适用系统:Linux(CentOS,Debian,Ubuntu,Fedora) 通常新开通的Linux云服务器数据盘都未做分区和格式化.在进行数据盘挂载之前我们要先进行分区以及格式化操作.注意, ...

    自对齐&lpar;self-aligned&rpar;

    C语言是自对齐的,32位以4字节对齐,64位以8字节对齐(1字节=8 bits) 自对齐的好处:在一条指令内完成数据的取或者存的操作,使得内存访问更快:否则,如果一个变量跨机器字存储,那么要做两次或更 ...

    memcached centos启动笔记

    root情况下命令行输入 apt-get install memcached 自动安装 不熟悉的情况下 可能找不到改程序所在目录 使用 find / -name memcached 从根目录开始寻找 ...

    laravel报404错误与NGINX报404错误区别

    nginx自己配置的404页面 和laravel配置的404页面:如果报了404 :执行laravel的404页面: 那这个404页面对nginx来说意味着什么    laravel 路由和页面找 ...

    展开全文
  • 香蕉派,修改 uboot 和 kernel 串口波特率

    万次阅读 多人点赞 2021-10-12 01:16:39
    buildroot(uboot-2018.07 + linux-4.18.12) 默认波特率 编译 $ make bananapi_m1_defconfig $ make 编译好后,SD 卡烧录镜像 sdcard.img,插入 BPI 启动,默认情况下 uboot 和 kernel 的串口波特率为 115200。我们...

    环境

    硬件:bananapi m1
    软件:buildroot(uboot-2018.07 + linux-4.18.12)
    在这里插入图片描述

    默认波特率

    编译

    $ make bananapi_m1_defconfig
    $ make
    

    编译好后,SD 卡烧录镜像 sdcard.img,插入 BPI 启动,默认情况下 uboot 和 kernel 的串口波特率为 115200。我们把串口工具调到 115200,8n1,就可以看到系统启动时的 log 了,包括 uboot 和 kernel 的 log 打印。

    修改波特率

    如何修改波特率呢?同样也是分为两块,uboot 和 kernel。
    先看 uboot,使用 make uboot-menuconfig 命令
    在这里插入图片描述
    → Device Drivers → Serial drivers 路径下,将 Default baudrate 改成 57600。然后重新编译 uboot。
    其实就是修改 output/build/uboot-2018.07/.config 中的 CONFIG_BAUDRATE

    #
    # Serial drivers
    #
    CONFIG_BAUDRATE=57600                                                                                                      
    CONFIG_REQUIRE_SERIAL_CONSOLE=y
    CONFIG_SPECIFY_CONSOLE_INDEX=y
    CONFIG_SERIAL_PRESENT=y
    CONFIG_SPL_SERIAL_PRESENT=y
    CONFIG_CONS_INDEX=1
    CONFIG_DM_SERIAL=y
    

    接着修改 kernel 的串口波特率。不同的板子,不同的镜像,修改的位置是不一样的,我知道的有两种

    1. 修改 dts

    这里我看到编译好的镜像使用的是 sun7i-a20-bananapi.dtb 这个文件,于是就去修改 output/build/linux-4.18.12/arch/arm/boot/dts/sun7i-a20-bananapi.dts

        chosen {
            // stdout-path = "serial0:115200n8";
            stdout-path = "serial0:57600n8";
        };
    

    重新编译 kernel,再完整编译生成 sdcard.img,重新烧录,串口工具波特率改成 57600,启动
    在这里插入图片描述
    可以看到,uboot 阶段显示正常,到 kernel 阶段出现了乱码,显然 kernel 的串口波特率并没有修改成功,那问题出现在哪呢?

    2. 修改 boot.scr

    仔细看了 uboot 的启动 log,没看到加载 sun7i-a20-bananapi.dtb 的打印,却看到了这一句 Found U-Boot script /boot.scr 这句是干嘛的呢?查资料知道,boot.scr 是通过 boot.cmd 编译生成的。
    board/bananapi/bananapi-m1/boot.cmd

    setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait                                               
      
    mmc dev 0
    fatload mmc 0 $kernel_addr_r zImage
    fatload mmc 0 $fdt_addr_r sun7i-a20-bananapi.dtb
    
    bootz $kernel_addr_r - $fdt_addr_r
    

    看到 boot.cmd 的内容瞬间就找到了答案,波特率是在这里通过启动参数的形式由 uboot 传递给 kernel 的。系统启动后,执行命令 cat /proc/cmdline 也能证实这一点

    Welcome to Bananapi M1
    buildroot login: root
    # cat /proc/cmdline
    console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait
    #
    

    console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait 这句就是 boot.scr 里面的内容。
    下面我们来修改一下
    boot.cmd

    setenv bootargs console=ttyS0,57600 earlyprintk root=/dev/mmcblk0p2 rootwait                                               
      
    mmc dev 0
    fatload mmc 0 $kernel_addr_r zImage
    fatload mmc 0 $fdt_addr_r sun7i-a20-bananapi.dtb
    
    bootz $kernel_addr_r - $fdt_addr_r
    

    编译

    $  mkimage -A arm -T script -O linux -d boot.cmd boot.scr
    

    我们可以不用重新编译并烧录整个镜像,只要单独编译并替换 boot.scr 这个文件就行了。替换后启动
    在这里插入图片描述
    可以看到,uboot 和 kernel 都以 57600 的波特率正常打印 log 了,通过 cat /proc/cmdline 查看波特率也是 57600。

    # cat /proc/cmdline
    console=ttyS0,57600 earlyprintk root=/dev/mmcblk0p2 rootwait
    
    展开全文
  • } } 二、备注 “SCON_init”子程序是串口波特率设置和初始化的子程序,在主程序开始时调用一次即可。在整个串口波特率初始化子程序中,我们两种方式完整的代码都在里面,没有用注释符号标注的是6T模式方式的代码,...
  • 作者:在另外一套程序中并没有ISP功能,要实现程序的更新功能,要了解芯片的IAP调用,这一点在芯片的资料上也有介绍,然后就是接收上位机的程序,一般是通过串口,下面介绍一下P89C51RD2的串口自动波特率设置,程序...
  • 一、接收器和发送器的波特率在USARTDIV的整数和小数寄存器中的值应设置成相同。 = 这里的fck是给外设的时钟(PCLK1用于USART2、 3、 4、 5, PCLK2用于USART1)USARTDIV是一个无符号的定点数。这12位的值设置在USART...
  • 51单片机串口波特率

    2021-11-16 10:11:21
    波特率需要使用定时器1 波特率 = ((2^SMOD)/32) * (定时器溢出率) 定时器溢出率 = 系统时钟/指令周期/装载数 SMOD = 1 ,波特率加倍 TH1 = TL1 = -(FOSC / INSTRU_CYCLE / 32 / BAUD); //Set auto-reload vaule ...
  • 在这个端口上,我收到波特率为875000的数据。这种情况并不常见,我没有成功修改它。我做了一个小C程序来做到这一点,但它不适用于875000 ...这里的代码的一部分与串口的编程:#include #include #include #include #...
  • 串口屏如何配置波特率 在Program.s中配置 bauds=你需要的波特率 记住要写在page指令之前,page指令之后的代码是不会执行的
  • 波特率9600是什么意思  波特率是一个电子信号上的术语,用于描述信道的数据传输速度。所谓信道,可以是无线的,也可以是有线的,说白了就是两个东西之间传输数据。 波特率通常单位是bit/s,也就是 二进制位/秒。...
  • PlatformIO开发环境下修改串口监视器的默认波特率 前面一篇文章讲解的是临时设置波特率的方法,今天学习了新技能,解锁了默认波特率设置方法,现在给大家献上。 1.主要是前面得我文章在发布之前该技能没有解锁,...
  • 1,串口操作需要的头文件#include /* 标准输入输出定义 */#include /* 标准函数库定义 */#include /* Unix 标准函数定义 */#include #include #include /* 文件控制定义 */#include /*终端控制定义 */#...
  • FPGA串口波特率计算

    2021-10-28 15:15:31
    一 : 串口波特率等概念,115200等到底什么意思 1:比特率:9600bps 、115200bps 就是每秒中传输9600bit、115200bit,也就是相当于每一秒中划分成了9600等份。 9600bps:那么每1bit的时间就是1/9600秒=104....
  • #关于STM32串口波特率的产生,以及如何从USART_BRR寄存器值得到USARTDIV fCK是时钟频率,这里我们假设72000000Hz,如果需要设置的波特率为115200,那我们可以计算出USARTDIV = 39.0625 我们将39.0625写到USART_BRR...
  • PlatformIO开发环境下修改串口监视器的波特率 第一步:鼠标左键单击platform:Serial Monitor图标。 第二步:根据上面的提示,按组合键Ctrl +T;弹出提示信息,接着按字母b,输入指定的波特率数值。 第三步:按完...
  • #include#define uchar unsigned char#define uint unsigned int#define SYSCLK 11059200uintBAUDRATE;uchar flag,a;unsigned char flag_on;void main(){SCON=0x50;TMOD=0x20;TH1=0xfd;TL1=0xfd;...
  • 串口的中断接收平时都是使用115200或9600的波特率,在使用较高波特率时按照常用波特率的使用方法会出现无法读取或截断的情况。且用CubeMX配置时会出现波特率误差警告。 解决方案: 问题出现的原因可能是系统中断...
  • 之前的文章中介绍过STM32的USB接口虚拟串口的功能。...1.电脑上设置的串口波特率不影响USB接口传输的速率。 2.怎样获取电脑上串口助手设置的波特率,以设置USART1使其波特率与串口助手一致。 波特率设置 其实ST
  • ScicRegs.SCIHBAUD = 0x0001; // 9600 baud @LSPCLK = 37.5MHz. ScicRegs.SCILBAUD = 0x00E7;
  • 查看串口信息 stty -F /dev/ttyS1 -a #ttyS1为要查看的串口 设置串口 ...设置成115200波特率,8位数据模式。 man stty查看帮助。 读串口 cat /dev/ttyS1 写串口 echo "xxx" > /dev/ttyS1 ...
  • 串口波特率115200

    千次阅读 2021-03-15 16:04:40
    串口波特率115200 注意一点,在不使用小数寄存器的情况下,115200的波特率,串口的外设时钟最好在100M,否则串口的波特率的误差比较大,容易造成通讯失败。
  • 一、Window10 SecureCRT 等工具设置串口波特率为 1500000,出现设置不了或无效的问题. 二、解决方法,采用 3.3.5.122 或更老版本的旧驱动即可,下载链接Firefly | 让科技更简单,让生活更智能 三、测试ok ...
  • 描述波特率(Baud Rate) 单位 bps -- 每秒传送的字节数 Byte Per Second.。(BaudRate) 模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量。如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行...
  • BC28模组设置串口波特率时,出现发送指令后波特率未修改的情况; 如图:发送修改指令后,返回OK,再发送查询指令可以看到修改失败; 后来发现发送设置115200波特率指令后要在设置的时间内(3s内),用115200波特率发送...
  • 串口助手波特率设置为38400后,发现正常打印。 思索一番之后,发现CubeMX生成代码时,外部晶振默认为25MHz。而板载晶振为8MHz。讲HSE的外部晶振改为8MHz后,主机与从机在相同的波特率下可以正常通信。 ...
  • 串口常用参数

    2021-07-28 09:42:57
    中文名串口常用参数属性通用设备通信的协议相关特点计算机包含两个基于RS232的串口串口常用参数介绍编辑语音串口常用参数简介串口是一种非常通用的设备通信的协议(不要与通用串行总线Universa...
  • 例如波特率为9600理解为:单位时间内传输9600个码元(位)。1s内可以传输9600位数 假如要测量波特率为9600,则每一比特位的时间为:1/9600=104us。一般示波器横向表示时间, 直接 在示波器上看测量一个高电平或则...
  • 在一般波特率的情况下是体现不出差别的,但是如果碰到较高的波特率,就要注意了,例如:波特率是 1500000bps(1.5Mbps)。因为有些USB转串口芯片波特率无法达到 1500000的,甚至即使同一芯片的不同系列也可能会有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,496
精华内容 16,598
关键字:

串口波特率设置

友情链接: Cfg.rar