打印
[AVR单片机]

UART 通信问题,求指点

[复制链接]
1668|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
strorn|  楼主 | 2012-11-25 16:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序很短,调试了很久,没有解决,去拿示波器抓了一下波形,帧格式是7位或者6位数据位,因为停止位的高电平和数据位的第七位(bit6)分不清,而且UCSRC 无法设定,即DEBUG的时候,执行了如下MAIN的第一条指令后,IO VIEW窗口的UCSRC仍然全0,不知道是什么原因造成,且RXD,TXD通过1K上拉到VDD5V,这两口没有接其他器件。
#include<avr/io.h>
#include<avr/interrupt.h>
#define F_CPU 1000000  //CPU 时钟为1MHz
#define BAND 9600  //设置波特率为9600
int main(void)
{
  UCSRC |=(1<<URSEL)|(3<<UCSZ0);  //八位数据长度,一位停止位,无校验位;
UBRRH = (F_CPU/BAND/16 -1)/256;
UBRRL = (F_CPU/BAND/16 -1)%256;
UCSRB |= (1<<RXEN)|(1<<TXEN);
// sei();

while(1)
{
while(!(UCSRA & (1<<UDRE)));
UDR = 0x55;
}
  F5之后,串口助手的数据重复:A5...B5....没有什么规律,高手指点下


}

相关帖子

沙发
dqyubsh| | 2012-11-25 21:51 | 只看该作者
GCC编译器?试着把UCSRC |=(1<<URSEL)|(3<<UCSZ0);分成两行写。

波特率那直接查表赋值,那个公式可能有误差。还有那个1M时钟是内部晶振吧,可能也不准,有条件换个外部晶体试一下。

使用特权

评论回复
板凳
strorn|  楼主 | 2012-11-27 19:58 | 只看该作者
分写成两行试过,但发出来的帧格式也不对 ,换外部晶振要配置熔丝位吧,那个还没弄过,搞 的郁闷

使用特权

评论回复
地板
zd420325| | 2012-11-28 22:31 | 只看该作者
内部晶振是有误差,还挺大的,换外振吧做通信的话,我遇到过。

搞AVR滴都要配熔丝位啊。

使用特权

评论回复
5
zhaobinbin| | 2012-11-30 17:13 | 只看该作者
您是否考虑过电平的转换 管脚是TTL电平而串口是232电平

使用特权

评论回复
6
strorn|  楼主 | 2012-12-3 22:03 | 只看该作者
嗯,我换个陶瓷8M的试试吧,

使用特权

评论回复
7
joyme| | 2012-12-6 10:09 | 只看该作者
1M的频率做串口通信本身误差就比较大,最好用11.0592M外部晶振

使用特权

评论回复
8
aifang| | 2012-12-6 11:15 | 只看该作者
AVR的内部晶振很不准确吗?有多大误差啊?

使用特权

评论回复
9
qin552011373| | 2012-12-15 13:30 | 只看该作者
你先重新配置一下熔丝位  还有问题的话  再来发帖吧

使用特权

评论回复
10
li_thomas| | 2012-12-18 13:48 | 只看该作者
aifang 发表于 2012-12-6 11:15
AVR的内部晶振很不准确吗?有多大误差啊?

串口通信不能用内部RC,这是常识。ATMEL的文档上没有标识内部RC的准确度,据说在不同的温度下,最大偏差可以达到50%,而串口的最大容错是10%。所以必须一定要用外部晶振

使用特权

评论回复
11
zf_015820| | 2012-12-18 15:59 | 只看该作者
建议:换晶振:11.0592MHZ;一般这种情况,基本都是晶振与数据发送及接收端不同步所致

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我本楚狂人,凤歌笑孔丘

0

主题

17

帖子

0

粉丝