ラップトップからマイクロコントローラに送信されたデータをUART経由で読み取る際に問題があります。送信部はうまく動作します。問題なくラップトップにデータを送信できますが、データをエコーしたり、ラップトップからキーボード入力データを読み取ったりすることはできません。私は、ポーリングとRx割り込みルーチンの両方を読むことを実装しようとしましたが、成功しませんでした。私が使用しているマイクロコントローラはATMEGA2560で、私はFTD1232 USB to TTLシリアルコンバータ経由でノートパソコンに接続しています。UART受信キーボード入力が機能しない
私はパテをシリアル通信端末として使用し、Arduino IDEをプログラミング用に使用しています。
私はこの問題が次のハードウェアにないと仮定しています。 - 別のUSARTを初期化しようとしましたが、別のUSBポート、TTLコンバータ、さまざまなワイヤを使用しようとしました。同じ。私はまた、すべてのデバイスに十分な電圧を供給するために別の電源を接続しました。
Rx割り込みが発生したとき(端末に何かを入力したとき)にLEDを点灯させて、少なくとも応答を得ようとしています。
〜
#define F_CPU 16000000UL //16MHz
#define BAUD 115200UL //bps
#define BAUD_PRESCALER (((F_CPU/(BAUD*8UL)))-1) //Table 101, page 212
volatile uint8_t temp;
void UART_init(){
//Set baud rate
UBRR0H = (uint8_t)(BAUD_PRESCALER >> 8); //Higher portion of the baud rate
UBRR0L = (uint8_t)BAUD_PRESCALER; //Lower portion of the baud rate
//Enable Receiver and Transmitter
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
//Set frame format: 8-bit format, 1 stop bit, no parity
UCSR0C |= (3 << UCSZ00);
UCSR0C &= ~(1 << USBS0); //clear for 1 stop bit
//Set Double Speed Asynchronous mode
UCSR0A |= (1 << U2X0);
UCSR0B |= (1 << RXCIE0); //Enables interrupt rxc
}
uint8_t UART_getchar(){
//Wait for RXC flag
while(!(UCSR0A & (1 << RXC0))){};
return UDR0;
}
//Arduino setup()
void setup(){
pinMode(8, OUTPUT);
UART_init();
sei();
}
//Arduino loop()
void loop(){
delay(500);
UART_putchar('a');
}
ISR(USART0_RX_vect){
temp = UDR0;
digitalWrite(8, HIGH);
}
それは長ったらしいポストですが、私は具体的にしても、全体のコードを投稿してみました。 ATMEGA2560用に使用しているデータシートはhereです。
マイパテの設定は:
あなたのL既にEDコード(すなわち、自由にオン/オフすることができます)。あなたはrecvピン/ワイヤを含むすべての接続を確認するために、ポーリングモードでrecvを試しましたか(つまり、割り込みを使用しないでください)?ポーリングが動作すると、割り込みをデバッグします。あなたのinitと_seems_ okayをチェックしましたが、OR/ANDの代わりに明示的な代入を使用した方が幸いです。 **誤って9ビット**モードを設定していないことを確認してください。[219ページ] 3番目のUSCZビットはUCSRB [および、下位2つのUCSRCと同じです。そして、227ページから始まるレジスタのビット定義を見てください。 '.h'をdocにクロスチェックしてください。 –
ArduinoはCではありません! [ask]を参照し、スニペットだけでなく[mcve]を提供してください。 – Olaf
1つを選択:ポーリングまたはRX ISR。そしてArduino SerialもISRを使用していることを忘れないでください。 – KIIV