首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ATmega16的USART问题

ATmega16的USART问题
EN

Stack Overflow用户
提问于 2014-03-08 17:17:39
回答 4查看 3.5K关注 0票数 0

我有一个ATMega16,并且循环了Rx Tx (刚刚将Rx连接到Tx),在一个循环中发送和接收一个字符。但我似乎只收到0x00,而不是我发送的char。我将CPU配置为1 1MHz。但我的想法是,既然Rx和Tx只是循环,我设置的速度应该没有关系,因为两者是相同的?

所以基本上,我正在尝试让LED在收到正确的字符时在PORTC闪烁。

代码如下:

代码语言:javascript
运行
复制
#ifndef F_CPU
#define F_CPU 10000000
#endif

#define BAUD 9600
#define BAUDRATE ((F_CPU)/(BAUD*16)-1)
#include <avr/io.h>
#include <util/delay.h>



void uart_init(void){
    UBRRH = (BAUDRATE>>8);
    UBRRL = BAUDRATE;
    UCSRB = (1<<TXEN) | (1<<RXEN);
    UCSRC = (1<<URSEL) | (1<<UCSZ0) | (1<<UCSZ1);
}

void uart_transmit (unsigned char data){
    while (!(UCSRA & (1<<UDRE)));
    UDR = data;
}

unsigned char uart_recive(void){
    while(!(UCSRA) & (1<<RXC));
    return UDR;
}

int main(void)
{
    uart_init();
    unsigned char c;
    PORTC = 0xff;
    DDRC = 0xff;
    while(1)
    {
        _delay_ms(200);
        uart_transmit(0x2B);
        c = uart_recive();
        if(c==0x2B){
        PORTC = PORTC ^ 0xff;
        }
    }
}

有没有想到我做错了什么?

EN

回答 4

Stack Overflow用户

发布于 2014-03-08 17:31:58

代码看起来是正确的。

你可能需要检查的东西:

  • 如果您的波特率是您应该拥有的波特率如果您尝试发送类似于'p'的字符;现在您正在向'+'
  • check发送您的端口配置,并查看它是否与您的configuration

匹配

我认为最后一个是问题所在。

您可以从ATMega手册中尝试以下代码:

代码语言:javascript
运行
复制
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);

在构建你的程序之后,进入你的端口配置,并确保它设置为8位数据格式和2个停止位。然后在你的微控制器上测试它,看看会发生什么。请带着结果回来。

票数 0
EN

Stack Overflow用户

发布于 2014-03-09 21:08:16

考虑实际波特率精度。例如参见http://www.wormfood.net/avrbaudcalc.php?postbitrate=9600&postclock=1,AVR对9600波特@1 1MHz时钟提供7.5%的误差,这是相当高的误差。取决于您发送和接收的内容。“通常”你会看到一个垃圾,如果你永久收到0x00s,这看起来是另一个问题。

票数 0
EN

Stack Overflow用户

发布于 2014-03-14 21:51:09

您的F_CPU设置为10 set 。你会说它被配置为1 1Mhz。

如果你真的激活了水晶,也要检查你的保险丝。如果你只是使用内部振荡器:它有一个相对较大的错误,所以你的UART计时可能会被破坏(我使用内部振荡器进行调试从来没有遇到过问题)。

另一个错误来源可能是您的F_CPU定义。大多数情况下,这个预处理器常量已经在Makefile (或集成开发环境项目设置)中定义了(可能也是错误的),因此代码中的#define不会受到#ifndef的影响

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22267430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档