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.
10 years, 8 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
10 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);
}
}
以上、宜しくお願いします。