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