文章目录
概要
第一次写点东西。
源于最近的一次单片机串口通信失败。原来单片机用的16MHz晶振,串口通信115200到9600波特率都能通信成功,但是换成8MHz时别的波特率也都能成功,唯独115200波特率不能成功。查阅了大量的国内外文章后终于知道了为什么。
原因
ATMEGA单片机串口有三种模式:
这里涉及到的主要时前两种模式,可以看到不同模式下波特率的计算公式是不一样的。
Normal Mode:根据解释只有特别低的速率时才适合使用,比如UBBRn已经超过了4095,那么就只能使用Normal Mode了;
Double Speed Mode:根据解释,适合用于波特率要求比较精确或者速率比较高的场合
不同晶振和实际波特率对比
这里计算了Double Speed Mode下的对比:
波特率实际做成了excel可以下拉的。其他波特率对应的就不列举了,需要的可以下载。
小结
从上表就可以看出来,9600波特率下16M晶振和8M晶振都没问题。但是在115200波特率下8M晶振实际的波特率误差达到8.51%,通信失败!
解决方法可以采用7.3728M晶振,但是实际找了很多这个频率SMD3225封装竟然没有石英晶振。其他的频率比如11.0592M晶振,对串口也是比较友好的。
希望对大家有用。