Embedded 为什么在相同波特率的正确输出和正常模式下将uart设置为双速模式不';atmega32中的t?

Embedded 为什么在相同波特率的正确输出和正常模式下将uart设置为双速模式不';atmega32中的t?,embedded,avr,atmega,avr-gcc,atmega16,Embedded,Avr,Atmega,Avr Gcc,Atmega16,为了获得正确的输出,我必须将U2X位设置为1,当我将其设置为0并更改UBRR寄存器的值时,输出就没有意义了。 我检查了数据表中使用的值是否正确,但在U2X=0时并没有给出正确的输出 我的.h文件 #ifndef USRAT_TEST_H_ #define USRAT_TEST_H_ #include <avr/io.h> void USRAT_INIT(uint16_t bd); char USRAT_RECIEVE_CHR(void); void USRAT_SEND_CHR(c

为了获得正确的输出,我必须将U2X位设置为1,当我将其设置为0并更改UBRR寄存器的值时,输出就没有意义了。 我检查了数据表中使用的值是否正确,但在U2X=0时并没有给出正确的输出

我的.h文件

#ifndef USRAT_TEST_H_
#define USRAT_TEST_H_

#include <avr/io.h>
void USRAT_INIT(uint16_t bd);
char USRAT_RECIEVE_CHR(void);
void USRAT_SEND_CHR(char c);
#endif /* USRAT_TEST_H_*/
\ifndef USRAT\u TEST\H_
#定义USRAT\u测试_

#包括

再次查看数据表中的示例,了解UBRR与波特率和时钟的关系。您将看到类似于
#define MYUBRR FOSC/16/BAUD-1
的内容。您的代码计算UBRR将时钟除以8而不是16,因此要使UART正常工作,您必须将时钟加倍。

对不起,我的水晶球现在处于非活动状态。您能否提供有关CPU频率、设置的UBRR、需要的波特率、期望的输出以及您拥有的输出以及您认为它不工作的原因的信息?我可以说U2X的工作原理与数据表中描述的完全相同。发布导致错误结果的代码。描述你期望的结果,以及你得到的结果。那么你的问题可能是可以回答的-奥卡姆的剃刀表明错误是你的,而不是锡尔康,但你没有向我们展示错误-你只是说“我做的一切都是对的,它不起作用”,这当然是胡说八道。你需要告诉我们你做错了什么,而不是断言你没有做错什么。你的作用域显示为你正在使用的设置产生的波特率是多少(当然,按照要求发布你的代码)。很抱歉没有发布代码。我已经编辑了这篇文章,我想把我的模拟照片放进去。如果文件被删除,我会重新制作并尽快放进去。非常感谢。我希望你能帮助我…我把数据表中的值放在正常模式下不工作@AterLux我得到了错误的字符“a”>>“k”、“~”或其他任何东西…你能告诉我U2X对相同波特率有什么影响吗?
#include <avr/io.h>
#define F_CPU 2000000UL
#include <util/delay.h>
#include "USRAT_TEST.h"
void USRAT_INIT(uint16_t bd)
{
    UCSRA = (1<<U2X);//when removing this line and edit F_CPU/8 to F_CPU/16 things go wrong
    UCSRB|=(1<<RXEN)|(1<<TXEN);// enable send and receive
    UCSRC|=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);//8-bit width 
    UBRRL=(F_CPU/8/bd-1);
    UBRRH=(F_CPU/8/bd-1)>>8;
    }
char USRAT_RECIEVE_CHR()
{
    while((UCSRA&(1<<RXC))==0)
    {

    }
    return UDR;
}
void USRAT_SEND_CHR(char c)
{
while((UCSRA&(1<<UDRE))==0)
{

}
 UDR=c;


}
    #include <avr/io.h>
#define F_CPU 2000000UL
#include <util/delay.h>
#include "USRAT_TEST.h"
#include <stdio.h>
char data;
int main(void)
{
        USRAT_INIT(9600);
    /* Replace with your application code */
    while (1) 
    {
        data = USRAT_RECIEVE_CHR(); 
        USRAT_SEND_CHR(data); 
                    }
}