如何在uart中接收字符串。我使用了AVR Studio 5和brays终端这样一个接收字符串
同这张照片我使用的9600波特率走到我尝试键入"abcdef"
,它只是出来"abcf"
。
我的代码是这样的--->
#include <avr/io.h>
void serial_init(void)
{
UBRRH = 0x00;
UBRRL = 95; //baudrate 9600 and F_CPU 14745600UL
UCSRB = (1 << RXEN) | (1 << TXEN) | (1<<RXCIE);
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0)|(1 << UCSZ1);
}
unsigned long long Usart_Receive(void)
{
while((UCSRA & (1 << RXC)) == 0) {};
return UDR;
}
void USART_Transmit(unsigned long c)
{
PORTD= 0b00000100; //RTS Enable
while ((UCSRA & (1 << UDRE)) ==0) {};
UDR = c;
PORTD= 0b00000000; //RTS Disable
}
int main(void)
{
unsigned char data;
serial_init();
while (1)
{
data = Usart_Receive();
_delay_ms(100);
USART_Transmit(data);
}
return 0;
}
就这么简单,但我无法找到我的问题,为什么只出现在终端4封信。我希望有人能为此提供帮助。 谢谢。
我想知道为什么UART接收函数返回'unsigned long long',特别是,在像AVR这样的8位MCU中? –
'_delay_ms(100)的用途是什么? USART_Transmit(数据);'在主程序中? – pingul
你确定上面的代码是正确的吗?你声明'USART_Receive',然后调用'Usart_Receive'。您还可以将'Usart_Receive'的返回值分配给'unsigned char',这很可能是'unsigned long long'。并且你只传递一个字符到'USART_Transmit',但是在函数内部它是一个'unsigned long'转换成关于'_delay_ms(100);'@pingul'的'unsigned long long' –