• <i id="jb6ye"><bdo id="jb6ye"></bdo></i>
    1. <b id="jb6ye"><bdo id="jb6ye"><tr id="jb6ye"></tr></bdo></b><tt id="jb6ye"><tr id="jb6ye"><dfn id="jb6ye"></dfn></tr></tt><track id="jb6ye"><big id="jb6ye"></big></track>
    2. 专注电子技术学习与研究
      当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

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

      作者:佚名   来源:本站原创   点击数:  更新时间:2013年10月13日   【字体:

        公司有一款产品要实现通过串口更新开机画面的功能。产品用的是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

      关闭窗口

      相关文章

      68日本xxxxxxxxx,水萝拉日语中字在线,德国videos高清,欧美色图片 网站地图