can-boucle.ino
El ADN industrial de la GIGA: su FDCAN ligado a un conector dedicado. Dos GIGA unidas (CANH/CANL + masa, 120 Ω en los extremos) intercambian tramas a 500 kbit/s: el automatismo empieza ahí.
Hardware necesario
Una placa Arduino Giga R1 (STM32H747 doble núcleo M7 a 480 MHz + M4, 76 E/S, 2 DAC, FDCAN) alimentada por USB-C o 5-24 V. 2 placas con transceptor CAN (o un adaptador USB-CAN) + resistencia de 120 Ω.
Cableado
CANTX/CANR/GND lado MCU: HACE FALTA un transceptor SN65HVD230 entre la placa y el bus. CANH-CANH, CANL-CANL, masas comunes, 120 Ω en ambos extremos.
Funcionamiento
CAN.begin arma el FDCAN a 500 kbit/s; beginPacket/endPacket encapsula la trama estándar de 11 bits. onReceive se llama por interrupción en trama recibida. En el Arduino IDE, instale la plataforma « Arduino Zephyr-based Boards » (o Mbed), elija « Arduino Giga R1 » y suba. Lógica de 3,3 V.
Para ir más lejos
Protocolo casero (ID = sensor, datos = float de 4 bytes), o bus hacia un driver de motor paso a paso CAN.
can-boucle.ino
// CAN sur le connecteur CANTX/CANR/GND de la GIGA (pas de transceiver !).
// Relier CANH a CANH, CANL a CANL avec une autre carte, terminaison 120 ohms.
#include <CAN.h>
void setup() {
Serial.begin(115200);
if (!CAN.begin(500000)) {
Serial.println("FDCAN indisponible ?"); for (;;);
}
CAN.onReceive([](int packetSize) {
uint32_t id = CAN.packetId();
while (CAN.available())
Serial.printf("<%03X> %02X ", id, CAN.read());
Serial.println();
});
Serial.println("CAN 500 kbit/s pret");
}
void loop() {
static unsigned long precedent = 0;
if (millis() - precedent >= 1000) {
precedent = millis();
CAN.beginPacket(0x123);
CAN.write((uint8_t)(millis() & 0xFF)); // trame 1 octet
CAN.endPacket();
Serial.println("> 0x123 envoye");
}
}