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.
8 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 としました。
もしよろしければご教授お願い致します。