Skip to content

Commit 9bc2deb

Browse files
committed
make G4 target compileable with CAN support
1 parent 54f0f56 commit 9bc2deb

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

targets/TARGET_STM/TARGET_STM32G4/objects.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ struct analogin_s {
133133

134134
#if DEVICE_CAN
135135
struct can_s {
136-
CAN_HandleTypeDef CanHandle;
136+
FDCAN_HandleTypeDef CanHandle;
137137
int index;
138138
int hz;
139139
};

targets/TARGET_STM/can_api.c

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,12 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz
133133
obj->CanHandle.Init.DataSyncJumpWidth = 0x1; // Not used - only in FDCAN
134134
obj->CanHandle.Init.DataTimeSeg1 = 0x1; // Not used - only in FDCAN
135135
obj->CanHandle.Init.DataTimeSeg2 = 0x1; // Not used - only in FDCAN
136+
#ifndef TARGET_STM32G4
136137
obj->CanHandle.Init.MessageRAMOffset = 0;
138+
#endif
137139
obj->CanHandle.Init.StdFiltersNbr = 1; // to be aligned with the handle parameter in can_filter
138140
obj->CanHandle.Init.ExtFiltersNbr = 1; // to be aligned with the handle parameter in can_filter
141+
#ifndef TARGET_STM32G4
139142
obj->CanHandle.Init.RxFifo0ElmtsNbr = 8;
140143
obj->CanHandle.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
141144
obj->CanHandle.Init.RxFifo1ElmtsNbr = 0;
@@ -145,9 +148,11 @@ static void _can_init_freq_direct(can_t *obj, const can_pinmap_t *pinmap, int hz
145148
obj->CanHandle.Init.TxEventsNbr = 3;
146149
obj->CanHandle.Init.TxBuffersNbr = 0;
147150
obj->CanHandle.Init.TxFifoQueueElmtsNbr = 3;
151+
#endif
148152
obj->CanHandle.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
153+
#ifndef TARGET_STM32G4
149154
obj->CanHandle.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
150-
155+
#endif
151156
can_internal_init(obj);
152157
}
153158

@@ -198,7 +203,9 @@ void can_irq_free(can_t *obj)
198203
else {
199204
return;
200205
}
206+
#ifndef TARGET_STM32G4
201207
HAL_NVIC_DisableIRQ(FDCAN_CAL_IRQn);
208+
#endif
202209
can_irq_ids[obj->index] = 0;
203210
}
204211

@@ -441,14 +448,21 @@ static void can_irq(CANName name, int id)
441448
irq_handler(can_irq_ids[id], IRQ_TX);
442449
}
443450
}
444-
451+
#ifndef TARGET_STM32G4
445452
if (__HAL_FDCAN_GET_IT_SOURCE(&CanHandle, FDCAN_IT_RX_BUFFER_NEW_MESSAGE)) {
446453
if (__HAL_FDCAN_GET_FLAG(&CanHandle, FDCAN_IT_RX_BUFFER_NEW_MESSAGE)) {
447454
__HAL_FDCAN_CLEAR_FLAG(&CanHandle, FDCAN_IT_RX_BUFFER_NEW_MESSAGE);
448455
irq_handler(can_irq_ids[id], IRQ_RX);
449456
}
450457
}
451-
458+
#else
459+
if (__HAL_FDCAN_GET_IT_SOURCE(&CanHandle, FDCAN_IT_RX_FIFO0_NEW_MESSAGE)) {
460+
if (__HAL_FDCAN_GET_FLAG(&CanHandle, FDCAN_IT_RX_FIFO0_NEW_MESSAGE)) {
461+
__HAL_FDCAN_CLEAR_FLAG(&CanHandle, FDCAN_IT_RX_FIFO0_NEW_MESSAGE);
462+
irq_handler(can_irq_ids[id], IRQ_RX);
463+
}
464+
}
465+
#endif
452466
if (__HAL_FDCAN_GET_IT_SOURCE(&CanHandle, FDCAN_IT_ERROR_WARNING)) {
453467
if (__HAL_FDCAN_GET_FLAG(&CanHandle, FDCAN_FLAG_ERROR_WARNING)) {
454468
__HAL_FDCAN_CLEAR_FLAG(&CanHandle, FDCAN_FLAG_ERROR_WARNING);
@@ -501,7 +515,11 @@ void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable)
501515
interrupts = FDCAN_IT_TX_COMPLETE;
502516
break;
503517
case IRQ_RX:
518+
#ifndef TARGET_STM32G4
504519
interrupts = FDCAN_IT_RX_BUFFER_NEW_MESSAGE;
520+
#else
521+
interrupts = FDCAN_IT_RX_FIFO0_NEW_MESSAGE;
522+
#endif
505523
break;
506524
case IRQ_ERROR:
507525
interrupts = FDCAN_IT_ERROR_WARNING;

targets/targets.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2475,7 +2475,8 @@
24752475
"device_has_add": [
24762476
"ANALOGOUT",
24772477
"FLASH",
2478-
"MPU"
2478+
"MPU",
2479+
"CAN"
24792480
]
24802481
},
24812482
"NUCLEO_G474RE": {

0 commit comments

Comments
 (0)