0

pic18f45k22 eusart ペリフェラルを介してシリアルを送信しようとしています。クロックが 16Mhz で動作している場合、メッセージは期待どおりに正確に送信されますが、PLL をオンに設定すると (発振器が 64Mhz で動作するように)、フレーミング エラーが発生します。

新しいクロック周波数に合わせて SPBRG レジスタを変更し、ボーレート ジェネレータを 16 ビット モードと 8 ビット モードの両方に変更しようとしましたが、うまくいきませんでした。

現在のコード:

OSCCONbits.IRCF = 0b111; //change Fosc to 16Mhz
OSCTUNEbits.PLLEN = 1; //enable PLL to multiply Fosc by 4


/*Set baud rates and related registers*/
/*For BRG16 = 1 and BRGH = 1, Baud rate = Fosc/(4([SPBRG:SPBRGH]+1)) */
SPBRGH1 = 0; //Set Baud rate control regs to 34 to give baudrate of 115.2k
SPBRG1 = 138;
BAUDCON1bits.BRG16 = 1; //16 bit mode (baudrate generator)
TXSTAbits.BRGH = 1; //Set high speed baud rate 

事前に感謝します、Huggzorx

4

1 に答える 1

4

私はその特定のチップに精通していませんが、一般的に、これは私のUARTが動作していないときに私が見ているものです.

1) クロックを十分な誤差でボー レートまで分周できますか。コメントのボーレート式が正しいと仮定すると、問題ないと思います。

Baud rate = 16 MHz / (4*(34 + 1)) = 114286  (0.8% error)
Baud rate = 64 MHz / (4*(138 + 1)) = 115107 (0.08% error)

2) チップが生成するはずのボーレートを生成していることを確認してください。一部の PLL は、オンにする方法について非常にうるさいです。また、周辺機器の設定ミスも簡単です。この種の問題を診断するには、オシロスコープが最適です。アクセスできる場合は、PIC の送信ピンを調べて、ビット幅が 8.68us (1/115200) であることを確認してください。

そのサイズの 4 倍 (34.72us) の場合、PLL はロックしていません。少しずれている場合は、式が間違っている可能性があります。

大したことではありませんが、うまくいけば、正しい方向に進むことができます。

于 2011-02-22T20:23:15.220 に答える