0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UART波特率计算及UART收发回显实验

瑞萨嵌入式小百科 来源:野火电子 2025-10-17 09:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

18.4

UART波特率计算

决定串口波特率的寄存器有BRR(Bite Rate Rigister),SEMR(Serial Extended Mode Rigister)和MDDR(Modulation Duty Register)。波特率与寄存器的值的公式如图19_8 所示。N表示BRR寄存器的值,B是波特率,PCLK 是外设时钟的频率(单位:MHz)。BGDM(Baud Rate Generator Double-Speed Mode Select)在RA6M5中,SCI挂载在PHBIU(Peripheral High Speed Bus Interface Unit)总线上,使用时钟PCLKA,该时钟默认频率为100MHz。

1c1cdd8a-a97d-11f0-8c8f-92fbcf53809c.png

图19-8 波特率和误差的计算公式

表1:波特率计算的相关参数描述

1c845c44-a97d-11f0-8c8f-92fbcf53809c.png

由于N存放的是整数,故只能将公式计算出来的值进行四舍五入,这样肯定会存在误差(Error)。例如,我们要配置当前波特率为115200bps。当 PCLK=100MHz,BGDM=0,ABCS=0,ABCSE=0,n=1,按照图19_8公式,当前N为:

1cda8ad8-a97d-11f0-8c8f-92fbcf53809c.png

则当前误差Error为:

1d3389a8-a97d-11f0-8c8f-92fbcf53809c.png

由于N是四舍五入取得的,故Error有可能是负数,因此这里取绝对值。

大多数时候会有多组参数符合波特率要求,由于误差越大,收发出错的可能性越大,虽然可以用奇偶校验避免这个问题,但奇偶校验无法解决丢包问题,因此我们一般会选择误差最小的那组参数。例如:同样是要求波特率为115200bps,但此时BGDM=1,ABCS=0,ABCSE=0,n=0,则此时的N为:

1d932c6e-a97d-11f0-8c8f-92fbcf53809c.png

当前误差Error为:

1de6db02-a97d-11f0-8c8f-92fbcf53809c.png

很明显这组参数的误差0.47%要小于上一组参数的 3.12%,因此我们会选择这一组参数。

因为可选参数有很多组,所以我们需要遍历所有可选的参数组合来寻找误差小的那组参数,毫无疑问的对用户来说是相当繁琐的。瑞萨官方当然也想到了这一点,因此读者在实际开发的过程中,可以直接使用FSP库的R_SCI_UART_BaudCalculate函数来计算出适当的参数组。在通过Smart Configuration配置串口的时候,Smart Configuration也会将适当的参数组计算出来,存放到hal_data.c当中,用户可以直接调用。

如果我们需要更小的误差,则需要在SEMR的BRME位(Bit Rate Modulation Enable)写1,使能比特率调制功能。此时波特率和寄存器之间的公式见图19_9。

1e408ec2-a97d-11f0-8c8f-92fbcf53809c.png

图19-9 使用比特率调制功能时的波特率和误差的计算公式

该公式与未使用比特率调制功能时的公式大同小异,不管是BRR setting还是Error,都只是在分母添加了个系数(256/M),M是8位寄存器MDDR的值,取值范围(128~256),这极大的降低了波特率的误差。例如:

同样是要求波特率为115200bps,但此时 BGDM=1,ABCS=0,ABCSE=0,n=0,M=184,则此时N为:

1ea98828-a97d-11f0-8c8f-92fbcf53809c.png

当前误差Error为:

1efdae76-a97d-11f0-8c8f-92fbcf53809c.png

对比未使用波特率调制器时误差为0.47%,使用后为0.014%,误差降低到了原来的3%,效果可以说是相当的好,但是寻找效果最佳的M的值也是很繁琐的。读者只需调用FSP库的R_SCI_UART_BaudCalculate函数,就能找到最适合的参数组。这个函数的源码在r_sci_uart.c,如果读者对其实现过程感兴趣,可以翻看这个函数的源码。

18.5

