can-boucle.ino
L'ADN industriel de la GIGA : son FDCAN relié à un connecteur dédié. Deux GIGA reliées (CANH/CANL + masse, 120 Ω en bout) échangent des trames à 500 kbit/s — l'automatisme commence là.
Matériel requis
Une carte Arduino Giga R1 (STM32H747 double cœur M7 480 MHz + M4, 76 E/S, 2 DAC, FDCAN) alimentée par USB-C ou 5-24 V. 2 cartes avec transceiver CAN (ou un adaptateur USB-CAN) + résistance 120 Ω.
Branchement
CANTX/CANR/GND côté MCU : il FAUT un transceiver SN65HVD230 entre la carte et le bus. CANH-CANH, CANL-CANL, masses communes, 120 Ω aux deux extrémités.
Fonctionnement
CAN.begin arme le FDCAN à 500 kbit/s ; beginPacket/endPacket encapsule la trame standard 11 bits. onReceive est appelé en interruption sur trame reçue. Dans l'Arduino IDE, installez la plateforme « Arduino Zephyr-based Boards » (ou Mbed), choisissez « Arduino Giga R1 », puis Téléverser. Logique 3,3 V.
Pour aller plus loin
Protocole maison (ID = capteur, données = 4 octets float), ou bus vers un module moteur pas-à-pas 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");
}
}