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 としました。

もしよろしければご教授お願い致します。

1 Answer