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.
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; } }
どうしたらいいかわかりません。どなたか教えていただけませんか。 よろしくお願いします。