0

我正在尝试在 attiny2313 的 uart 上传输一个字节,但传输挂在等待 UDR 可用的循环中。

我正在使用内部 8MHz 时钟。串口配置为 9600baud 8bit 1stopbit

我的初始化代码如下:

#define F_CPU 8000000UL 
#define USART_BAUDRATE 9600UL
#define USART_UBBR_VALUE ((F_CPU / (USART_BAUDRATE << 4)) - 1) 

UBRRL = (uint8_t)USART_UBBR_VALUE;
UBRRH = (uint8_t)(USART_UBBR_VALUE >> 8); 
UCSRB = ((1 << TXEN) | (1<<RXEN));
UCSRC = ((1 << UCSZ1) | (1 << UCSZ0));

在初始化之后,我使用 sei() 启用全局中断。

转移:

while (!(UCSRA & (1<<UDRE)));
UDR = 'B';

它挂在while循环上,当我从设备上断电时,它最终在最后一刻打破while循环并发送B.

我尝试在初始化后添加 200 毫秒的延迟,但没有奏效。

我对 atmega88 使用类似的代码,这工作正常。有人知道为什么它会停留在while循环中吗?

4

0 回答 0