ARM7 串口波特率的设置
UARTn除数锁存是波特率发生器的一部分,它保存了用于产生波特率时钟的APB时钟(PCLK)分频值,波特率时钟必须是目标波特率的16倍。UnDLL和UnDLM寄存器一起构成一个16位除数。其中,UnDLL包含的是除数的低8位,UnDLM包含的是除数的高8位。0x0000被看作是0x0001,因为除数是不允许为0的。在访问UARTn除数锁存寄存器时,除数锁存访问位(DLAB)必须为1。
UARTn小数分频器寄存器(UnFDR)控制产生波特率的时钟预分频器,并且用户可以通过自己的判断对它进行读写操作。
在实际使用中,UARTn波特率公式可采用下列式子表示,在这个式 子中,确定了无小数波特率发生器时产生的那部分UART波特率,以及增加的修正因子:
根据这个表达式,小数波特率发生器部分也可以描述成进行MULVAL/(MULVAL+DIVADDVAL)系数的预分频。
其中,PCLK指外设时钟,UnDL的值由UnDLM和UnDLL寄存器确定(UnDL=256×UnDLM + UnDLL),DIVADDVAL和MULVAL为UARTn小数波特率发生器特定的参数。MULVAL和DIVADDVAL的值应遵循以下条件: 1.0<MULVAL≤15 2.0≤DIVADDVAL≤15 如果UnFDR寄存器值不符合这两个要求,那么小数分频器的输出将不能确定。如果DIVADDVAL为0,那么将禁能小数分频器并且时钟不会被分频。
参考代码如下:
#define MULVAL 5
#define DIVADDVAL 2
#if 0
Fdiv = ( Fpclk/ 16 *MULVAL /(DIVADDVAL+MULVAL) ) / baudrate ; /*baud rate */
U1FDR = DIVADDVAL | (MULVAL << 4) | (U0FDR & 0xffffff00) ;
#endif
Fdiv = ( Fpclk/ 16) / baudrate ; /*baud rate */
//两种方法都可以,前者是使用了小数分频器,后者没有使用。
ps:前者使用和后者未使用使用,得到的Fdiv是不同的,为什么都正确。如有大神看到,还请留言解惑,万分感谢。
ARM7 串口波特率的设置相关推荐
- STM8 串口波特率与设置值不一致问题
最近调试STM8L串口通讯,发现设置了波特率115200,实际波特率却是57600.心想这种问题一般是串口的时钟分频设置不对,找了半天没有找到单独设置串口时钟的地方,费了不少时间. void Uart ...
- ZYNQ开发系列——双串口打印以及串口波特率设置
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列--双串口打印以及串口波特率设置 前言 双串口打印 串口波特率的修改 前言 上一篇,我们遗留了这两个问题: 1. 如果 ...
- GD32F103单片机设置时钟到108MHz,串口波特率错误的问题?
这里写自定义目录标题 使用GD32F103单片机设置系统时钟到108MHz,使用定时器.PWM等外设时候都运行正常,但是初始化串口后波特率始终不对.在网上找了一些解决办法均无效,于是开启调试模式,一步 ...
- linux命令设置波特率,Linux设置串口波特率等参数
stty查看串口参数 stty -F /dev/ttyS0 -a 1 1 查看串口1(/dev/ttyS0)当前的参数,包括波特率.数据位等. stty设置串口参数 stty -F /dev/ttyS ...
- c 语言 如何设置串口波特率,STC89C52RC串口波特率程序
一.完整代码如下:C #include#define uchar unsigned char #define uint unsigned int void send(uchar state) { SB ...
- 计算机的串口波特率,什么是波特率_波特率9600是什么意思_串口通信为什么要设置波特率?...
描述 波特率(Baud Rate) 单位 bps -- 每秒传送的字节数 Byte Per Second.. (BaudRate) 模拟线路信号的速率,也称调制速率,以波形每秒的振荡数来衡量.如果数据 ...
- linux 串口波特率的修改与sdma的设置
最近这几天准备用串口实现DMA的传输数据,刚开始研究三天DMA,结果是一脸懵逼,无奈之下,只能跑去研究串口,结果发现Linux系统串口和DMA是真的难(小白,而且没人一起研究!),芯片手册对应的页数可 ...
- 计算机串口3f8波特率设置,串口波特率转换的实现-硬件方式
串口通信,就是RS-232/RS-485通信,要求通信的双方波特率等通信格式一样才可以通信成功.可是在许多情况下,两种不同格式比如不同波特率的串口也要相互通信,这就必须进行串口波特率等格式的转换.本文 ...
- uboot中串口时钟频率及波特率的设置
本人使用的uboot版本为uboot2012,采用的串口是NS16550,在include/configs/***.h(即板子对应的config文件)中,添加了以下配置选项: /*NS16550 Co ...
最新文章
- Java如何支持函数式编程?
- Java的,与类的初始化顺序
- [蓝桥杯][2013年第四届真题]幸运数-模拟+dfs
- jboss配置ejb容器_JBoss AS 7 EJB3池配置
- leetcode869. 重新排序得到 2 的幂
- vue Method 事件
- RTT内核对象——对象理解
- 2017.3.7 搞笑世界杯 失败总结
- 前女友发来加密的 “520快乐.pdf“,我用python破解开之后,却发现。。。
- Eclipse选择哪个版本
- 学习笔记 卷积网络-dropout
- STM32——电容触摸按键
- ECS的简单入门(二):Entity
- excel 统计数据
- Android Studio修改apk命名
- PostgreSQL 源码解读(216)- 实现简单的扩展函数
- 爬虫基础篇之Scrapy抓取京东
- 生产制造企业用的ERP系统——流程管理
- 清理注册表 php,win10系统如何清理自带注册表
- 《重说中国近代史》—张鸣—(5)古老命题新解(二)
热门文章
- Linux之查看环境变量
- app 打开支付宝扫码付款(当面付)
- 四、SOCKET 协议
- 在不格式化原有系统盘的情况下,利用grub4dos+firadisk制作RamOS VHD Win7总结
- Andriod WIFI 隐藏SSID
- 决策易亮相第七届中国医药健康行业信息化高峰论坛并发表主题演讲
- Linux系统上安装Windows虚拟机(VMware、VirtualBox)
- 华为系统鸿蒙系统更新时间,华为手机升级鸿蒙系统时间确认!这3部华为手机的机会最大...
- WIN10只能打英文打不了中文的解决办法
- LAMP坏境和LNMP环境安装Nagios4.1.1和基本配置