Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 9 months ago.
USB以外のシリアル通信について
mbed LPC824 の dp11(TX) と dp12(RX) を通してシリアル送受信しようとしましたが通信できません。 dp11 をオシロで見てみましたがまったくデータが出ていません。 プログラムは下記のようにしており、LEDは正常に点滅しているのですが。 どうしてでしょうか?(Switch Matrix が正常に設定されていない?)
Serial with dp11 and dp12
DigitalOut myled( dp15 ); Serial mSerial( dp11, dp12 ); int main() { mSerial.baud( 9600 ); mSerial.format( 8, Serial::None, 1 ); while(1) { mSerial.printf( "On\n" ); myled = 1; wait(0.5); mSerial.printf( "Off\n" ); myled = 0; wait(0.5); } }
Question relating to:
1 Answer
9 years, 7 months ago.
高橋さん、こんばんは。
私の方でも現象が再現しました。調べてみたところ、LPC824 HALの serial_api.c の format() 関数内で、CFGレジスタのイネーブルビットを上書き処理していました。そのため、ユーザコードから Serial::format() 関数が呼び出されると、該当するシリアルポートがdisableされるようになっていました。
mbed SDK 側は、テストを行った後に修正版の pull request を出します。
修正が反映されるまでの回避策としては、format()関数を使用しないか、または以下のように format() 関数を呼び出した後に、CFGレジスタ内のENビットを有効にすることで動作可能になります。
#include "mbed.h" DigitalOut myled( dp15 ); Serial mSerial( dp11, dp12 ); int main() { mSerial.baud( 9600 ); mSerial.format(8, SerialBase::None, 1 ); LPC_USART0->CFG |= 1; // Enable USART0 while(1) { mSerial.printf( "On\n" ); myled = 1; wait(0.5); mSerial.printf( "Off\n" ); myled = 0; wait(0.5); } }
以上、宜しくお願いします。