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, 3 months ago. This question has been closed. Reason: Duplicate 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); // can receive interrupt 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 としました。
もしよろしければご教授お願い致します。