实验1:UART收发回显

UART只需两根信号线即可完成双向通信,对硬件要求低,使得很多模块都预留UART接口来实现与其他模块或者控制器进行数据传输,比如GSM模块,WIFI模块、蓝牙模块等等。在硬件设计时,注意还需要一根“共地线”。

我们经常使用UART来实现控制器与电脑之间的数据传输。这使得我们调试程序非常方便,比如我们可以把一些变量的值、函数的返回值、寄存器标志位等等通过UART发送到串口调试助手,这样我们可以非常清楚程序的运行状态,当我们正式发布程序时再把这些调试信息去除即可。

我们不仅仅可以将数据发送到串口调试助手,我们还可以在串口调试助手发送数据给控制器,控制器程序根据接收到的数据进行下一步工作。

首先,我们来编写一个程序实现开发板与电脑通信,在开发板上电时通过UART发送一串字符串给电脑,然后开发板进入中断接收等待状态,如果电脑有发送数据过来,开发板就会产生中断,我们在中断服务函数接收数据,并马上把数据返回发送给电脑。

18.5.1

硬件设计

为利用UART实现开发板与电脑通信,需要用到一个USB转串口(UART)的芯片:CH340G。CH340G是一个USB总线的转接芯片,实现USB转 UART、USB转lrDA红外或者USB转打印机接口,我们使用其USB转UART功能。具体电路设计见图19_10a、图19_10b、图19_10c。

在下面的三块开发板的电路图中,CH340G的TXD 引脚与MCU芯片UART的RXD引脚连接,CH340G 的RXD引脚与MCU芯片UART的TXD引脚连接。CH340G芯片集成在开发板上,其地线(GND)已与控制器的GND连通。

1f56077e-a97d-11f0-8c8f-92fbcf53809c.png

图19-10a 启明6M5开发板:USB转串口硬件设计

1fbe262e-a97d-11f0-8c8f-92fbcf53809c.png

图19-10b 启明4M2开发板:USB转串口硬件设计

2015d946-a97d-11f0-8c8f-92fbcf53809c.png

图19-10c 启明2L1开发板:USB转串口硬件设计

表2:调试串口引脚分配

20823dde-a97d-11f0-8c8f-92fbcf53809c.png

20db755c-a97d-11f0-8c8f-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5527

    浏览量

    128598
  • 串口
    +关注

    关注

    15

    文章

    1603

    浏览量

    81683
  • uart
    +关注

    关注

    22

    文章

    1295

    浏览量

    105931
  • 波特率
    +关注

    关注

    2

    文章

    319

    浏览量

    35404

原文标题:UART波特率计算及实验1:UART收发回显————瑞萨RA系列FSP库开发实战指南(46)

