mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-25 06:23:53 +01:00
Until now, STM32 MCUs classic CAN support is coded in can.c file. However CAN FD in STM32G4 family is designed in a very different way: * CAN FD channels are independant * CAN FD channel configuration is done in a dedicated RAM block called message RAM, with one message RAM per channel * Each message RAM is divided this way: - 11-bit filter (28 elements / 28 words) - 29-bit filter (8 elements / 16 words) - Rx FIFO 0 (3 elements / 54 words) - Rx FIFO 1 (3 elements / 54 words) - Tx event FIFO (3 elements / 6 words) - Tx buffers (3 elements / 54 words) Due to these design differences with other STM32 MCUs, the choice is made to split the driver in two files: * classiccan.c for STM32 MCUs that support classical CAN. This file has just been renamed (previously can.c) to avoid build conflicts but does not introduce changes * fdcan.c for STM32 MCUs that support CAN FD Message RAM definitions is not provided in CMSIS headers of the STM32G4 family, they are defined in fdcandev_stm32.h. Those definitions could be extracted to a new file for each STM32 families as some differences exist with other STM32 families that support CAN FD (for instance STM32H7). This could be done in a futher commit, according to new families requirements. CAN hardware parameters stay similar and are kept in can_params.h. There are 36 filters per channel: * 28 first filters are standard ID (11 bit) filters * 8 last filters are extended ID (29 bit) filters On each Tx frame sent, the STM32G4 can store Tx events in a dedicated FIFO. This feature is not yet implemented and Tx event FIFO is disabled by default. Automatic retransmission on arbitration loss is enabled by default by the STM32G4. About Rx, if no filter is configured, all frames are accepted by default. Signed-off-by: Gilles DOFFE <gilles.doffe@rtone.fr>
109 lines
3.0 KiB
Makefile
109 lines
3.0 KiB
Makefile
# All stm32 families provide pm support
|
|
|
|
# include stm32 common periph drivers, clock configurations and vectors
|
|
USEMODULE += periph stm32_clk stm32_vectors
|
|
|
|
ifneq (,$(filter periph_usbdev,$(FEATURES_USED)))
|
|
ifneq (,$(filter f2 f4 f7 h7 u5,$(CPU_FAM)))
|
|
# Whole STM32 families F2, F4, F7, H7 and U5 use the Synopsys DWC2 USB OTG core
|
|
USEMODULE += usbdev_synopsys_dwc2
|
|
USEMODULE += ztimer
|
|
USEMODULE += ztimer_msec
|
|
else ifneq (,$(filter stm32f105% stm32f107%,$(CPU_MODEL)))
|
|
# STM32F105xx and STM32F107xx also use the Synopsys DWC2 USB OTG core
|
|
USEMODULE += usbdev_synopsys_dwc2
|
|
USEMODULE += ztimer
|
|
USEMODULE += ztimer_msec
|
|
else ifneq (,$(filter stm32l47% stm32l48% stm32l49%,$(CPU_MODEL)))
|
|
# STM32L475xx, STM32L476xx, STM32L485xx, STM32L486xx and STM32L496xx
|
|
# also use the Synopsys DWC2 USB OTG core
|
|
USEMODULE += usbdev_synopsys_dwc2
|
|
USEMODULE += ztimer
|
|
USEMODULE += ztimer_msec
|
|
else ifneq (,$(filter stm32l4a% stm32l4p% stm32l4q% stm32l4r% stm32l4s%,$(CPU_MODEL)))
|
|
# STM32L4Axxx, STM32L4Pxxx, STM32L4Qxxx, STM32L4Rxxx and STM32L4Sxxx
|
|
# also use the Synopsys DWC2 USB OTG core
|
|
USEMODULE += usbdev_synopsys_dwc2
|
|
USEMODULE += ztimer
|
|
USEMODULE += ztimer_msec
|
|
endif
|
|
endif
|
|
|
|
ifneq (,$(filter periph_uart_nonblocking,$(USEMODULE)))
|
|
USEMODULE += tsrb
|
|
endif
|
|
|
|
ifneq (,$(filter stm32_eth_%,$(USEMODULE)))
|
|
USEMODULE += stm32_eth
|
|
endif
|
|
|
|
ifneq (,$(filter stm32_eth_tracing,$(USEMODULE)))
|
|
FEATURES_REQUIRED += periph_gpio_ll
|
|
endif
|
|
|
|
ifneq (,$(filter stm32_eth_auto,$(USEMODULE)))
|
|
USEMODULE += stm32_eth_link_up
|
|
endif
|
|
|
|
ifneq (,$(filter stm32_eth,$(USEMODULE)))
|
|
FEATURES_REQUIRED += periph_eth
|
|
USEMODULE += iolist
|
|
USEMODULE += netdev_eth
|
|
USEMODULE += netdev_new_api
|
|
USEMODULE += ztimer
|
|
USEMODULE += ztimer_msec
|
|
|
|
# lwip IPv6 supports needs link up events to perform duplicate address
|
|
# detection
|
|
ifneq (,$(filter lwip_ipv6,$(USEMODULE)))
|
|
USEMODULE += stm32_eth_link_up
|
|
endif
|
|
endif
|
|
|
|
ifneq (,$(filter lcd_parallel_ll_mcu,$(USEMODULE)))
|
|
USEMODULE += lcd_fmc
|
|
endif
|
|
|
|
ifneq (,$(filter periph_can,$(FEATURES_USED)))
|
|
FEATURES_REQUIRED += periph_gpio
|
|
FEATURES_REQUIRED += periph_gpio_irq
|
|
endif
|
|
|
|
ifneq (,$(filter periph_eth periph_ptp,$(USEMODULE)))
|
|
USEMODULE += periph_eth_common
|
|
endif
|
|
|
|
# periph_rtc_mem is currently tied to the periph_rtc
|
|
ifneq (,$(filter periph_rtc_mem,$(USEMODULE)))
|
|
FEATURES_REQUIRED += periph_rtc
|
|
endif
|
|
|
|
ifneq (,$(filter periph_adc,$(FEATURES_USED)))
|
|
ifneq (,$(filter f3 l4 wb wl, $(CPU_FAM)))
|
|
USEMODULE += ztimer
|
|
USEMODULE += ztimer_msec
|
|
endif
|
|
endif
|
|
|
|
ifneq (,$(filter periph_can,$(FEATURES_USED)))
|
|
ifneq (,$(filter g4,$(CPU_FAM)))
|
|
USEMODULE += fdcan
|
|
endif
|
|
endif
|
|
|
|
ifneq (,$(filter periph_vbat,$(USEMODULE)))
|
|
FEATURES_REQUIRED += periph_adc
|
|
endif
|
|
|
|
ifneq (,$(filter periph_fmc_%,$(USEMODULE)))
|
|
FEATURES_REQUIRED += periph_fmc
|
|
endif
|
|
|
|
ifneq (,$(filter periph_sdmmc,$(FEATURES_USED)))
|
|
FEATURES_REQUIRED += periph_gpio_irq
|
|
FEATURES_REQUIRED += periph_sdmmc_clk
|
|
FEATURES_OPTIONAL += periph_dma
|
|
endif
|
|
|
|
include $(RIOTCPU)/cortexm_common/Makefile.dep
|