デバイスをAtMega2560のUART0に接続しました。 UART0データをUART2に転送して、ターミナル(PC)で表示したいと思います。AtMega2560のUART0〜UART2ゲートウェイ(種類)
UARTからシリアルデバイス(FTDI)を使用してデバイスをPCに直接接続すると、データがうまく送信されます。
私は目的が言ったために途中でUART2を入れると、それだけで具体的には、最初の行を送信します。
Ver V2DAPV142 On-Line:
そしてが忘れ。時にはそれも最初の行を送信しません。
コード:
#define UART0_BUFFER_SIZE 40
#define RX_WAIT 65000
volatile unsigned char UART0_rx_ArrUC85[UART0_BUFFER_SIZE];
volatile unsigned char UART0_rx_ArrLength = 0, UART0_rx_ArrIndex = 0;
void uart0_init(unsigned int baudrate)
{
UBRR0H = (unsigned char) (baudrate>>8);
UBRR0L = (unsigned char) baudrate;
UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1<<RXCIE0);
UCSR0C = (1 << USBS0) | (1 << UCSZ01) | (1 << UCSZ00); // 8N1
}
void USART2Init(UINT16 ubrr_value)
{
UBRR2L = ubrr_value;
UBRR2H = (ubrr_value>>8);
UCSR2C|=(3<<UCSZ20);
UCSR2B = (1<<RXEN2) | (1<<TXEN2);
}
ISR(USART0_RX_vect)
{
unsigned char recChar = UDR0;
if (UART0_BUFFER_SIZE > UART0_rx_ArrLength)
{
UART0_rx_ArrUC85[UART0_rx_ArrIndex++] = recChar;
UART0_rx_ArrLength = UART0_rx_ArrIndex;
}
}
void uart2_putchar(UINT8 data)
{
//Local variables
unsigned int i;
for(i = 0; !(UCSR2A & (1 << UDRE2)); i++) // Wait for empty transmit buffer
{
if(i > RX_WAIT) // How long one should wait
{
return ; // Give feedback to function caller
}
}
UDR2 = data; // Start transmitting
//return (int)data; // Cast and return int value
}
void uart2_puts(unsigned char *str)
{
UINT8 dat;
for(;*str != '\0';)
{
dat= *str++ ;
uart2_putchar(dat);
}
}
int main()
{
USART2Init(8);
uart0_init(103);
sei();
while(1)
{
if(UART0_rx_ArrLength>0)
{
uart2_puts((unsigned char *) UART0_rx_ArrUC85);
UART0_rx_ArrLength = UART0_rx_ArrIndex = 0;
}
}
}
何の問題である可能性があります。 UART0とUART2についても同じボーレートでチェックしました。
あなたは両方のUARTを試しましたが、正しく動作しましたか?あなたは、PCにuart0を接続し、(例えば)hiperterminalでそれを試してから、uart2で同じことをする必要があります。両方とも動作するかどうか教えてください。 – webbi
問題はすべてのソフトウェアではありませんでした。それはcktの電力レベルの問題でした。それが暑くなったら、UART#でデータを送信しません。今それは動作します。それを理解するために2日間かかった。私の仕事の圧力は、私がここでそれを更新することを許していない。 :|とにかく応答していただきありがとうございます..私は現在、 '磁力計の問題'アウトを考えています。参照してください:http://electronics.stackexchange.com/questions/21007/magnetometer-dynamic-calibration/21249#21249 – Rick2047
偉大な!他の人がそれが解決されたことを知ってくれるように質問に答えることができるかもしれないと思います。ありがとう! – webbi