24#define CAN_BTR_33 (CAN_BTR_SJW(0) | CAN_BTR_BRP(139)| CAN_BTR_TS1(6) | CAN_BTR_TS2(0))
26#define CAN_BTR_50 (CAN_BTR_SJW(0) | CAN_BTR_BRP(59) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
27#define CAN_BTR_83 (CAN_BTR_SJW(0) | CAN_BTR_BRP(35) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
28#define CAN_BTR_100 (CAN_BTR_SJW(0) | CAN_BTR_BRP(29) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
29#define CAN_BTR_125 (CAN_BTR_SJW(0) | CAN_BTR_BRP(23) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
30#define CAN_BTR_250 (CAN_BTR_SJW(0) | CAN_BTR_BRP(11) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
31#define CAN_BTR_500 (CAN_BTR_SJW(0) | CAN_BTR_BRP(5) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
32#define CAN_BTR_1k0 (CAN_BTR_SJW(0) | CAN_BTR_BRP(2) | CAN_BTR_TS1(10) | CAN_BTR_TS2(1))
33#elif defined(STM32F7XX)
34#define CAN_BTR_33 (CAN_BTR_SJW(0) | CAN_BTR_BRP(179)| CAN_BTR_TS1(6) | CAN_BTR_TS2(0))
36#define CAN_BTR_50 (CAN_BTR_SJW(0) | CAN_BTR_BRP(59) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
37#define CAN_BTR_83 (CAN_BTR_SJW(0) | CAN_BTR_BRP(35) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
38#define CAN_BTR_100 (CAN_BTR_SJW(0) | CAN_BTR_BRP(29) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
39#define CAN_BTR_125 (CAN_BTR_SJW(0) | CAN_BTR_BRP(23) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
40#define CAN_BTR_250 (CAN_BTR_SJW(0) | CAN_BTR_BRP(11) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
41#define CAN_BTR_500 (CAN_BTR_SJW(0) | CAN_BTR_BRP(5) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
42#define CAN_BTR_1k0 (CAN_BTR_SJW(0) | CAN_BTR_BRP(2) | CAN_BTR_TS1(14) | CAN_BTR_TS2(1))
43#elif defined(STM32H7XX)
48#define CAN_NBTP_33 0x06950c01
49#define CAN_DBTP_33 0x00950D03
52#define CAN_NBTP_50 0x061F1F10
53#define CAN_DBTP_50 0x001F2003
56#define CAN_NBTP_83 0x061F1803
57#define CAN_DBTP_83 0x001F1833
60#define CAN_NBTP_100 0x061F1402
61#define CAN_DBTP_100 0x001F1423
64#define CAN_NBTP_125 0x061F0F02
65#define CAN_DBTP_125 0x001F0F23
68#define CAN_NBTP_250 0x06130C01
69#define CAN_DBTP_250 0x00130C13
71#define CAN_NBTP_500 0x06090C01
72#define CAN_DBTP_500 0x00090C13
74#define CAN_NBTP_1k0 0x06040C01
75#define CAN_DBTP_1k0 0x00040C13
77#error Please define CAN BTR settings for your MCU!
89#if defined(STM32F4XX) || defined(STM32F7XX)
91#define STM32FxMCR (CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP)
133#elif defined(STM32H7XX)
135 .op_mode = OPMODE_CAN,
145 .op_mode = OPMODE_CAN,
155 .op_mode = OPMODE_CAN,
165 .op_mode = OPMODE_CAN,
166 .NBTP = CAN_NBTP_100,
167 .DBTP = CAN_DBTP_100,
175 .op_mode = OPMODE_CAN,
176 .NBTP = CAN_NBTP_125,
177 .DBTP = CAN_DBTP_125,
185 .op_mode = OPMODE_CAN,
186 .NBTP = CAN_NBTP_250,
187 .DBTP = CAN_DBTP_250,
195 .op_mode = OPMODE_CAN,
196 .NBTP = CAN_NBTP_500,
197 .DBTP = CAN_DBTP_500,
205 .op_mode = OPMODE_CAN,
206 .NBTP = CAN_NBTP_1k0,
207 .DBTP = CAN_DBTP_1k0,
231#if STM32_CAN_USE_CAN3 || STM32_CAN_USE_FDCAN3
253#if STM32_CAN_USE_CAN1 || STM32_CAN_USE_FDCAN1
257#if STM32_CAN_USE_CAN2 || STM32_CAN_USE_FDCAN2
261#if STM32_CAN_USE_CAN3 || STM32_CAN_USE_FDCAN3
295 if (cand->state != CAN_READY) {
296 efiPrintf(
"Interface is not ready");
300#if STM32_CAN_USE_CAN1 || STM32_CAN_USE_CAN2
301 if (cand->can == NULL) {
302 efiPrintf(
"No device assigned!");
305 uint32_t
esr = cand->can->ESR;
306 efiPrintf(
"Receive error counter %ld", (
esr >> 24) & 0xff);
307 efiPrintf(
"Transmit error counter %ld", (
esr >> 16) & 0xff);
308 efiPrintf(
"Last error %ld", (
esr >> 4) & 0x7);
309 efiPrintf(
"Flags: %s %s %s",
310 (
esr & 0x4) ?
"BOFF" :
"",
311 (
esr & 0x2) ?
"EPVF" :
"",
312 (
esr & 0x1) ?
"EWGF" :
"");
const char * hwPortname(brain_pin_e brainPin)
esr("WBO: ESR", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 1940, 1.0, 0.0, 10000.0, "ohm")
static bool isValidCan2RxPin(brain_pin_e pin)
CANDriver * detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx)
static const CANConfig canConfig500
bool isValidCanRxPin(brain_pin_e pin)
static const CANConfig canConfig125
static const CANConfig canConfig1000
static const CANConfig canConfig83
static const CANConfig canConfig50
static const CANConfig canConfig250
static bool isValidCan3RxPin(brain_pin_e pin)
static const CANConfig canConfig100
static bool isValidCan1RxPin(brain_pin_e pin)
bool isValidCanTxPin(brain_pin_e pin)
static bool isValidCan2TxPin(brain_pin_e pin)
const CANConfig * findCanConfig(can_baudrate_e rate)
static bool isValidCan3TxPin(brain_pin_e pin)
static const CANConfig canConfig33
void canHwInfo(CANDriver *cand)
static bool isValidCan1TxPin(brain_pin_e pin)