文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RA UART实现串口波特率自适应

    Falling & Rising Edge trigger),然后等上位机发送波特率标识数据(LSB=1),这样IRQ4分别两次触发GPT(Start->Stop)就能够捕捉start bit的间隔时间,从而计算出上位机发送数据的波特
    发表于 06-07 15:25 2912次阅读
    RA <b class='flag-5'>UART</b>实现串口<b class='flag-5'>波特率</b>自适应

    基于环形队列的UART收发回实验

    问题。在本实验中,我们使用环形队列来实现实验1的串口收发回,将串口接收到的数据暂存在队列中,待完成一次接收后再将队列中的数据全部发出去。
    的头像 发表于 10-27 13:51 1559次阅读
    基于环形队列的<b class='flag-5'>UART</b><b class='flag-5'>收发回</b><b class='flag-5'>显</b><b class='flag-5'>实验</b>

    can波特率计算

    can波特率其实并不难计算,这里给出了can波特率的简单计算,并给出了实例STM32的CAN波特率计算
    发表于 12-14 17:02 1.4w次阅读
    can<b class='flag-5'>波特率</b><b class='flag-5'>计算</b>

    基于灵动微电子MM32F013x 系列的UART硬件自适应波特率

    嵌入式工程师在开发产品中经常会用到MCU的片上UART和其它模块进行通信,为了在某些非正常的恶劣环境下能正常使用串口通信,可能需要对UART通信波特率进行自适应校准,在我们之前的微课堂中讲解过关
    的头像 发表于 02-15 09:09 5185次阅读
    基于灵动微电子MM32F013x 系列的<b class='flag-5'>UART</b>硬件自适应<b class='flag-5'>波特率</b>

    什么是串口波特率?串口波特率的分类及应用详解

    什么是串口波特率串口波特率是指串口通信系统中传输数据的速率。在UART串口通信中,数据以位(bit)的形式传输,波特率是指每秒钟传输的位数。在串口通信中,
    的头像 发表于 08-08 10:09 7866次阅读
    什么是串口<b class='flag-5'>波特率</b>?串口<b class='flag-5'>波特率</b>的分类及应用详解

    请问如何使用低功耗 UART (LP UART波特率补偿?

    如何使用低功耗 UART (LP UART波特率补偿?
    发表于 08-21 07:05

    如何为单个uart配置不同的波特率

    自动检测输入波特率。D然后可以根据波特率来相应地起作用所以有人能告诉我如何为相同的UART组件配置不同的波特率吗?注:实际上,如果我设置单独的波特率
    发表于 10-31 10:00

    基于FPGA的波特率连续可调UART接口

    在FPGA上设计了一种波特率连续可调的UART接口,该接口符合RS-232C通信协议。将波特率转换为比特持续时间,在固定工作时钟频率下通过改变比特持续时间来实现波特率的连续可调,并将比
    发表于 06-01 09:56 10次下载

    关于UART/CAN/PLL时钟计算波特率的方法

    SWM系列关于UART/CAN/PLL等时钟相关模块,计算波特率的方法。
    的头像 发表于 03-18 16:52 9243次阅读

    串口通讯波特率出现误差的因素

    串口通讯(UART)是一种异步通讯,收发双方需要按照约定的波特率进行通讯。当波特率出现误差时,会导致通讯出错。那导致波特率出现误差的因素都有
    的头像 发表于 07-03 17:40 1.2w次阅读

    MAX3108 UART波特率编程

    MAX3108是一款高性能通用异步收发器(UART),采用晶圆级封装(WLP),具有许多硬件高级特性,从单独的128字发送和接收FIFO到广泛的硬件介导流控制。MAX3108的大部分功能依赖于时钟的编程。因此,第一个编程任务是设置适当的
    的头像 发表于 02-20 11:42 1278次阅读
    MAX3108 <b class='flag-5'>UART</b>的<b class='flag-5'>波特率</b>编程

    串口波特率误差产生的原因

    UART全称Universal Asynchronous Receiver/Transmitter,通用异步收发器,是一种非常常见的异步收发协议,在嵌入式领域应用十分广泛。收发双方按照
    的头像 发表于 04-13 16:20 8066次阅读
    串口<b class='flag-5'>波特率</b>误差产生的原因

    CW32单片机UART波特率设置介绍

    CW32单片机UART波特率设置介绍
    的头像 发表于 10-24 17:35 1597次阅读
    CW32单片机<b class='flag-5'>UART</b><b class='flag-5'>波特率</b>设置介绍

    如何实现适用于多个标准波特率的全双工UART接口

    电子发烧友网站提供《如何实现适用于多个标准波特率的全双工UART接口.pdf》资料免费下载
    发表于 11-28 10:55 0次下载
    如何实现适用于多个标准<b class='flag-5'>波特率</b>的全双工<b class='flag-5'>UART</b>接口

    uart波特率和传输频率的关系 UART串口的常用波特率为多少

    UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的异步串行通信技术,它允许两台设备之间进行双向数据传输。在UART通信中,波特率和传输
    的头像 发表于 10-06 16:12 8858次阅读
    <b class='flag-5'>uart</b><b class='flag-5'>波特率</b>和传输频率的关系 <b class='flag-5'>UART</b>串口的常用<b class='flag-5'>波特率</b>为多少