# ST Microelectronics STM32 all MCU lines

# Copyright (c) 2017, I-SENSE group of ICCS
# SPDX-License-Identifier: Apache-2.0

# Here are set all the Kconfig symbols common to the whole STM32 family

if SOC_FAMILY_STM32

config CORTEX_M_SYSTICK
	bool
	default y
	depends on !STM32_LPTIM_TIMER

# set the tick per sec as a divider of the LPTIM clock source
config SYS_CLOCK_TICKS_PER_SEC
	default 4096 if STM32_LPTIM_TIMER && STM32_LPTIM_CLOCK_LSE
	default 4000 if STM32_LPTIM_TIMER && STM32_LPTIM_CLOCK_LSI

config CLOCK_CONTROL_STM32_CUBE
	default y
	depends on CLOCK_CONTROL

config UART_STM32
	default y
	depends on SERIAL

if GPIO

config GPIO_STM32
	default y

endif # GPIO

config PINMUX_STM32
	default y
	depends on PINMUX

config PWM_STM32
	default y
	depends on PWM

config SPI_STM32
	default y
	depends on SPI

config I2S_STM32
	default y
	depends on I2S

config USB_DC_STM32
	default y
	depends on USB

config COUNTER_RTC_STM32
	default y
	depends on COUNTER

config ADC_STM32
	default y
	depends on ADC

if DMA

config DMA_STM32
	default y

endif # DMA

config MEMC_STM32
	default y
	depends on MEMC

endif # SOC_FAMILY_STM32
