您的位置 首页 解答

AVR单片机串口的波特率设置

公司有一款产品要实现通过串口更新开机画面的功能。产品用的是AVR的ATmega8单片机,配有两个通用同步和异步串行接收器和转发器(USART)。

公司有一款产品要完成经过串口更新开机画面的功用。产品用的是AVR的ATmega8单片机,配有两个通用同步和异步串行接收器和转发器(USART) 。在芯片的数据文档里给出了波特率寄存器UBRR的值的核算公式。

但是实践测验才发现,就算出的值底子不能用。也就是说,用算出的值宣布的波特率底子不是想要的波特率。百思不得其解,只好上网搜搜看有没有收成。公然,网上有个仁兄的症状和我相同,也是波特率不对。看了后边的答复,觉得有一个挺靠谱的,大概是说,在用了AVR的内部RC振荡器的情况下,实践波特率会和核算值有误差。由于芯片的内部RC振荡器频率不像外部晶振的频率那么安稳。
在不添加外部晶振的情况下,怎么解决问题呢?在网没有找到什么办法,只好自己用笨办法了。上示波器,看单片机宣布的波形的宽度,和规范的波特率的宽度比照,再一点点的在UBRR的核算值的基础上批改,直到单片机宣布的波形正确停止。
以下是我测验出的一组UBRR的实践值,希望对有需求的朋友有用。

注:
芯片型号:ATmega8L 运用形式:异步倍速形式(U2X = 1) 时钟源:内部RC振荡器 时钟频率:8Mhz
波特率寄存器(UBRR)核算公式:UBRR = f / (8*BAUD) – 1 (其间BAUD为希望波特率的值,f为时钟频率的值)

波特率

UBRR实践值

UBRR核算值

9600

96

103.16

14400

64

68.44

19200

48

51.08

28800

31

33.72

38400

22

25.04

56000

15

16.85

57600

15

16.36

115200

未测验

7.68

128000

未测验

6.81

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/318228.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部