7 years ago.

UARTでshort int の データーをmbedとmbedの間でやりとりしたい

mbedでshort int のデーターのやり取りをしようとしました。 メインマイコンのピンの状態が1になったらスレーブマイコンがピン割り込みでputcしてデーターを送るのをやってみましたが、うまくいきませんでした。

main(NucleoF303k8)

#include "mbed.h"
//master
/*intからcharへの分解
   分解の際
   dat1 = data % 256;
   dat2 = data / 256;
   復元の際
   data = dat2 * 256 + dat1;
   参考元:https://oshiete.goo.ne.jp/qa/6219385.html
 */
Serial pc(USBTX,USBRX);
Serial device(D5,D4);//スレーブにつないでいるTX,RX
DigitalOut Uart(D8);//ピン変化割り込みに使うピン
DigitalOut led(LED1);//オンボードのLED
Timer timer;
struct {
        char highbyte;
        char lowbyte;
        short intdat;
} data;

int read(){
        Uart = 1;//HIGHにしてスレーブに割り込みさせる
        wait_ms(5);
        Uart = 0;
        wait_ms(300);//待ち時間
        timer.start();
        while(device.readable() == 1) {
                        if(device.getc() == 'H') {//ヘッダ
                                pc.printf("waiting");
                                data.lowbyte = device.getc();
                                data.highbyte = device.getc();
                        }
        }
        data.intdat = data.highbyte*256+data.lowbyte;//復元
        pc.printf("Re %d\r\n",data.intdat);//プリント
}

int main() {
        device.baud(115200);//スレーブの通信速度
        wait_ms(100);
        while(1) {
                pc.printf("start\r\n");
                read();
                wait_ms(100);
        }
}

slave(NucleoF303k8)

#include "mbed.h"
//slave
/*intからcharへの分解
   分解の際
   dat1 = data % 256;
   dat2 = data / 256;
   復元の際
   data = dat2 * 256 + dat1;
   参考元:https://oshiete.goo.ne.jp/qa/6219385.html
 */
Serial pc(USBTX,USBRX);
Serial device(D5,D4);
InterruptIn Uart(D8);//メインマイコンからのピン割り込みピン
DigitalOut led(LED1);//オンボードLED
struct {
        char highbyte;
        char lowbyte;
        short intdat = 0;
} data;

void sendTomaster(){
        data.highbyte = data.intdat%256;//分解
        data.lowbyte = data.intdat/256;//分解
        device.putc('H');//ヘッダ
        device.putc(data.lowbyte);
        device.putc(data.lowbyte);
        led = 0;
        pc.printf("riseing!\r\n");
}

int main() {

        led = 0;
        Uart.rise(&sendTomaster);
        device.baud(115200);
        while(1) {
                data.intdat = 500;//送信したいデータを500にセット
                wait_ms(650);
                led =!led;
        }
}

どうしたらいいかわかりません。どなたか教えていただけませんか。 よろしくお願いします。

1 Answer