シリアル通信がうまくいきません

01 Feb 2019

RS-485規格通信の実験をしているのですが、UARTの入出力を切り替えるピン(D4)の動作タイミングが合いません。 UARTはボーレートは2Mbps, データビットは8bit, 1bit ストップビット, パリティなしです。

main.cpp

#include "mbed.h"
 
Serial rs485(D8, D2, 2e6);
Serial pc(USBTX, USBRX, 9600);
DigitalOut dir(D4);
 
int main()
{
    while(1) {
        dir.write(true);
        rs485.putc(0x54);
        dir.write(false);        //←送信終了後、レスポンスの監視の為に同時に切り替えたい。
        wait_us(18);
 
        while(rs485.readable()){  //←受信できない
            pc.putc(rs485.getc());
        }
        wait_us(120);
 
    }
}

mbed上で実現できる範囲で対策すべき点はありませんか。

03 Feb 2019

具体的に必要なタイミングや波形などが分からないので何とも言えませんが、Streamクラスを継承しないRawSerialクラスがありますので、そちらを試してみてはいかがでしょうか?

https://os.mbed.com/docs/mbed-os/v5.11/apis/rawserial.html

Please log in to post a reply.