Important changes to questions
We’re making some changes to Mbed Questions. From 10th December 2019 this site will be archived and new questions should be asked on our new forum site. Until that date you can continue to reply to existing questions here but can’t ask new questions.
2 years, 4 months ago. This question has been closed. Reason: Unclear question
STM32F303K8 CAN通信
Nucleo Board STM32F303K8を二つ使ってCAN通信を試してみました。
MASTER
#include "mbed.h" #include "CAN.h" // 一応入れてみましたけど、なくてもコンパイルは通ります。 Serial pc(SERIAL_TX, SERIAL_RX); CAN can(PA_11, PA_12); // CAN (PinName rd, PinName td) DigitalOut myled(LED1); Ticker ticker; char counter = 0; void send() { pc.printf("Master send()\n"); if(can.write(CANMessage(1337, &counter, 1))) { pc.printf("Master wloop()\n"); counter++; pc.printf("Message sent: %d\n", counter); } myled = !myled; } int main() { pc.printf("main()\n"); // pc.printf("CAN frequency successful: %d\n", can.frequency(100000)); // pc.printf("CAN mode succesful: %d\n", can.mode(CAN::Normal)); ticker.attach(&send, 1); while(1) { pc.printf("Mastetr loop()\n"); wait(0.2); } }
SLAVE
#include "mbed.h" #include "CAN.h" // 一応入れてみましたけど、なくてもコンパイルは通ります。 CAN can(PA_11, PA_12); // CAN (PinName rd, PinName td) Serial pc(SERIAL_TX, SERIAL_RX); DigitalOut myled(LED1); CANMessage msg; void receive() { if(can.read(msg)) { pc.printf("Message received: %d\n", msg.data[0]); } } int main() { pc.printf("main()\n"); // pc.printf("CAN frequency successful: %d\n", can.frequency(100000)); // pc.printf("CAN mode succesful: %d\n", can.mode(CAN::Normal)); can.attach(receive, CAN::RxIrq); while(1) { pc.printf("Slave loop()\n"); if(can.read(msg)) { pc.printf("Message received: %d\n", msg.data[0]); } myled = !myled; wait(0.2); } }
https://docs.mbed.com/docs/mbed-os-api-reference/en/latest/APIs/interfaces/digital/CAN/ リファレンスをマスターとスレーブとしてわけてプログラムにしてみましたが、オシロでみてもどうやらピンの変化すらないようです。 UARTにてデバッグを行ったところ、はじめにマスターから3回だけ送信することができますが、スレーブには届いていません。(このさいピンに変化はありません。送信フラグcan.write(CANMessage(1337, &counter, 1)ははじめの3回のみ更新できているみたいです。) 回路は MASTER PA_12(CAN1_TD)-MCP2551(RXD) PA_11(CAN_1RD)-MCP2551(TXD) MCP2551(CANH)-MCP2551(CANH) SLAVE PA_12(CAN1_TD)-MCP2551(RXD) PA_11(CAN_1RD)-MCP2551(TXD) MCP2551(CANL)-MCP2551(CANL)
CANH-120ohm-CANL CANH-120ohm-CANL としました。
もしよろしければご教授お願い致します。