打印
[AVR单片机]

at90can串口工作异常,恳请大家指点!

[复制链接]
877|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
842022884|  楼主 | 2016-3-17 20:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
同样的程序,串口调试助手向下发0x55,在atmega128上就能正常接收,在at90can128里接收到的一直是0xFF,偶尔还不能引起中断。
调了半个星期了,毫无进展,还请各位帮忙看看。
开发平台为as7,串口设置代码如下
void record_gyro()
{
        UCSR0B=0x00;                                 //设置前关闭串口
        UCSR0A=0x00;                                 //单倍速模式
        UCSR0C=(1<<UCSZ11)|(1<<UCSZ10);              //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
        UBRR0H=baud_h;                                    //写波特率的值
        UBRR0L=baud_l;
        UCSR0B=0x90;   
}

接收服务程序如下
ISR(USART0_RX_vect)                                //中断服务程序
{
    Re_buf[counter_gyro]=UDR0;                       //将接收到的数据取出
    if(counter_gyro==0&&Re_buf[0]!=0x55) return;     //第0号数据不是帧头,跳过
       counter_gyro++;
        if(counter_gyro==8)                              //接收到8个数据
    {
       counter_gyro=0;                               //重新赋值,准备下一帧数据的接收
       if(Re_buf[1]==0x53)                           //判断角度包包头               
           {
                  UCSR0B=0x00;                               //关闭接收陀螺仪数据
                  sign_gyro=1;                               //置位标志位
       }
    }       
}

用mk2调试,每次都不能收到调试助手发的0x55信号,直接return出去。如果改成0xFF才往下走。
调试助手换了好几种,usb转ttl的也换过。同样的程序在mega上就能行,快崩溃了,。。

相关帖子

沙发
842022884|  楼主 | 2016-3-18 12:01 | 只看该作者
已经通过示波器搞定,datasheet上有错,分频系数比mega小13倍

使用特权

评论回复
板凳
842022884|  楼主 | 2016-3-21 18:22 | 只看该作者
更正说法……我之前是忘记取消预分频的8分频,也就是我那块芯片自己莫名就进行了八分之十三分频。后来换了一块芯片,取消预分频,就正常了。如有后人这款芯片调不通,可配合示波器看看有没有和我遇到一样的被芯片自动分频的问题。

使用特权

评论回复
地板
842022884|  楼主 | 2016-3-21 18:23 | 只看该作者
现在回想一下,八分之十三。。也就是1.625分频。。那块芯片也是没谁了。。

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
dirtwillfly + 6 赞一个!
5
SD10A| | 2016-3-22 20:06 | 只看该作者
我倒是有个AT90CAN32   还没装板子  你有PCB 图没

使用特权

评论回复
6
dirtwillfly| | 2016-3-24 21:43 | 只看该作者
842022884 发表于 2016-3-21 18:23
现在回想一下,八分之十三。。也就是1.625分频。。那块芯片也是没谁了。。 ...

赞一个,感谢分享经验

使用特权

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

本版积分规则

1

主题

5

帖子

0

粉丝