mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
cpu/stm32: introduce unique directory for stm32 cpus
This commit is contained in:
parent
59da69ef6c
commit
5c810d8535
5
cpu/stm32/Makefile
Normal file
5
cpu/stm32/Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
MODULE = cpu
|
||||
|
||||
DIRS = $(RIOTCPU)/cortexm_common periph vectors
|
||||
|
||||
include $(RIOTBASE)/Makefile.base
|
11
cpu/stm32/Makefile.dep
Normal file
11
cpu/stm32/Makefile.dep
Normal file
@ -0,0 +1,11 @@
|
||||
# All stm32 families provide pm support
|
||||
USEMODULE += pm_layered
|
||||
|
||||
# include stm32 common periph drivers
|
||||
USEMODULE += periph stm32_vectors
|
||||
|
||||
ifneq (,$(filter periph_usbdev,$(FEATURES_USED)))
|
||||
USEMODULE += xtimer
|
||||
endif
|
||||
|
||||
include $(RIOTCPU)/cortexm_common/Makefile.dep
|
55
cpu/stm32/Makefile.features
Normal file
55
cpu/stm32/Makefile.features
Normal file
@ -0,0 +1,55 @@
|
||||
include $(RIOTCPU)/stm32/stm32_info.mk
|
||||
|
||||
FEATURES_PROVIDED += cpu_$(CPU_FAM)
|
||||
FEATURES_PROVIDED += periph_cpuid
|
||||
FEATURES_PROVIDED += periph_gpio periph_gpio_irq
|
||||
FEATURES_PROVIDED += puf_sram
|
||||
FEATURES_PROVIDED += periph_uart_modecfg
|
||||
FEATURES_PROVIDED += periph_wdt
|
||||
|
||||
ifneq (,$(filter $(CPU_FAM),stm32f0 stm32f1 stm32f3 stm32l0 stm32l1 stm32l4 stm32wb))
|
||||
ifeq (,$(filter nucleo-f031k6,$(BOARD)))
|
||||
FEATURES_PROVIDED += periph_flashpage
|
||||
FEATURES_PROVIDED += periph_flashpage_raw
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq (,$(filter $(CPU_FAM),stm32l0 stm32l1))
|
||||
FEATURES_PROVIDED += periph_eeprom
|
||||
endif
|
||||
|
||||
ifeq (stm32f1,$(CPU_FAM))
|
||||
FEATURES_CONFLICT += periph_rtc:periph_rtt
|
||||
FEATURES_CONFLICT_MSG += "On the STM32F1, the RTC and RTT map to the same hardware peripheral."
|
||||
endif
|
||||
|
||||
ifneq (,$(filter $(CPU_FAM),stm32f2 stm32f4 stm32f7 stm32l0 stm32l4 stm32wb))
|
||||
FEATURES_PROVIDED += periph_hwrng
|
||||
endif
|
||||
|
||||
# the granularity of provided feature definition for STMs is currently by CPU
|
||||
# sub-family (e.g., stm32f[1234]). Unfortunately, only some of e.g., the
|
||||
# stm32f4 have an RNG peripheral. As during evaluation of the features , no
|
||||
# CPU variable is available, we need to filter by board.
|
||||
#
|
||||
BOARDS_WITHOUT_HWRNG += nucleo-f401re
|
||||
BOARDS_WITHOUT_HWRNG += nucleo-f411re
|
||||
BOARDS_WITHOUT_HWRNG += nucleo-f446re
|
||||
BOARDS_WITHOUT_HWRNG += nucleo-f446ze
|
||||
BOARDS_WITHOUT_HWRNG += nucleo-l031k6
|
||||
|
||||
ifneq (,$(filter $(BOARDS_WITHOUT_HWRNG),$(BOARD)))
|
||||
FEATURES_PROVIDED := $(filter-out periph_hwrng,$(FEATURES_PROVIDED))
|
||||
endif
|
||||
|
||||
ifneq (,$(filter $(CPU_FAM),stm32f2 stm32f4 stm32f7 stm32l1 stm32l4))
|
||||
FEATURES_PROVIDED += cortexm_mpu
|
||||
endif
|
||||
|
||||
# only some stm32f3 and stm32l0 have an MPU
|
||||
STM32_WITH_MPU += stm32f303re stm32f303vc stm32f303ze stm32l052t8
|
||||
ifneq (,$(filter $(CPU_MODEL),$(STM32_WITH_MPU)))
|
||||
FEATURES_PROVIDED += cortexm_mpu
|
||||
endif
|
||||
|
||||
include $(RIOTCPU)/cortexm_common/Makefile.features
|
48
cpu/stm32/Makefile.include
Normal file
48
cpu/stm32/Makefile.include
Normal file
@ -0,0 +1,48 @@
|
||||
CFLAGS += -DCPU_FAM_$(call uppercase_and_underscore,$(CPU_FAM))
|
||||
|
||||
# For stm32 cpu's we use the generic stm32.ld linker script
|
||||
LINKER_SCRIPT ?= stm32.ld
|
||||
|
||||
# Include riotboot specific variables
|
||||
-include $(RIOTCPU)/stm32/$(CPU_FAM)_riotboot.mk
|
||||
|
||||
# Compute ROM_LEN and RAM_LEN
|
||||
include $(RIOTCPU)/stm32/stm32_mem_lengths.mk
|
||||
KB := 1024
|
||||
ROM_LEN_K := $(shell echo $(ROM_LEN) | sed 's/K//')
|
||||
|
||||
ifeq (stm32wb55rg,$(CPU_MODEL))
|
||||
# adjust RAM_LEN and ROM_LEN according to CPU2 RAM_LEN and ROM_LEN
|
||||
RAM_LEN_K := $(shell echo $(RAM_LEN) | sed 's/K//')
|
||||
CPU2_RAM_LEN_K := $(shell echo $(CPU2_RAM_LEN) | sed 's/K//')
|
||||
RAM_LEN := $(shell echo $$(( ($(RAM_LEN_K) - $(CPU2_RAM_LEN_K) ) ))K)
|
||||
|
||||
CPU2_ROM_LEN_K := $(shell echo $(CPU2_ROM_LEN) | sed 's/K//')
|
||||
FLASHSIZE := $(shell echo $$(( ($(ROM_LEN_K) - $(CPU2_ROM_LEN_K) )* $(KB) )) )
|
||||
ROM_LEN := $(shell echo $$(( ($(ROM_LEN_K) - $(CPU2_ROM_LEN_K) ) ))K)
|
||||
else
|
||||
FLASHSIZE := $(shell echo $$(( $(ROM_LEN_K) * $(KB) )) )
|
||||
endif
|
||||
|
||||
# Get CPU_LINE_ variable
|
||||
-include $(RIOTCPU)/stm32/$(CPU_FAM)_line.mk
|
||||
CPU_LINE ?= $(shell echo $(CPU_MODEL) | cut -c -9 | tr 'a-z-' 'A-Z_')xx
|
||||
|
||||
# Set CFLAGS
|
||||
CFLAGS += -D$(CPU_LINE) -DCPU_LINE_$(CPU_LINE)
|
||||
CFLAGS += -DSTM32_FLASHSIZE=$(FLASHSIZE)U
|
||||
|
||||
info-stm32:
|
||||
@$(COLOR_ECHO) "CPU: $(CPU_MODEL)"
|
||||
@$(COLOR_ECHO) "\tLine: $(CPU_LINE)"
|
||||
@$(COLOR_ECHO) "\tPin count:\t$(STM32_PINS)"
|
||||
@$(COLOR_ECHO) "\tROM size:\t$(ROM_LEN) ($(FLASHSIZE) Bytes)"
|
||||
@$(COLOR_ECHO) "\tRAM size:\t$(RAM_LEN)"
|
||||
|
||||
ifneq (,$(CCMRAM_LEN))
|
||||
LINKFLAGS += $(LINKFLAGPREFIX)--defsym=_ccmram_length=$(CCMRAM_LEN)
|
||||
endif
|
||||
|
||||
VECTORS_O ?= $(BINDIR)/stm32_vectors/vectors_$(subst stm32,,$(CPU_FAM)).o
|
||||
|
||||
include $(RIOTMAKE)/arch/cortexm.inc.mk
|
290
cpu/stm32/cpu_common.c
Normal file
290
cpu/stm32/cpu_common.c
Normal file
@ -0,0 +1,290 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Freie Universität Berlin
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_cortexm_common
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Shared CPU specific function for the STM32 CPU family
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include "periph_conf.h"
|
||||
#include "periph_cpu.h"
|
||||
|
||||
#define ENABLE_DEBUG (0)
|
||||
#include "debug.h"
|
||||
|
||||
/**
|
||||
* @brief Timer specific additional bus clock prescaler
|
||||
*
|
||||
* This prescale factor is dependent on the actual APBx bus clock divider, if
|
||||
* the APBx presacler is != 1, it is set to 2, if the APBx prescaler is == 1, it
|
||||
* is set to 1.
|
||||
*
|
||||
* See reference manuals section 'reset and clock control'.
|
||||
*/
|
||||
static const uint8_t apbmul[] = {
|
||||
#if (CLOCK_APB1 < CLOCK_CORECLOCK)
|
||||
[APB1] = 2,
|
||||
#else
|
||||
[APB1] = 1,
|
||||
#endif
|
||||
#if (CLOCK_APB2 < CLOCK_CORECLOCK)
|
||||
[APB2] = 2
|
||||
#else
|
||||
[APB2] = 1
|
||||
#endif
|
||||
};
|
||||
|
||||
uint32_t periph_apb_clk(uint8_t bus)
|
||||
{
|
||||
if (bus == APB1) {
|
||||
return CLOCK_APB1;
|
||||
}
|
||||
#if defined (CPU_FAM_STM32L4) || defined(CPU_FAM_STM32WB)
|
||||
else if (bus == APB12) {
|
||||
return CLOCK_APB1;
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
return CLOCK_APB2;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t periph_timer_clk(uint8_t bus)
|
||||
{
|
||||
return periph_apb_clk(bus) * apbmul[bus];
|
||||
}
|
||||
|
||||
void periph_clk_en(bus_t bus, uint32_t mask)
|
||||
{
|
||||
switch (bus) {
|
||||
case APB1:
|
||||
#if defined(CPU_FAM_STM32L4) || defined(CPU_FAM_STM32WB)
|
||||
RCC->APB1ENR1 |= mask;
|
||||
#else
|
||||
RCC->APB1ENR |= mask;
|
||||
#endif
|
||||
break;
|
||||
case APB2:
|
||||
RCC->APB2ENR |= mask;
|
||||
break;
|
||||
#if defined(CPU_FAM_STM32L4) || defined(CPU_FAM_STM32WB)
|
||||
case APB12:
|
||||
RCC->APB1ENR2 |= mask;
|
||||
break;
|
||||
#endif
|
||||
#if defined(CPU_FAM_STM32L0)
|
||||
case AHB:
|
||||
RCC->AHBENR |= mask;
|
||||
break;
|
||||
case IOP:
|
||||
RCC->IOPENR |= mask;
|
||||
break;
|
||||
#elif defined(CPU_FAM_STM32L1) || defined(CPU_FAM_STM32F1) || \
|
||||
defined(CPU_FAM_STM32F0) || defined(CPU_FAM_STM32F3)
|
||||
case AHB:
|
||||
RCC->AHBENR |= mask;
|
||||
break;
|
||||
#elif defined(CPU_FAM_STM32F2) || defined(CPU_FAM_STM32F4) || \
|
||||
defined(CPU_FAM_STM32L4) || defined(CPU_FAM_STM32F7) || \
|
||||
defined(CPU_FAM_STM32WB)
|
||||
case AHB1:
|
||||
RCC->AHB1ENR |= mask;
|
||||
break;
|
||||
/* STM32F410 RCC doesn't provide AHB2 and AHB3 */
|
||||
#if !defined(CPU_LINE_STM32F410Rx)
|
||||
case AHB2:
|
||||
RCC->AHB2ENR |= mask;
|
||||
break;
|
||||
case AHB3:
|
||||
RCC->AHB3ENR |= mask;
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
default:
|
||||
DEBUG("unsupported bus %d\n", (int)bus);
|
||||
break;
|
||||
}
|
||||
/* stm32xx-errata: Delay after a RCC peripheral clock enable */
|
||||
__DSB();
|
||||
}
|
||||
|
||||
void periph_clk_dis(bus_t bus, uint32_t mask)
|
||||
{
|
||||
switch (bus) {
|
||||
case APB1:
|
||||
#if defined(CPU_FAM_STM32L4) || defined(CPU_FAM_STM32WB)
|
||||
RCC->APB1ENR1 &= ~(mask);
|
||||
#else
|
||||
RCC->APB1ENR &= ~(mask);
|
||||
#endif
|
||||
break;
|
||||
case APB2:
|
||||
RCC->APB2ENR &= ~(mask);
|
||||
break;
|
||||
#if defined(CPU_FAM_STM32L4) || defined(CPU_FAM_STM32WB)
|
||||
case APB12:
|
||||
RCC->APB1ENR2 &= ~(mask);
|
||||
break;
|
||||
#endif
|
||||
#if defined(CPU_FAM_STM32L0)
|
||||
case AHB:
|
||||
RCC->AHBENR &= ~(mask);
|
||||
break;
|
||||
case IOP:
|
||||
RCC->IOPENR &= ~(mask);
|
||||
break;
|
||||
#elif defined(CPU_FAM_STM32L1) || defined(CPU_FAM_STM32F1) || \
|
||||
defined(CPU_FAM_STM32F0) || defined(CPU_FAM_STM32F3)
|
||||
case AHB:
|
||||
RCC->AHBENR &= ~(mask);
|
||||
break;
|
||||
#elif defined(CPU_FAM_STM32F2) || defined(CPU_FAM_STM32F4) || \
|
||||
defined(CPU_FAM_STM32L4) || defined(CPU_FAM_STM32F7) || \
|
||||
defined(CPU_FAM_STM32WB)
|
||||
case AHB1:
|
||||
RCC->AHB1ENR &= ~(mask);
|
||||
break;
|
||||
/* STM32F410 RCC doesn't provide AHB2 and AHB3 */
|
||||
#if !defined(CPU_LINE_STM32F410Rx)
|
||||
case AHB2:
|
||||
RCC->AHB2ENR &= ~(mask);
|
||||
break;
|
||||
case AHB3:
|
||||
RCC->AHB3ENR &= ~(mask);
|
||||
break;
|
||||
#endif
|
||||
#if defined(CPU_FAM_STM32WB)
|
||||
case AHB4:
|
||||
RCC->AHB3ENR &= ~(mask);
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
default:
|
||||
DEBUG("unsupported bus %d\n", (int)bus);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(CPU_FAM_STM32L4)
|
||||
void periph_lpclk_en(bus_t bus, uint32_t mask)
|
||||
{
|
||||
switch (bus) {
|
||||
case APB1:
|
||||
RCC->APB1SMENR1 |= mask;
|
||||
break;
|
||||
case APB2:
|
||||
RCC->APB2SMENR |= mask;
|
||||
break;
|
||||
case APB12:
|
||||
RCC->APB1SMENR2 |= mask;
|
||||
break;
|
||||
case AHB1:
|
||||
RCC->AHB1SMENR |= mask;
|
||||
break;
|
||||
case AHB2:
|
||||
RCC->AHB2SMENR |= mask;
|
||||
break;
|
||||
case AHB3:
|
||||
RCC->AHB3SMENR |= mask;
|
||||
break;
|
||||
default:
|
||||
DEBUG("unsupported bus %d\n", (int)bus);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void periph_lpclk_dis(bus_t bus, uint32_t mask)
|
||||
{
|
||||
switch (bus) {
|
||||
case APB1:
|
||||
RCC->APB1SMENR1 &= ~(mask);
|
||||
break;
|
||||
case APB2:
|
||||
RCC->APB2SMENR &= ~(mask);
|
||||
break;
|
||||
case APB12:
|
||||
RCC->APB1SMENR2 &= ~(mask);
|
||||
break;
|
||||
case AHB1:
|
||||
RCC->AHB1SMENR &= ~(mask);
|
||||
break;
|
||||
case AHB2:
|
||||
RCC->AHB2SMENR &= ~(mask);
|
||||
break;
|
||||
case AHB3:
|
||||
RCC->AHB3SMENR &= ~(mask);
|
||||
break;
|
||||
default:
|
||||
DEBUG("unsupported bus %d\n", (int)bus);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#elif defined(CPU_FAM_STM32F2) || \
|
||||
defined(CPU_FAM_STM32F4) || \
|
||||
defined(CPU_FAM_STM32F7)
|
||||
void periph_lpclk_en(bus_t bus, uint32_t mask)
|
||||
{
|
||||
switch (bus) {
|
||||
case APB1:
|
||||
RCC->APB1LPENR |= mask;
|
||||
break;
|
||||
case APB2:
|
||||
RCC->APB2LPENR |= mask;
|
||||
break;
|
||||
case AHB1:
|
||||
RCC->AHB1LPENR |= mask;
|
||||
break;
|
||||
/* STM32F410 RCC doesn't provide AHB2 and AHB3 */
|
||||
#if !defined(CPU_LINE_STM32F410Rx)
|
||||
case AHB2:
|
||||
RCC->AHB2LPENR |= mask;
|
||||
break;
|
||||
case AHB3:
|
||||
RCC->AHB3LPENR |= mask;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
DEBUG("unsupported bus %d\n", (int)bus);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void periph_lpclk_dis(bus_t bus, uint32_t mask)
|
||||
{
|
||||
switch (bus) {
|
||||
case APB1:
|
||||
RCC->APB1LPENR &= ~(mask);
|
||||
break;
|
||||
case APB2:
|
||||
RCC->APB2LPENR &= ~(mask);
|
||||
break;
|
||||
case AHB1:
|
||||
RCC->AHB1LPENR &= ~(mask);
|
||||
break;
|
||||
/* STM32F410 RCC doesn't provide AHB2 and AHB3 */
|
||||
#if !defined(CPU_LINE_STM32F410Rx)
|
||||
case AHB2:
|
||||
RCC->AHB2LPENR &= ~(mask);
|
||||
break;
|
||||
case AHB3:
|
||||
RCC->AHB3LPENR &= ~(mask);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
DEBUG("unsupported bus %d\n", (int)bus);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
177
cpu/stm32/cpu_init.c
Normal file
177
cpu/stm32/cpu_init.c
Normal file
@ -0,0 +1,177 @@
|
||||
/*
|
||||
* Copyright (C) 2013 INRIA
|
||||
* 2014 Freie Universität Berlin
|
||||
* 2016 TriaGnoSys GmbH
|
||||
* 2018 Kaspar Schleiser <kaspar@schleiser.de>
|
||||
* 2018 OTA keys S.A.
|
||||
*
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser General
|
||||
* Public License v2.1. See the file LICENSE in the top level directory for more
|
||||
* details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32_common
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Implementation of the kernel cpu functions
|
||||
*
|
||||
* @author Stefan Pfeiffer <stefan.pfeiffer@fu-berlin.de>
|
||||
* @author Alaeddine Weslati <alaeddine.weslati@inria.fr>
|
||||
* @author Thomas Eichinger <thomas.eichinger@fu-berlin.de>
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
* @author Nick van IJzendoorn <nijzendoorn@engineering-spirit.nl>
|
||||
* @author Víctor Ariño <victor.arino@zii.aero>
|
||||
* @author Kaspar Schleiser <kaspar@schleiser.de>
|
||||
* @author Vincent Dupont <vincent@otakeys.com>
|
||||
* @author Oleg Artamonov <oleg@unwds.com>
|
||||
* @author Francisco Molina <francisco.molina@inria.cl>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include "cpu.h"
|
||||
#include "stdio_base.h"
|
||||
#include "stmclk.h"
|
||||
#include "periph_cpu.h"
|
||||
#include "periph/init.h"
|
||||
#include "board.h"
|
||||
|
||||
#if defined (CPU_FAM_STM32L4)
|
||||
#define BIT_APB_PWREN RCC_APB1ENR1_PWREN
|
||||
#else
|
||||
#define BIT_APB_PWREN RCC_APB1ENR_PWREN
|
||||
#endif
|
||||
|
||||
#if defined(CPU_FAM_STM32F0) || defined(CPU_FAM_STM32F1) || \
|
||||
defined(CPU_FAM_STM32F2) || defined(CPU_FAM_STM32F3) || \
|
||||
defined(CPU_FAM_STM32F4) || defined(CPU_FAM_STM32F7) || \
|
||||
defined(CPU_FAM_STM32L1)
|
||||
|
||||
#define STM32_CPU_MAX_GPIOS (12U)
|
||||
|
||||
#if defined(CPU_FAM_STM32L1)
|
||||
#define GPIO_CLK (AHB)
|
||||
#define GPIO_CLK_ENR (RCC->AHBENR)
|
||||
#define GPIO_CLK_ENR_MASK (0x0000FFFF)
|
||||
#elif defined(CPU_FAM_STM32F0) || defined(CPU_FAM_STM32F3)
|
||||
#define GPIO_CLK (AHB)
|
||||
#define GPIO_CLK_ENR (RCC->AHBENR)
|
||||
#define GPIO_CLK_ENR_MASK (0xFFFF0000)
|
||||
#elif defined(CPU_FAM_STM32F2) || defined(CPU_FAM_STM32F4) || \
|
||||
defined(CPU_FAM_STM32F7)
|
||||
#define GPIO_CLK (AHB1)
|
||||
#define GPIO_CLK_ENR (RCC->AHB1ENR)
|
||||
#define GPIO_CLK_ENR_MASK (0x0000FFFF)
|
||||
#elif defined(CPU_FAM_STM32F1)
|
||||
#define GPIO_CLK (APB2)
|
||||
#define GPIO_CLK_ENR (RCC->APB2ENR)
|
||||
#define GPIO_CLK_ENR_MASK (0x000001FC)
|
||||
#endif
|
||||
|
||||
#ifndef DISABLE_JTAG
|
||||
#define DISABLE_JTAG 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Initialize gpio to AIN
|
||||
*
|
||||
* stm32f need to have all there pins initialized to AIN so the consumption
|
||||
* of the input Schmitt trigger is saved when running in STOP mode.
|
||||
*
|
||||
* @see https://comm.eefocus.com/media/download/index/id-1013834
|
||||
*/
|
||||
static void _gpio_init_ain(void)
|
||||
{
|
||||
uint32_t ahb_gpio_clocks;
|
||||
|
||||
/* enable GPIO clock and save GPIO clock configuration */
|
||||
ahb_gpio_clocks = GPIO_CLK_ENR & GPIO_CLK_ENR_MASK;
|
||||
periph_clk_en(GPIO_CLK, GPIO_CLK_ENR_MASK);
|
||||
|
||||
/* switch all GPIOs to AIN mode to minimize power consumption */
|
||||
for (uint8_t i = 0; i < STM32_CPU_MAX_GPIOS; i++) {
|
||||
GPIO_TypeDef *port;
|
||||
port = (GPIO_TypeDef *)(GPIOA_BASE + i*(GPIOB_BASE - GPIOA_BASE));
|
||||
if (IS_GPIO_ALL_INSTANCE(port)) {
|
||||
if (!DISABLE_JTAG) {
|
||||
#if defined(CPU_FAM_STM32F1)
|
||||
switch (i) {
|
||||
/* preserve JTAG pins on PORTA and PORTB */
|
||||
case 0:
|
||||
port->CR[0] = GPIO_CRL_CNF;
|
||||
port->CR[1] = GPIO_CRH_CNF & 0x000FFFFF;
|
||||
break;
|
||||
case 1:
|
||||
port->CR[0] = GPIO_CRL_CNF & 0xFFF00FFF;
|
||||
port->CR[1] = GPIO_CRH_CNF;
|
||||
break;
|
||||
default:
|
||||
port->CR[0] = GPIO_CRL_CNF;
|
||||
port->CR[1] = GPIO_CRH_CNF;
|
||||
break;
|
||||
}
|
||||
#else /* ! defined(CPU_FAM_STM32F1) */
|
||||
switch (i) {
|
||||
/* preserve JTAG pins on PORTA and PORTB */
|
||||
case 0:
|
||||
port->MODER = 0xABFFFFFF;
|
||||
break;
|
||||
case 1:
|
||||
port->MODER = 0xFFFFFEBF;
|
||||
break;
|
||||
default:
|
||||
port->MODER = 0xFFFFFFFF;
|
||||
break;
|
||||
}
|
||||
#endif /* defined(CPU_FAM_STM32F1) */
|
||||
}
|
||||
else {
|
||||
#if defined(CPU_FAM_STM32F1)
|
||||
port->CR[0] = GPIO_CRL_CNF;
|
||||
port->CR[1] = GPIO_CRH_CNF;
|
||||
#else
|
||||
port->MODER = 0xFFFFFFFF;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* restore GPIO clocks */
|
||||
periph_clk_en(GPIO_CLK, ahb_gpio_clocks);
|
||||
}
|
||||
#endif
|
||||
|
||||
void cpu_init(void)
|
||||
{
|
||||
/* initialize the Cortex-M core */
|
||||
cortexm_init();
|
||||
/* enable PWR module */
|
||||
#ifndef CPU_FAM_STM32WB
|
||||
periph_clk_en(APB1, BIT_APB_PWREN);
|
||||
#endif
|
||||
/* initialize the system clock as configured in the periph_conf.h */
|
||||
stmclk_init_sysclk();
|
||||
#if defined(CPU_FAM_STM32F0) || defined(CPU_FAM_STM32F1) || \
|
||||
defined(CPU_FAM_STM32F2) || defined(CPU_FAM_STM32F3) || \
|
||||
defined(CPU_FAM_STM32F4) || defined(CPU_FAM_STM32F7) || \
|
||||
defined(CPU_FAM_STM32L1)
|
||||
_gpio_init_ain();
|
||||
#endif
|
||||
#ifdef MODULE_PERIPH_DMA
|
||||
/* initialize DMA streams */
|
||||
dma_init();
|
||||
#endif
|
||||
/* initialize stdio prior to periph_init() to allow use of DEBUG() there */
|
||||
stdio_init();
|
||||
|
||||
#ifdef STM32F1_DISABLE_JTAG
|
||||
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
|
||||
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
|
||||
#endif
|
||||
|
||||
/* trigger static peripheral initialization */
|
||||
periph_init();
|
||||
}
|
2
cpu/stm32/dist/.gitignore
vendored
Normal file
2
cpu/stm32/dist/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
clk_conf/clk_conf
|
||||
spi_divtable/spi_divtable
|
12
cpu/stm32/dist/clk_conf/Makefile
vendored
Normal file
12
cpu/stm32/dist/clk_conf/Makefile
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
NAME = clk_conf
|
||||
CC = gcc
|
||||
CFLAGS = -std=c99 -Wall
|
||||
SRC = $(wildcard *.c)
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all:
|
||||
$(CC) $(CFLAGS) -o $(NAME) $(SRC)
|
||||
|
||||
clean:
|
||||
rm -f $(NAME)
|
502
cpu/stm32/dist/clk_conf/clk_conf.c
vendored
Normal file
502
cpu/stm32/dist/clk_conf/clk_conf.c
vendored
Normal file
@ -0,0 +1,502 @@
|
||||
/*
|
||||
* Copyright (C) 2017 OTA keys S.A.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Compute clock constants for STM32F[2|4|7] CPUs
|
||||
*
|
||||
*
|
||||
* @author Vincent Dupont <vincent@otakeys.com>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <ctype.h>
|
||||
#include "clk_conf.h"
|
||||
|
||||
#define ENABLE_DEBUG (0)
|
||||
#if ENABLE_DEBUG
|
||||
#define DEBUG(...) fprintf(stderr, __VA_ARGS__)
|
||||
#else
|
||||
#define DEBUG(...)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Check if N/P pair is valid
|
||||
*
|
||||
* Check if N/P (alternatively N/Q or N/R) pair is valid with given @p vco_in and
|
||||
* @p pll_out
|
||||
*
|
||||
* @param[in] n
|
||||
* @param[in] p
|
||||
* @param[in] vco_in
|
||||
* @param[in] pll_out
|
||||
*
|
||||
* @return 1 if pair is valid, 0 otherwise
|
||||
*/
|
||||
static int is_n_ok(const pll_cfg_t *cfg, unsigned n, unsigned p,
|
||||
unsigned vco_in, unsigned pll_out)
|
||||
{
|
||||
if (n >= cfg->min_n && n <= cfg->max_n &&
|
||||
vco_in * n >= cfg->min_vco_output && vco_in * n <= cfg->max_vco_output &&
|
||||
vco_in * n / p == pll_out) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Compute PLL factors
|
||||
*
|
||||
* @param[in] pll_in PLL input frequency
|
||||
* @param[in] pll_p_out PLL P output frequency (0 if P is not needed)
|
||||
* @param[in] pll_q_out PLL Q output frequency (0 if Q is not needed)
|
||||
* @param[in] pll_r_out PLL R output frequency (0 if R is not needed)
|
||||
* @param[in,out] m M factor, can be preset (0, if it has to be calculated)
|
||||
* @param[out] n N factor
|
||||
* @param[out] p P factor
|
||||
* @param[out] q Q factor
|
||||
* @param[out] r R factor
|
||||
*
|
||||
* @return -1 if no P,N pair can be computed with given @p pll_in and @p pll_p_out
|
||||
* @return 1 if no Q can be computed, M, N and P are valid
|
||||
* @return 2 if no R can be computed, M, M and P are valid
|
||||
* @return 3 if no Q nor R can be computed, M, M and P are valid
|
||||
* @return 0 if M, N, P, Q, R are valid
|
||||
*/
|
||||
static int compute_pll(const pll_cfg_t *cfg, unsigned pll_in,
|
||||
unsigned pll_p_out, unsigned pll_q_out, unsigned pll_r_out,
|
||||
unsigned *m, unsigned *n,
|
||||
unsigned *p, unsigned *q, unsigned *r)
|
||||
{
|
||||
(void)pll_r_out;
|
||||
(void)r;
|
||||
|
||||
int res = 0;
|
||||
unsigned vco_in;
|
||||
|
||||
if (*m == 0) {
|
||||
unsigned found_m = 0;
|
||||
unsigned found_n;
|
||||
unsigned found_p;
|
||||
unsigned found_q;
|
||||
unsigned found_r;
|
||||
unsigned found_res;
|
||||
*m = cfg->min_m;
|
||||
while (*m <= cfg->max_m && (res = compute_pll(cfg, pll_in, pll_p_out,
|
||||
pll_q_out, pll_r_out,
|
||||
m, n, p, q, r)) != 0) {
|
||||
if (res > 0 && !found_m) {
|
||||
found_m = *m;
|
||||
found_n = *n;
|
||||
found_p = *p;
|
||||
found_q = *q;
|
||||
found_r = *r;
|
||||
found_res = res;
|
||||
}
|
||||
*m += cfg->inc_m;
|
||||
}
|
||||
if (res == 0) {
|
||||
return 0;
|
||||
}
|
||||
if (found_m) {
|
||||
*m = found_m;
|
||||
*n = found_n;
|
||||
*p = found_p;
|
||||
*q = found_q;
|
||||
*r = found_r;
|
||||
return found_res;
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
vco_in = pll_in / *m;
|
||||
DEBUG("M=%u, vco_in=%u\n", *m, vco_in);
|
||||
}
|
||||
|
||||
if (*m < cfg->min_m || *m > cfg->max_m ||
|
||||
vco_in < cfg->min_vco_input || vco_in > cfg->max_vco_input) {
|
||||
DEBUG("Invalid M=%u\n", *m);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (pll_p_out) {
|
||||
DEBUG("Computing P for freq=%u\n", pll_p_out);
|
||||
for (*p = cfg->max_p; *p >= cfg->min_p; *p -= cfg->inc_p) {
|
||||
*n = *p * pll_p_out / vco_in;
|
||||
DEBUG("Trying P=%u: N=%u\n", *p, *n);
|
||||
if (is_n_ok(cfg, *n, *p, vco_in, pll_p_out)) {
|
||||
DEBUG("Found M=%u, N=%u, P=%u\n", *m, *n, *p);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (*p < cfg->min_p) {
|
||||
*p += cfg->inc_p;
|
||||
}
|
||||
if (!is_n_ok(cfg, *n, *p, vco_in, pll_p_out)) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (pll_q_out) {
|
||||
DEBUG("Computing Q for freq=%u\n", pll_q_out);
|
||||
for (*q = cfg->max_q; *q >= cfg->min_q; *q -= cfg->inc_q) {
|
||||
if (!pll_p_out) {
|
||||
*n = *q * pll_q_out / vco_in;
|
||||
}
|
||||
DEBUG("Trying Q=%u: N=%u\n", *q, *n);
|
||||
if (is_n_ok(cfg, *n, *q, vco_in, pll_q_out)) {
|
||||
DEBUG("Found M=%u, N=%u, Q=%u\n", *m, *n, *q);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (*q < cfg->min_q) {
|
||||
*q += cfg->inc_q;
|
||||
}
|
||||
if (!is_n_ok(cfg, *n, *q, vco_in, pll_q_out)) {
|
||||
*q = 0;
|
||||
res |= 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* todo, compute r */
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static void usage(char **argv)
|
||||
{
|
||||
fprintf(stderr, "usage: %s <cpu_model> <coreclock> <hse_freq> <lse> [pll_i2s_src] "
|
||||
"[pll_i2s_q_out] [pll_sai_q_out]\n", argv[0]);
|
||||
}
|
||||
|
||||
#define HSI 0
|
||||
#define HSE 1
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (argc < 2) {
|
||||
usage(argv);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (strlen(argv[1]) < 9
|
||||
|| !isdigit(argv[1][6])
|
||||
|| !isdigit(argv[1][7])
|
||||
|| !isdigit(argv[1][8])
|
||||
|| ((argv[1][5] != 'f') && (argv[1][5] != 'F')
|
||||
/* && (argv[1][5] != 'l') && (argv[1][5] != 'L') */)) {
|
||||
fprintf(stderr, "Invalid model : %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int model = atoi(argv[1] + 6);
|
||||
int i;
|
||||
for (i = 0; i < MODEL_MAX; i++) {
|
||||
if (stm32_model[i] == model) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == MODEL_MAX) {
|
||||
fprintf(stderr, "Unsupported CPU model %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
const clk_cfg_t *cfg = &stm32_clk_cfg[i];
|
||||
|
||||
/* print help for given cpu */
|
||||
if (argc < 5) {
|
||||
usage(argv);
|
||||
fprintf(stderr, "Max values for stm32f%03d:\n", model);
|
||||
fprintf(stderr, " Max coreclock: %u Hz\n"
|
||||
" Max APB1: %u Hz\n"
|
||||
" Max APB2: %u Hz\n",
|
||||
cfg->max_coreclock, cfg->max_apb1, cfg->max_apb2);
|
||||
fprintf(stderr, "Additional PLLs:\n"
|
||||
" PLL I2S: %d\n"
|
||||
" PLL SAI: %d\n"
|
||||
" Alternate 48MHz source: ",
|
||||
cfg->has_pll_i2s, cfg->has_pll_sai);
|
||||
if (cfg->has_alt_48MHz & ALT_48MHZ_I2S) {
|
||||
fprintf(stderr, "PLL I2S\n");
|
||||
}
|
||||
else if (cfg->has_alt_48MHz & ALT_48MHZ_SAI) {
|
||||
fprintf(stderr, "PLL SAI\n");
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "None\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* parse command line arguments */
|
||||
unsigned coreclock = atoi(argv[2]);
|
||||
unsigned pll_in = atoi(argv[3]);
|
||||
int pll_src;
|
||||
if (pll_in == 0) {
|
||||
pll_in = cfg->hsi;
|
||||
pll_src = HSI;
|
||||
}
|
||||
else {
|
||||
pll_src = HSE;
|
||||
}
|
||||
|
||||
unsigned is_lse = atoi(argv[4]) ? 1 : 0;
|
||||
|
||||
unsigned pll_i2s_input = 0;
|
||||
if (argc > 5) {
|
||||
pll_i2s_input = atoi(argv[5]);
|
||||
}
|
||||
|
||||
unsigned pll_i2s_p_out = 0;
|
||||
unsigned pll_i2s_q_out = 0;
|
||||
if (argc > 6) {
|
||||
pll_i2s_q_out = atoi(argv[6]);
|
||||
}
|
||||
|
||||
unsigned pll_sai_p_out = 0;
|
||||
unsigned pll_sai_q_out = 0;
|
||||
if (argc > 7) {
|
||||
pll_sai_q_out = atoi(argv[7]);
|
||||
}
|
||||
|
||||
if (cfg->max_coreclock && coreclock > cfg->max_coreclock) {
|
||||
fprintf(stderr, "Invalid coreclock (max=%u)\n", cfg->max_coreclock);
|
||||
return 1;
|
||||
}
|
||||
|
||||
fprintf(stderr, "Computing settings for stm32f%03d CPU...\n", model);
|
||||
|
||||
unsigned m = 0;
|
||||
unsigned n = 0;
|
||||
unsigned p = 0;
|
||||
unsigned q = 0;
|
||||
unsigned r = 0;
|
||||
|
||||
unsigned m_i2s = 0;
|
||||
unsigned n_i2s = 0;
|
||||
unsigned p_i2s = 0;
|
||||
unsigned q_i2s = 0;
|
||||
unsigned r_i2s = 0;
|
||||
|
||||
unsigned m_sai = 0;
|
||||
unsigned n_sai = 0;
|
||||
unsigned p_sai = 0;
|
||||
unsigned q_sai = 0;
|
||||
unsigned r_sai = 0;
|
||||
|
||||
bool use_alt_48MHz = false;
|
||||
unsigned clock_48MHz = cfg->need_48MHz ? 48000000U : 0;
|
||||
if ((cfg->hsi_prediv) && (pll_src == HSI)) {
|
||||
m = cfg->hsi_prediv;
|
||||
}
|
||||
|
||||
/* main PLL */
|
||||
/* try to match coreclock with P output and 48MHz for Q output (USB) */
|
||||
switch (compute_pll(&cfg->pll, pll_in, coreclock, clock_48MHz, 0,
|
||||
&m, &n, &p, &q, &r)) {
|
||||
case -1:
|
||||
/* no config available */
|
||||
fprintf(stderr, "Unable to compute main PLL factors\n");
|
||||
return 1;
|
||||
case 1:
|
||||
/* Q not OK */
|
||||
fprintf(stderr, "Need to use an alternate 48MHz src...");
|
||||
if (cfg->has_pll_i2s && (cfg->has_alt_48MHz & ALT_48MHZ_I2S) == ALT_48MHZ_I2S) {
|
||||
puts("PLL I2S");
|
||||
use_alt_48MHz = true;
|
||||
if (pll_i2s_q_out != 0 && pll_i2s_q_out != 48000000U) {
|
||||
fprintf(stderr, "Invalid PLL I2S Q output freq: %u\n", pll_i2s_q_out);
|
||||
return 1;
|
||||
}
|
||||
pll_i2s_q_out = 48000000U;
|
||||
}
|
||||
else if (cfg->has_pll_sai && (cfg->has_alt_48MHz & ALT_48MHZ_SAI)) {
|
||||
fprintf(stderr, "PLL SAI...");
|
||||
use_alt_48MHz = true;
|
||||
if ((cfg->has_alt_48MHz & ALT_48MHZ_P) &&
|
||||
(pll_sai_p_out == 0 || pll_sai_p_out == 48000000U)) {
|
||||
fprintf(stderr, "P\n");
|
||||
pll_sai_p_out = 48000000U;
|
||||
}
|
||||
else if (!(cfg->has_alt_48MHz & ALT_48MHZ_P) &&
|
||||
(pll_sai_q_out == 0 || pll_sai_q_out == 48000000U)) {
|
||||
fprintf(stderr, "Q\n");
|
||||
pll_sai_q_out = 48000000U;
|
||||
}
|
||||
else {
|
||||
if (cfg->has_alt_48MHz & ALT_48MHZ_P) {
|
||||
fprintf(stderr, "Invalid PLL SAI P output freq: %u\n", pll_sai_p_out);
|
||||
} else {
|
||||
fprintf(stderr, "Invalid PLL SAI Q output freq: %u\n", pll_sai_q_out);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "No other source available\n");
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* PLL I2S */
|
||||
if (pll_i2s_p_out || pll_i2s_q_out) {
|
||||
unsigned *_m;
|
||||
unsigned _in;
|
||||
if (cfg->has_pll_i2s_m) {
|
||||
_m = &m_i2s;
|
||||
}
|
||||
else {
|
||||
_m = &m;
|
||||
}
|
||||
if (cfg->has_pll_i2s_alt_input && pll_i2s_input) {
|
||||
_in = pll_i2s_input;
|
||||
}
|
||||
else {
|
||||
_in = pll_in;
|
||||
}
|
||||
if (compute_pll(&cfg->pll, _in, pll_i2s_p_out, pll_i2s_q_out, 0,
|
||||
_m, &n_i2s, &p_i2s, &q_i2s, &r_i2s) != 0) {
|
||||
fprintf(stderr, "Unable to compute 48MHz output using PLL I2S\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* PLL SAI */
|
||||
if (pll_sai_p_out || pll_sai_q_out) {
|
||||
if (compute_pll(&cfg->pll, pll_in, pll_sai_p_out, pll_sai_q_out, 0,
|
||||
&m_sai, &n_sai, &p_sai, &q_sai, &r_sai) != 0) {
|
||||
puts("Unable to compute 48MHz output using PLL I2S");
|
||||
return 1;
|
||||
}
|
||||
if (!cfg->has_pll_sai_m && m != m_sai) {
|
||||
m = m_sai;
|
||||
DEBUG("Retry to compute main PLL with M=%u\n", m);
|
||||
if (compute_pll(&cfg->pll, pll_in, coreclock, clock_48MHz, 0,
|
||||
&m, &n, &p, &q, &r) < 0) {
|
||||
fprintf(stderr, "Unable to compute 48MHz output using PLL I2S\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* APB prescalers */
|
||||
unsigned apb1_pre;
|
||||
unsigned apb2_pre;
|
||||
|
||||
for (apb1_pre = 1; apb1_pre <= 16; apb1_pre <<= 1) {
|
||||
if (coreclock / apb1_pre <= cfg->max_apb1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (cfg->family != STM32F0) {
|
||||
for (apb2_pre = 1; apb2_pre <= 16; apb2_pre <<= 1) {
|
||||
if (coreclock / apb2_pre <= cfg->max_apb2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Print constants */
|
||||
fprintf(stderr, "==============================================================\n");
|
||||
fprintf(stderr, "Please copy the following code into your board's periph_conf.h\n\n");
|
||||
|
||||
printf("/**\n"
|
||||
" * @name Clock settings\n"
|
||||
" *\n"
|
||||
" * @note This is auto-generated from\n"
|
||||
" * `cpu/stm32_common/dist/clk_conf/clk_conf.c`\n"
|
||||
" * @{\n"
|
||||
" */\n");
|
||||
printf("/* give the target core clock (HCLK) frequency [in Hz],\n"
|
||||
" * maximum: %uMHz */\n", cfg->max_coreclock / 1000000U);
|
||||
printf("#define CLOCK_CORECLOCK (%uU)\n", coreclock);
|
||||
printf("/* 0: no external high speed crystal available\n"
|
||||
" * else: actual crystal frequency [in Hz] */\n"
|
||||
"#define CLOCK_HSE (%uU)\n", pll_src ? pll_in : 0);
|
||||
printf("/* 0: no external low speed crystal available,\n"
|
||||
" * 1: external crystal available (always 32.768kHz) */\n"
|
||||
"#define CLOCK_LSE (%uU)\n", is_lse);
|
||||
printf("/* peripheral clock setup */\n");
|
||||
printf("#define CLOCK_AHB_DIV RCC_CFGR_HPRE_DIV1\n"
|
||||
"#define CLOCK_AHB (CLOCK_CORECLOCK / 1)\n");
|
||||
if (cfg->family == STM32F0) {
|
||||
printf("#define CLOCK_APB1_DIV RCC_CFGR_PPRE_DIV%u /* max %uMHz */\n"
|
||||
"#define CLOCK_APB1 (CLOCK_CORECLOCK / %u)\n",
|
||||
apb1_pre, cfg->max_apb1 / 1000000U, apb1_pre);
|
||||
printf("#define CLOCK_APB2 (CLOCK_APB1)\n");
|
||||
}
|
||||
else {
|
||||
printf("#define CLOCK_APB1_DIV RCC_CFGR_PPRE1_DIV%u /* max %uMHz */\n"
|
||||
"#define CLOCK_APB1 (CLOCK_CORECLOCK / %u)\n",
|
||||
apb1_pre, cfg->max_apb1 / 1000000U, apb1_pre);
|
||||
printf("#define CLOCK_APB2_DIV RCC_CFGR_PPRE2_DIV%u /* max %uMHz */\n"
|
||||
"#define CLOCK_APB2 (CLOCK_CORECLOCK / %u)\n",
|
||||
apb2_pre, cfg->max_apb2 / 1000000U, apb2_pre);
|
||||
}
|
||||
if (cfg->family == STM32F0 || cfg->family == STM32F1 || cfg->family == STM32F3) {
|
||||
printf("\n/* PLL factors */\n");
|
||||
printf("#define CLOCK_PLL_PREDIV (%u)\n", m);
|
||||
printf("#define CLOCK_PLL_MUL (%u)\n", n);
|
||||
}
|
||||
else {
|
||||
printf("\n/* Main PLL factors */\n");
|
||||
printf("#define CLOCK_PLL_M (%u)\n", m);
|
||||
printf("#define CLOCK_PLL_N (%u)\n", n);
|
||||
printf("#define CLOCK_PLL_P (%u)\n", p);
|
||||
printf("#define CLOCK_PLL_Q (%u)\n", q);
|
||||
}
|
||||
|
||||
if (pll_i2s_p_out || pll_i2s_q_out) {
|
||||
printf("\n/* PLL I2S configuration */\n");
|
||||
printf("#define CLOCK_ENABLE_PLL_I2S (1)\n");
|
||||
if (cfg->has_pll_i2s_alt_input && pll_i2s_input) {
|
||||
printf("#define CLOCK_PLL_I2S_SRC (RCC_PLLI2SCFGR_PLLI2SSRC)\n");
|
||||
}
|
||||
else {
|
||||
printf("#define CLOCK_PLL_I2S_SRC (0)\n");
|
||||
}
|
||||
if (cfg->has_pll_i2s_m) {
|
||||
printf("#define CLOCK_PLL_I2S_M (%u)\n", m_i2s);
|
||||
}
|
||||
printf("#define CLOCK_PLL_I2S_N (%u)\n", n_i2s);
|
||||
printf("#define CLOCK_PLL_I2S_P (%u)\n", p_i2s);
|
||||
printf("#define CLOCK_PLL_I2S_Q (%u)\n", q_i2s);
|
||||
}
|
||||
|
||||
if (pll_sai_p_out || pll_sai_q_out) {
|
||||
printf("\n/* PLL SAI configuration */\n");
|
||||
printf("#define CLOCK_ENABLE_PLL_SAI (1)\n");
|
||||
if (cfg->has_pll_sai_m) {
|
||||
printf("#define CLOCK_PLL_SAI_M (%u)\n", m_sai);
|
||||
}
|
||||
printf("#define CLOCK_PLL_SAI_N (%u)\n", n_sai);
|
||||
printf("#define CLOCK_PLL_SAI_P (%u)\n", p_sai);
|
||||
printf("#define CLOCK_PLL_SAI_Q (%u)\n", q_sai);
|
||||
}
|
||||
|
||||
if (use_alt_48MHz) {
|
||||
printf("\n/* Use alternative source for 48MHz clock */\n");
|
||||
printf("#define CLOCK_USE_ALT_48MHZ (1)\n");
|
||||
}
|
||||
printf("/** @} */\n");
|
||||
|
||||
return 0;
|
||||
}
|
602
cpu/stm32/dist/clk_conf/clk_conf.h
vendored
Normal file
602
cpu/stm32/dist/clk_conf/clk_conf.h
vendored
Normal file
@ -0,0 +1,602 @@
|
||||
/*
|
||||
* Copyright (C) 2017 OTA keys S.A.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Compute clock constants for STM32F[2|4|7] CPUs
|
||||
*
|
||||
*
|
||||
* @author Vincent Dupont <vincent@otakeys.com>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef CLK_CONF_H
|
||||
#define CLK_CONF_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @name STM32 families
|
||||
* @ {
|
||||
*/
|
||||
enum fam {
|
||||
STM32F0,
|
||||
STM32F1,
|
||||
STM32F2,
|
||||
STM32F3,
|
||||
STM32F4,
|
||||
STM32F7,
|
||||
FAM_MAX,
|
||||
};
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name Supported models
|
||||
* @{
|
||||
*/
|
||||
enum {
|
||||
STM32F030,
|
||||
STM32F070,
|
||||
STM32F031,
|
||||
STM32F051,
|
||||
STM32F071,
|
||||
STM32F091,
|
||||
STM32F042,
|
||||
STM32F072,
|
||||
STM32F038,
|
||||
STM32F048,
|
||||
STM32F058,
|
||||
STM32F078,
|
||||
STM32F098,
|
||||
|
||||
STM32F100,
|
||||
STM32F101,
|
||||
STM32F102,
|
||||
STM32F103,
|
||||
|
||||
STM32F205,
|
||||
STM32F207,
|
||||
STM32F215,
|
||||
STM32F217,
|
||||
|
||||
STM32F301,
|
||||
STM32F302,
|
||||
STM32F303,
|
||||
STM32F334,
|
||||
STM32F373,
|
||||
STM32F318,
|
||||
STM32F328,
|
||||
STM32F358,
|
||||
STM32F378,
|
||||
STM32F398,
|
||||
|
||||
STM32F401,
|
||||
STM32F405,
|
||||
STM32F407,
|
||||
STM32F410,
|
||||
STM32F411,
|
||||
STM32F412,
|
||||
STM32F413,
|
||||
STM32F415,
|
||||
STM32F417,
|
||||
STM32F423,
|
||||
STM32F427,
|
||||
STM32F429,
|
||||
STM32F437,
|
||||
STM32F439,
|
||||
STM32F446,
|
||||
STM32F469,
|
||||
STM32F479,
|
||||
|
||||
STM32F722,
|
||||
STM32F732,
|
||||
STM32F746,
|
||||
STM32F756,
|
||||
STM32F767,
|
||||
STM32F769,
|
||||
STM32F777,
|
||||
STM32F779,
|
||||
|
||||
MODEL_MAX,
|
||||
};
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief PLL configuration parameters
|
||||
*
|
||||
* PLL configuration follows the model:
|
||||
* ```
|
||||
*
|
||||
* pll_in +----+ vco_in +------------------------------+
|
||||
* --------| /M |----------|\ +----+ vco_out +----+ |
|
||||
* +----+ | --| xN |-------------| /P |--|-- pll_p_out
|
||||
* | +----+ \ +----+ |
|
||||
* | | +----+ |
|
||||
* | ---| /Q |--|-- pll_q_out
|
||||
* | | +----+ |
|
||||
* | | +----+ |
|
||||
* | ---| /R |--|-- pll_r_out
|
||||
* | +----+ |
|
||||
* +------------------------------+
|
||||
* ```
|
||||
*
|
||||
* vco_in = pll_in / M;
|
||||
* vco_out = vco_in * N;
|
||||
* pll_p_out = vco_out / P;
|
||||
* pll_q_out = vco_out / Q;
|
||||
* pll_r_out = vco_out / R;
|
||||
*/
|
||||
typedef struct {
|
||||
unsigned min_vco_input; /**< Min VCO input */
|
||||
unsigned max_vco_input; /**< Max VCO input */
|
||||
unsigned min_vco_output; /**< Min VCO output */
|
||||
unsigned max_vco_output; /**< Max VCO output */
|
||||
|
||||
unsigned min_n; /**< Min N */
|
||||
unsigned max_n; /**< Max N */
|
||||
unsigned inc_n; /**< Increment between two values of N */
|
||||
|
||||
unsigned min_m; /**< Min M */
|
||||
unsigned max_m; /**< Max M */
|
||||
unsigned inc_m; /**< Increment between two values of M */
|
||||
|
||||
unsigned min_p; /**< Min P */
|
||||
unsigned max_p; /**< Max P */
|
||||
unsigned inc_p; /**< Increment between two values of P */
|
||||
|
||||
unsigned min_q; /**< Min Q */
|
||||
unsigned max_q; /**< Max Q */
|
||||
unsigned inc_q; /**< Increment between two values of Q */
|
||||
} pll_cfg_t;
|
||||
|
||||
/**
|
||||
* @brief Clock configuration
|
||||
*/
|
||||
typedef struct {
|
||||
enum fam family; /**< Family */
|
||||
|
||||
unsigned max_coreclock; /**< Max coreclock */
|
||||
unsigned max_apb1; /**< Max APB1 clock */
|
||||
unsigned max_apb2; /**< Max APB2 clock */
|
||||
|
||||
unsigned hsi; /**< HSI frequency */
|
||||
|
||||
pll_cfg_t pll; /**< PLL configuration */
|
||||
|
||||
bool has_pll_i2s; /**< PLL I2S available */
|
||||
bool has_pll_sai; /**< PLL SAI available */
|
||||
bool has_pll_i2s_m; /**< PLL I2S has a M factor */
|
||||
bool has_pll_sai_m; /**< PLL SAI has a M factor */
|
||||
bool has_pll_i2s_alt_input; /**< PLL I2S has an external input available */
|
||||
|
||||
unsigned hsi_prediv; /**< Value if HSI has a fixed prediv, 0 otherwise */
|
||||
|
||||
int has_alt_48MHz; /**< 48MHz can be generated by an alternate source */
|
||||
bool need_48MHz; /**< 48MHz is needed */
|
||||
} clk_cfg_t;
|
||||
|
||||
/**
|
||||
* @name Alternative 48MHz sources
|
||||
* @{
|
||||
*/
|
||||
#define ALT_48MHZ_NO 0
|
||||
#define ALT_48MHZ_I2S 1
|
||||
#define ALT_48MHZ_SAI 2
|
||||
|
||||
#define ALT_48MHZ_Q 0
|
||||
#define ALT_48MHZ_P 4
|
||||
/** @} */
|
||||
|
||||
#define STM32F(x) [STM32F##x] = x
|
||||
#define STM32F0(x) [STM32F0##x] = x
|
||||
|
||||
/** List of supported models */
|
||||
static const unsigned stm32_model[] = {
|
||||
STM32F0(30),
|
||||
STM32F0(70),
|
||||
STM32F0(31),
|
||||
STM32F0(51),
|
||||
STM32F0(71),
|
||||
STM32F0(91),
|
||||
STM32F0(42),
|
||||
STM32F0(72),
|
||||
STM32F0(38),
|
||||
STM32F0(48),
|
||||
STM32F0(58),
|
||||
STM32F0(78),
|
||||
STM32F0(98),
|
||||
|
||||
STM32F(100),
|
||||
STM32F(101),
|
||||
STM32F(102),
|
||||
STM32F(103),
|
||||
|
||||
STM32F(205),
|
||||
STM32F(207),
|
||||
STM32F(215),
|
||||
STM32F(217),
|
||||
|
||||
STM32F(301),
|
||||
STM32F(302),
|
||||
STM32F(303),
|
||||
STM32F(334),
|
||||
STM32F(373),
|
||||
STM32F(318),
|
||||
STM32F(328),
|
||||
STM32F(358),
|
||||
STM32F(378),
|
||||
STM32F(398),
|
||||
|
||||
STM32F(401),
|
||||
STM32F(405),
|
||||
STM32F(407),
|
||||
STM32F(410),
|
||||
STM32F(411),
|
||||
STM32F(412),
|
||||
STM32F(413),
|
||||
STM32F(415),
|
||||
STM32F(417),
|
||||
STM32F(423),
|
||||
STM32F(427),
|
||||
STM32F(429),
|
||||
STM32F(437),
|
||||
STM32F(439),
|
||||
STM32F(446),
|
||||
STM32F(469),
|
||||
STM32F(479),
|
||||
|
||||
STM32F(722),
|
||||
STM32F(732),
|
||||
STM32F(746),
|
||||
STM32F(756),
|
||||
STM32F(767),
|
||||
STM32F(769),
|
||||
STM32F(777),
|
||||
STM32F(779),
|
||||
};
|
||||
|
||||
/** STM32F2xx / STM32F401 PLL config */
|
||||
#define stm32f2_4_192_pll_cfg { \
|
||||
.min_vco_input = 1000000U, \
|
||||
.max_vco_input = 2000000U, \
|
||||
.min_vco_output = 192000000U, \
|
||||
.max_vco_output = 432000000U, \
|
||||
.min_n = 50, \
|
||||
.max_n = 432, \
|
||||
.inc_n = 1, \
|
||||
.min_m = 2, \
|
||||
.max_m = 63, \
|
||||
.inc_m = 1, \
|
||||
.min_p = 2, \
|
||||
.max_p = 8, \
|
||||
.inc_p = 2, \
|
||||
.min_q = 2, \
|
||||
.max_q = 15, \
|
||||
.inc_q = 1, \
|
||||
}
|
||||
|
||||
/** STM32F4 (except 401) / STM32F7 PLL config */
|
||||
#define stm32f4_7_pll_cfg { \
|
||||
.min_vco_input = 1000000U, \
|
||||
.max_vco_input = 2000000U, \
|
||||
.min_vco_output = 192000000U, \
|
||||
.max_vco_output = 432000000U, \
|
||||
.min_n = 50, \
|
||||
.max_n = 432, \
|
||||
.inc_n = 1, \
|
||||
.min_m = 2, \
|
||||
.max_m = 63, \
|
||||
.inc_m = 1, \
|
||||
.min_p = 2, \
|
||||
.max_p = 8, \
|
||||
.inc_p = 2, \
|
||||
.min_q = 2, \
|
||||
.max_q = 15, \
|
||||
.inc_q = 1, \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clock config for supported cpu
|
||||
*/
|
||||
static const clk_cfg_t stm32_clk_cfg[] = {
|
||||
[STM32F030 ... STM32F098] = {
|
||||
.family = STM32F0,
|
||||
.max_coreclock = 48000000U,
|
||||
.max_apb1 = 48000000U,
|
||||
.max_apb2 = 0,
|
||||
.hsi = 8000000U,
|
||||
.pll = {
|
||||
.min_vco_input = 1000000U,
|
||||
.max_vco_input = 24000000U,
|
||||
.min_vco_output = 16000000U,
|
||||
.max_vco_output = 48000000U,
|
||||
.min_m = 1,
|
||||
.max_m = 16,
|
||||
.inc_m = 1,
|
||||
.min_n = 2,
|
||||
.max_n = 16,
|
||||
.inc_n = 1,
|
||||
.min_p = 1,
|
||||
.max_p = 1,
|
||||
.inc_p = 1,
|
||||
},
|
||||
.has_pll_i2s = false,
|
||||
.has_pll_sai = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.hsi_prediv = 2,
|
||||
.need_48MHz = false,
|
||||
},
|
||||
[STM32F100] = {
|
||||
.family = STM32F1,
|
||||
.max_coreclock = 24000000U,
|
||||
.max_apb1 = 24000000U,
|
||||
.max_apb2 = 24000000U,
|
||||
.hsi = 8000000U,
|
||||
.pll = {
|
||||
.min_vco_input = 1000000U,
|
||||
.max_vco_input = 24000000U,
|
||||
.min_vco_output = 16000000U,
|
||||
.max_vco_output = 24000000U,
|
||||
.min_m = 1,
|
||||
.max_m = 16,
|
||||
.inc_m = 1,
|
||||
.min_n = 2,
|
||||
.max_n = 16,
|
||||
.inc_n = 1,
|
||||
.min_p = 1,
|
||||
.max_p = 1,
|
||||
.inc_p = 1,
|
||||
},
|
||||
.has_pll_i2s = false,
|
||||
.has_pll_sai = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.hsi_prediv = 2,
|
||||
.need_48MHz = false,
|
||||
},
|
||||
[STM32F101 ... STM32F103] = {
|
||||
.family = STM32F1,
|
||||
.max_coreclock = 72000000U,
|
||||
.max_apb1 = 36000000U,
|
||||
.max_apb2 = 72000000U,
|
||||
.hsi = 8000000U,
|
||||
.pll = {
|
||||
.min_vco_input = 1000000U,
|
||||
.max_vco_input = 25000000U,
|
||||
.min_vco_output = 1000000U,
|
||||
.max_vco_output = 72000000U,
|
||||
.min_m = 1,
|
||||
.max_m = 16,
|
||||
.inc_m = 1,
|
||||
.min_n = 2,
|
||||
.max_n = 16,
|
||||
.inc_n = 1,
|
||||
.min_p = 1,
|
||||
.max_p = 1,
|
||||
.inc_p = 1,
|
||||
},
|
||||
.has_pll_i2s = false,
|
||||
.has_pll_sai = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.hsi_prediv = 2,
|
||||
.need_48MHz = false,
|
||||
},
|
||||
[STM32F205 ... STM32F217] = {
|
||||
.family = STM32F2,
|
||||
.max_coreclock = 120000000U,
|
||||
.max_apb1 = 30000000U,
|
||||
.max_apb2 = 60000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f2_4_192_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F301 ... STM32F398] = {
|
||||
.family = STM32F3,
|
||||
.max_coreclock = 72000000U,
|
||||
.max_apb1 = 36000000U,
|
||||
.max_apb2 = 72000000U,
|
||||
.hsi = 8000000U,
|
||||
.pll = {
|
||||
.min_vco_input = 1000000U,
|
||||
.max_vco_input = 25000000U,
|
||||
.min_vco_output = 1000000U,
|
||||
.max_vco_output = 72000000U,
|
||||
.min_m = 1,
|
||||
.max_m = 16,
|
||||
.inc_m = 1,
|
||||
.min_n = 2,
|
||||
.max_n = 16,
|
||||
.inc_n = 1,
|
||||
.min_p = 1,
|
||||
.max_p = 1,
|
||||
.inc_p = 1,
|
||||
},
|
||||
.has_pll_i2s = false,
|
||||
.has_pll_sai = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.hsi_prediv = 2,
|
||||
.need_48MHz = false,
|
||||
},
|
||||
[STM32F401] = {
|
||||
.family = STM32F4,
|
||||
.max_coreclock = 84000000U,
|
||||
.max_apb1 = 42000000U,
|
||||
.max_apb2 = 84000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f2_4_192_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = false,
|
||||
.has_pll_i2s_m = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F405 ... STM32F407] = {
|
||||
.family = STM32F4,
|
||||
.max_coreclock = 168000000U,
|
||||
.max_apb1 = 42000000U,
|
||||
.max_apb2 = 84000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f4_7_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = false,
|
||||
.has_pll_i2s_m = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F410] = {
|
||||
.family = STM32F4,
|
||||
.max_coreclock = 100000000U,
|
||||
.max_apb1 = 50000000U,
|
||||
.max_apb2 = 100000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f4_7_pll_cfg,
|
||||
.has_pll_i2s = false,
|
||||
.has_pll_sai = false,
|
||||
.has_pll_i2s_m = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F411] = {
|
||||
.family = STM32F4,
|
||||
.max_coreclock = 100000000U,
|
||||
.max_apb1 = 50000000U,
|
||||
.max_apb2 = 100000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f4_7_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = false,
|
||||
.has_pll_i2s_m = true,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F412 ... STM32F413] = {
|
||||
.family = STM32F4,
|
||||
.max_coreclock = 100000000U,
|
||||
.max_apb1 = 50000000U,
|
||||
.max_apb2 = 100000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f4_7_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = true,
|
||||
.has_pll_i2s_m = true,
|
||||
.has_pll_sai_m = false,
|
||||
.has_pll_i2s_alt_input = true,
|
||||
.has_alt_48MHz = ALT_48MHZ_I2S,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F415 ... STM32F417] = {
|
||||
.family = STM32F4,
|
||||
.max_coreclock = 168000000U,
|
||||
.max_apb1 = 42000000U,
|
||||
.max_apb2 = 84000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f4_7_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = false,
|
||||
.has_pll_i2s_m = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F423] = {
|
||||
.family = STM32F4,
|
||||
.max_coreclock = 100000000U,
|
||||
.max_apb1 = 50000000U,
|
||||
.max_apb2 = 100000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f4_7_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = true,
|
||||
.has_pll_i2s_m = true,
|
||||
.has_pll_sai_m = false,
|
||||
.has_pll_i2s_alt_input = true,
|
||||
.has_alt_48MHz = ALT_48MHZ_I2S,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F427 ... STM32F439] = {
|
||||
.family = STM32F4,
|
||||
.max_coreclock = 180000000U,
|
||||
.max_apb1 = 45000000U,
|
||||
.max_apb2 = 90000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f4_7_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = true,
|
||||
.has_pll_i2s_m = false,
|
||||
.has_pll_sai_m = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = 0,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F446] = {
|
||||
.family = STM32F4,
|
||||
.max_coreclock = 180000000U,
|
||||
.max_apb1 = 45000000U,
|
||||
.max_apb2 = 90000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f4_7_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = true,
|
||||
.has_pll_i2s_m = true,
|
||||
.has_pll_sai_m = true,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = ALT_48MHZ_SAI | ALT_48MHZ_P,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F469 ... STM32F479] = {
|
||||
.family = STM32F4,
|
||||
.max_coreclock = 180000000U,
|
||||
.max_apb1 = 45000000U,
|
||||
.max_apb2 = 90000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f4_7_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = true,
|
||||
.has_pll_i2s_m = false,
|
||||
.has_pll_sai_m = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = ALT_48MHZ_SAI | ALT_48MHZ_P,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
[STM32F722 ... STM32F779] = {
|
||||
.family = STM32F7,
|
||||
.max_coreclock = 216000000U,
|
||||
.max_apb1 = 54000000U,
|
||||
.max_apb2 = 108000000U,
|
||||
.hsi = 16000000U,
|
||||
.pll = stm32f4_7_pll_cfg,
|
||||
.has_pll_i2s = true,
|
||||
.has_pll_sai = true,
|
||||
.has_pll_i2s_m = false,
|
||||
.has_pll_sai_m = false,
|
||||
.has_pll_i2s_alt_input = false,
|
||||
.has_alt_48MHz = ALT_48MHZ_SAI | ALT_48MHZ_P,
|
||||
.need_48MHz = true,
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* CLK_CONF_H */
|
12
cpu/stm32/dist/spi_divtable/Makefile
vendored
Normal file
12
cpu/stm32/dist/spi_divtable/Makefile
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
NAME = spi_divtable
|
||||
CC = gcc
|
||||
CFLAGS = -std=c99 -Wall
|
||||
SRC = $(wildcard *.c)
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all:
|
||||
$(CC) $(CFLAGS) -o $(NAME) $(SRC)
|
||||
|
||||
clean:
|
||||
rm -f $(NAME)
|
106
cpu/stm32/dist/spi_divtable/spi_divtable.c
vendored
Normal file
106
cpu/stm32/dist/spi_divtable/spi_divtable.c
vendored
Normal file
@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Freie Universität Berlin
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Compute SPI clock scaler values for STM32x CPUs
|
||||
*
|
||||
* This helper tool calculates the needed SPI scaler values for the APBx buses.
|
||||
* It outputs the values for the possible SPI clock speeds based on the clock
|
||||
* speeds of the APB1 and the APB2 bus.
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0]))
|
||||
|
||||
static int targets[] = { 100000, 400000, 1000000, 5000000, 10000000 };
|
||||
|
||||
/**
|
||||
* @brief Find the best fitting divisor value base on target and APB clock
|
||||
*
|
||||
* The SPI bus clock speed is calculated as follows:
|
||||
*
|
||||
* clk_bus = clk_apb / 2 ^ (x + 1)
|
||||
*
|
||||
* In this function we will try to find the x-value, that brings clk_bus as
|
||||
* close as possible to the value given in @p target.
|
||||
*
|
||||
* @param[in] bus clock speed of the given APB bus
|
||||
* @param[in] target targeted SPI clock speed
|
||||
*
|
||||
* @return the closes divisor value to be used in the clock config register
|
||||
*/
|
||||
static int find_best(int bus, int target)
|
||||
{
|
||||
int br = -1;
|
||||
int tmp = bus;
|
||||
|
||||
do {
|
||||
// printf("b: x: %i - tmp: %i\n", br, tmp);
|
||||
++br;
|
||||
tmp /= 2;
|
||||
if (tmp == target) {
|
||||
return br;
|
||||
}
|
||||
// printf("a: x: %i - tmp: %i\n", br, tmp);
|
||||
// printf(" (tmp - target):%i\n", (tmp - target));
|
||||
} while ((tmp - target > 0) && (br < 7));
|
||||
|
||||
int old = tmp * 2;
|
||||
// printf("(target - tmp):%i, (old - target): %i\n", (target - tmp), (old - target));
|
||||
|
||||
if ((target - tmp) > (old - target)) {
|
||||
return (br - 1);
|
||||
}
|
||||
return br;
|
||||
}
|
||||
|
||||
static int real_clk(int bus, int br)
|
||||
{
|
||||
return bus / (2 << br);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int tnum = ARRAY_SIZE(targets);
|
||||
int apb[2];
|
||||
|
||||
if (argc != 3) {
|
||||
printf("usage: %s <APB1 clk> <APB2 clk> (in Hz)\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
apb[0] = atoi(argv[1]); /* APB1 */
|
||||
apb[1] = atoi(argv[2]); /* APB2 */
|
||||
|
||||
if ((apb[0] <= 0) || (apb[1] <= 0)) {
|
||||
puts("error: invalid APB clock speed values");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("static const uint8_t spi_divtable[2][%i] = {\n", tnum);
|
||||
|
||||
for (int bus = 0; bus < ARRAY_SIZE(apb); bus ++) {
|
||||
printf(" { /* for APB%i @ %iHz */\n", (bus + 1), apb[bus]);
|
||||
for (int t = 0; t < tnum; t++) {
|
||||
int br = find_best(apb[bus], targets[t]);
|
||||
printf(" %i%c /* -> %iHz */\n",
|
||||
br, ((t < (tnum - 1)) ? ',' : ' '), real_clk(apb[bus], br));
|
||||
}
|
||||
printf(" }%s\n", ((bus == 0) ? "," : ""));
|
||||
}
|
||||
puts("};");
|
||||
|
||||
return 0;
|
||||
}
|
55
cpu/stm32/doc.txt
Normal file
55
cpu/stm32/doc.txt
Normal file
@ -0,0 +1,55 @@
|
||||
/**
|
||||
* @defgroup cpu_stm32_common STM32 common
|
||||
* @ingroup cpu
|
||||
* @brief STM32 common code and definitions
|
||||
*
|
||||
* This module contains all common code and definition to all STM32 cpu
|
||||
* families supported by RIOT: @ref cpu_stm32f0, @ref cpu_stm32l0,
|
||||
* @ref cpu_stm32f1, @ref cpu_stm32f2, @ref cpu_stm32f3, @ref cpu_stm32f4,
|
||||
* @ref cpu_stm32l4, @ref cpu_stm32f7.
|
||||
*
|
||||
* STM32Fx Clock configuration
|
||||
* =================================
|
||||
*
|
||||
* stm32fx cpus share clock configuration code and macro.
|
||||
* It can be configured as described here.
|
||||
*
|
||||
* The following macro must be defined in the board's periph_conf.h:
|
||||
* - CLOCK_HSE: 0 if HSI must be used as PLL source, frequency in Hz otherwise,
|
||||
* - CLOCK_LSE: 0 if LSI must be used as low speed clock, 1 otherwise
|
||||
* (the LSE is a 32.768kHz crytal)
|
||||
* - CLOCK_CORECLOCK: desired main clock frequency
|
||||
* - CLOCK_AHB_DIV, CLOCK_AHB: AHB prescaler in register value and AHB frequecny in Hz
|
||||
* - CLOCK_APB1_DIV, CLOCK_APB1: APB1 prescaler in register value and APB1 frequecny in Hz
|
||||
* - CLOCK_APB2_DIV, CLOCK_APB2: APB2 prescaler in register value and APB2 frequecny in Hz
|
||||
* (CLOCK_APB2_DIV is not needed for stm32f0)
|
||||
*
|
||||
* The following macro must be defined for stm32f[2|4|7]:
|
||||
* - CLOCK_PLL_M, CLOCK_PLL_N, CLOCK_PLL_P, CLOCK_PLL_Q, (CLOCK_PLL_R, optional):
|
||||
* Main PLL factors
|
||||
*
|
||||
* The following macro must be defined for stm32f[0|1|3]:
|
||||
* - PLL_MUL, PLL_PREDIV: PLL factors. These values are used as is. A PREDIV of 2
|
||||
* can be assumed when HSI is selected as PLL input. Some model support any value
|
||||
* as PREDIV even with HSI though. The `clk_conf` tool will assume PREDIV must be
|
||||
* to with HSI and will set it accordingly.
|
||||
*
|
||||
* The following macro are optional and can be defined depending on board config
|
||||
* and application needs:
|
||||
* - CLOCK_ENABLE_PLL_I2S: if a second PLL (PLL I2S) is available on the cpu, it
|
||||
* can be activated with this macro, then CLOCK_PLL_I2S_M, CLOCK_PLL_I2S_N,
|
||||
* CLOCK_PLL_I2S_P and CLOCK_PLL_I2S_Q need to be defined, CLOCK_PLL_I2S_R is optional.
|
||||
* - CLOCK_ENABLE_PLL_SAI: if a second PLL (PLL SAI) is available on the cpu, it
|
||||
* can be activated with this macro, then CLOCK_PLL_SAI_M, CLOCK_PLL_SAI_N,
|
||||
* CLOCK_PLL_SAI_P and CLOCK_PLL_SAI_Q need to be defined, CLOCK_PLL_SAI_R is optional.
|
||||
* - CLOCK_USE_ALT_48MHZ: if the 48MHz clock should be generated by the alternate
|
||||
* source (PLL I2S or PLL SAI, depending on cpu)
|
||||
*
|
||||
* All the previous constants can be generated using the tool in
|
||||
* `cpu/stm32_common/dist/clk_conf`.
|
||||
*
|
||||
* Clock outputs can also be setup with macro:
|
||||
* - CLOCK_MCOx_SRC, CLOCK_MCOx_PRE, with x=1,2: MCO1 and MCO2 output configuration
|
||||
* macros. CLOCK_MCOx_SRC defines the MCOx source, as a register value (see vendor header),
|
||||
* CLOCK_MCOx_PRE defines the MCOx prescaler, as a register value.
|
||||
*/
|
146
cpu/stm32/include/can_params.h
Normal file
146
cpu/stm32/include/can_params.h
Normal file
@ -0,0 +1,146 @@
|
||||
/*
|
||||
* Copyright (C) 2016 OTA keys S.A.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser General
|
||||
* Public License v2.1. See the file LICENSE in the top level directory for more
|
||||
* details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup candev_stm32
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief STM32 CAN controller driver (bxCAN) default parameters
|
||||
*
|
||||
* @author Vincent Dupont <vincent@otakeys.com>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef CAN_PARAMS_H
|
||||
#define CAN_PARAMS_H
|
||||
|
||||
#include "can/device.h"
|
||||
#include "periph/can.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Default STM32 CAN devices config */
|
||||
static const can_conf_t candev_conf[] = {
|
||||
{
|
||||
#if defined(CPU_FAM_STM32F0)
|
||||
.can = CAN,
|
||||
.rcc_mask = RCC_APB1ENR_CANEN,
|
||||
.rx_pin = GPIO_PIN(PORT_A, 11),
|
||||
.tx_pin = GPIO_PIN(PORT_A, 12),
|
||||
.af = GPIO_AF4,
|
||||
.irqn = CEC_CAN_IRQn,
|
||||
#else
|
||||
.can = CAN1,
|
||||
#if defined(CPU_FAM_STM32L4)
|
||||
.rcc_mask = RCC_APB1ENR1_CAN1EN,
|
||||
#else
|
||||
.rcc_mask = RCC_APB1ENR_CAN1EN,
|
||||
.can_master = CAN1,
|
||||
.master_rcc_mask = RCC_APB1ENR_CAN1EN,
|
||||
.first_filter = 0,
|
||||
.nb_filters = 14,
|
||||
#endif
|
||||
#if defined(CPU_FAM_STM32F1)
|
||||
.rx_pin = GPIO_PIN(PORT_A, 11),
|
||||
.tx_pin = GPIO_PIN(PORT_A, 12),
|
||||
#elif defined(CPU_FAM_STM32L4)
|
||||
.rx_pin = GPIO_PIN(PORT_B, 8),
|
||||
.tx_pin = GPIO_PIN(PORT_B, 9),
|
||||
.af = GPIO_AF9,
|
||||
#else
|
||||
.rx_pin = GPIO_PIN(PORT_D, 0),
|
||||
.tx_pin = GPIO_PIN(PORT_D, 1),
|
||||
.af = GPIO_AF9,
|
||||
#endif
|
||||
.tx_irqn = CAN1_TX_IRQn,
|
||||
.rx0_irqn = CAN1_RX0_IRQn,
|
||||
.rx1_irqn = CAN1_RX1_IRQn,
|
||||
.sce_irqn = CAN1_SCE_IRQn,
|
||||
#endif
|
||||
.ttcm = 0,
|
||||
.abom = 1,
|
||||
.awum = 1,
|
||||
.nart = 0,
|
||||
.rflm = 0,
|
||||
.txfp = 0,
|
||||
},
|
||||
#if (CANDEV_STM32_CHAN_NUMOF >= 2) && (CAN_DLL_NUMOF >= 2)
|
||||
{
|
||||
.can = CAN2,
|
||||
.rcc_mask = RCC_APB1ENR_CAN2EN,
|
||||
.can_master = CAN1,
|
||||
.master_rcc_mask = RCC_APB1ENR_CAN1EN,
|
||||
.first_filter = 14,
|
||||
.nb_filters = 14,
|
||||
.rx_pin = GPIO_PIN(PORT_B, 5),
|
||||
.tx_pin = GPIO_PIN(PORT_B, 6),
|
||||
#ifndef CPU_FAM_STM32F1
|
||||
.af = GPIO_AF9,
|
||||
#endif
|
||||
.tx_irqn = CAN2_TX_IRQn,
|
||||
.rx0_irqn = CAN2_RX0_IRQn,
|
||||
.rx1_irqn = CAN2_RX1_IRQn,
|
||||
.sce_irqn = CAN2_SCE_IRQn,
|
||||
.ttcm = 0,
|
||||
.abom = 1,
|
||||
.awum = 1,
|
||||
.nart = 0,
|
||||
.rflm = 0,
|
||||
.txfp = 0,
|
||||
},
|
||||
#endif
|
||||
#if (CANDEV_STM32_CHAN_NUMOF >= 3) && (CAN_DLL_NUMOF >= 3)
|
||||
{
|
||||
.can = CAN3,
|
||||
.rcc_mask = RCC_APB1ENR_CAN3EN,
|
||||
.can_master = CAN3,
|
||||
.master_rcc_mask = RCC_APB1ENR_CAN3EN,
|
||||
.first_filter = 0,
|
||||
.nb_filters = 14,
|
||||
.rx_pin = GPIO_PIN(PORT_B, 3),
|
||||
.tx_pin = GPIO_PIN(PORT_B, 4),
|
||||
.af = GPIO_AF11,
|
||||
.tx_irqn = CAN3_TX_IRQn,
|
||||
.rx0_irqn = CAN3_RX0_IRQn,
|
||||
.rx1_irqn = CAN3_RX1_IRQn,
|
||||
.sce_irqn = CAN3_SCE_IRQn,
|
||||
.ttcm = 0,
|
||||
.abom = 1,
|
||||
.awum = 1,
|
||||
.nart = 0,
|
||||
.rflm = 0,
|
||||
.txfp = 0,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
/** Default STM32 CAN devices parameters */
|
||||
static const candev_params_t candev_params[] = {
|
||||
{
|
||||
.name = "can_stm32_0",
|
||||
},
|
||||
#if (CANDEV_STM32_CHAN_NUMOF >= 2) && (CAN_DLL_NUMOF >= 2)
|
||||
{
|
||||
.name = "can_stm32_1",
|
||||
},
|
||||
#endif
|
||||
#if (CANDEV_STM32_CHAN_NUMOF >= 3) && (CAN_DLL_NUMOF >= 3)
|
||||
{
|
||||
.name = "can_stm32_2",
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* CAN_PARAMS_H */
|
204
cpu/stm32/include/candev_stm32.h
Normal file
204
cpu/stm32/include/candev_stm32.h
Normal file
@ -0,0 +1,204 @@
|
||||
/*
|
||||
* Copyright (C) 2016 OTA keys S.A.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser General
|
||||
* Public License v2.1. See the file LICENSE in the top level directory for more
|
||||
* details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32_common
|
||||
* @ingroup drivers_can
|
||||
* @defgroup candev_stm32 STM32 CAN controller
|
||||
* @brief STM32 CAN controller driver (bxCAN)
|
||||
*
|
||||
* The STM32Fx microcontroller can have an integrated CAN controller (bxCAN)
|
||||
*
|
||||
* This driver has been tested with a STM32F0,STM32F2 and STM32F4 MCU
|
||||
* but should work on others.
|
||||
*
|
||||
* The default bitrate is set to 500 kbps and the default sample point is set to
|
||||
* 87.5%.
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief bxCAN specific definitions
|
||||
*
|
||||
* @author Vincent Dupont <vincent@otakeys.com>
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifndef CANDEV_STM32_H
|
||||
#define CANDEV_STM32_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "can/candev.h"
|
||||
|
||||
#if defined(CPU_LINE_STM32F413xx) || defined(CPU_LINE_STM32F423xx)
|
||||
#define CANDEV_STM32_CHAN_NUMOF 3
|
||||
#elif defined(CPU_FAM_STM32F1) || defined(CPU_FAM_STM32F2) || defined(CPU_FAM_STM32F4)
|
||||
#define CANDEV_STM32_CHAN_NUMOF 2
|
||||
#elif defined(CPU_FAM_STM32F0) || defined(CPU_FAM_STM32F3) || \
|
||||
defined(CPU_FAM_STM32L4) || DOXYGEN
|
||||
/** Number of channels in the device (up to 3) */
|
||||
#define CANDEV_STM32_CHAN_NUMOF 1
|
||||
#else
|
||||
#error "CAN STM32: CPU not supported"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @name ISR functions
|
||||
* @{
|
||||
*/
|
||||
#if defined(CPU_FAM_STM32F1)
|
||||
#define ISR_CAN1_TX isr_usb_hp_can1_tx
|
||||
#define ISR_CAN1_RX0 isr_usb_lp_can1_rx0
|
||||
#define ISR_CAN1_RX1 isr_can1_rx1
|
||||
#define ISR_CAN1_SCE isr_can1_sce
|
||||
#else
|
||||
#define ISR_CAN1_TX isr_can1_tx
|
||||
#define ISR_CAN1_RX0 isr_can1_rx0
|
||||
#define ISR_CAN1_RX1 isr_can1_rx1
|
||||
#define ISR_CAN1_SCE isr_can1_sce
|
||||
#define ISR_CAN2_TX isr_can2_tx
|
||||
#define ISR_CAN2_RX0 isr_can2_rx0
|
||||
#define ISR_CAN2_RX1 isr_can2_rx1
|
||||
#define ISR_CAN2_SCE isr_can2_sce
|
||||
#define ISR_CAN3_TX isr_can3_tx
|
||||
#define ISR_CAN3_RX0 isr_can3_rx0
|
||||
#define ISR_CAN3_RX1 isr_can3_rx1
|
||||
#define ISR_CAN3_SCE isr_can3_sce
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#if CANDEV_STM32_CHAN_NUMOF > 1 || DOXYGEN
|
||||
/** The maximum number of filters: 28 for dual channel, 14 for single channel */
|
||||
#define CAN_STM32_NB_FILTER 28
|
||||
#else
|
||||
#define CAN_STM32_NB_FILTER 14
|
||||
#endif
|
||||
|
||||
#ifndef CANDEV_STM32_DEFAULT_BITRATE
|
||||
/** Default bitrate */
|
||||
#define CANDEV_STM32_DEFAULT_BITRATE 500000U
|
||||
#endif
|
||||
|
||||
#ifndef CANDEV_STM32_DEFAULT_SPT
|
||||
/** Default sampling-point */
|
||||
#define CANDEV_STM32_DEFAULT_SPT 875
|
||||
#endif
|
||||
|
||||
/** bxCAN device configuration */
|
||||
typedef struct {
|
||||
CAN_TypeDef *can; /**< CAN device */
|
||||
uint32_t rcc_mask; /**< RCC mask to enable clock */
|
||||
gpio_t rx_pin; /**< RX pin */
|
||||
gpio_t tx_pin; /**< TX pin */
|
||||
#ifndef CPU_FAM_STM32F1
|
||||
gpio_af_t af; /**< Alternate pin function to use */
|
||||
#endif
|
||||
#if CANDEV_STM32_CHAN_NUMOF > 1 || defined(DOXYGEN)
|
||||
CAN_TypeDef *can_master; /**< Master CAN device */
|
||||
uint32_t master_rcc_mask; /**< Master device RCC mask */
|
||||
/** First filter in the bank. For a master channel it must be 0.
|
||||
* For a slave channel, it is used without checking with the master channel,
|
||||
* beware bot to overwrite the master config. */
|
||||
uint8_t first_filter;
|
||||
/** Number of filters to use. Must be less or equal
|
||||
* to CAN_STM32_NB_FILTER - first_filter */
|
||||
uint8_t nb_filters;
|
||||
#endif
|
||||
#if defined(CPU_FAM_STM32F0)
|
||||
uint8_t irqn; /**< CAN common IRQ channel */
|
||||
#else
|
||||
uint8_t tx_irqn; /**< TX IRQ channel */
|
||||
uint8_t rx0_irqn; /**< RX0 IRQ channel */
|
||||
uint8_t rx1_irqn; /**< RX1 IRQ channel */
|
||||
uint8_t sce_irqn; /**< SCE IRQ channel */
|
||||
#endif
|
||||
uint8_t ttcm : 1; /**< Time triggered communication mode */
|
||||
uint8_t abom : 1; /**< Automatic bus-off management */
|
||||
uint8_t awum : 1; /**< Automatic wakeup mode */
|
||||
uint8_t nart : 1; /**< No automatic retransmission */
|
||||
uint8_t rflm : 1; /**< Receive FIFO locked mode */
|
||||
uint8_t txfp : 1; /**< Transmit FIFO priority */
|
||||
uint8_t lbkm : 1; /**< Loopback mode */
|
||||
uint8_t silm : 1; /**< Silent mode */
|
||||
} can_conf_t;
|
||||
/** can_conf_t is re-defined */
|
||||
#define HAVE_CAN_CONF_T
|
||||
|
||||
/** The number of transmit mailboxes */
|
||||
#define CAN_STM32_TX_MAILBOXES 3
|
||||
/** The number of receive FIFO */
|
||||
#define CAN_STM32_RX_MAILBOXES 2
|
||||
|
||||
|
||||
#ifndef CAN_STM32_RX_MAIL_FIFO
|
||||
/** This is the maximum number of frame the driver can receive simultaneously */
|
||||
#define CAN_STM32_RX_MAIL_FIFO 12
|
||||
#endif
|
||||
|
||||
/** bxCAN candev descriptor */
|
||||
typedef struct can can_t;
|
||||
/** can_t is re-defined */
|
||||
#define HAVE_CAN_T
|
||||
|
||||
/** This structure holds anything related to the receive part */
|
||||
typedef struct candev_stm32_rx_fifo {
|
||||
struct can_frame frame[CAN_STM32_RX_MAIL_FIFO]; /**< Receive FIFO */
|
||||
int write_idx; /**< Write index in the receive FIFO */
|
||||
int read_idx; /**< Read index in the receive FIFO*/
|
||||
int is_full; /**< Flag set when the FIFO is full */
|
||||
} candev_stm32_rx_fifo_t;
|
||||
|
||||
/** Internal interrupt flags */
|
||||
typedef struct candev_stm32_isr {
|
||||
int isr_tx : 3; /**< Tx mailboxes interrupt */
|
||||
int isr_rx : 2; /**< Rx FIFO interrupt */
|
||||
int isr_wkup : 1; /**< Wake up interrupt */
|
||||
} candev_stm32_isr_t;
|
||||
|
||||
/** STM32 CAN device descriptor */
|
||||
struct can {
|
||||
candev_t candev; /**< Common candev struct */
|
||||
const can_conf_t *conf; /**< Configuration */
|
||||
gpio_t rx_pin; /**< RX pin */
|
||||
gpio_t tx_pin; /**< TX pin */
|
||||
gpio_af_t af; /**< Alternate pin function to use */
|
||||
/** Tx mailboxes */
|
||||
const struct can_frame *tx_mailbox[CAN_STM32_TX_MAILBOXES];
|
||||
candev_stm32_rx_fifo_t rx_fifo; /**< Rx FIFOs */
|
||||
candev_stm32_isr_t isr_flags; /**< ISR flags */
|
||||
};
|
||||
|
||||
#ifndef CPU_FAM_STM32F1
|
||||
/**
|
||||
* @brief Set the pins of an stm32 CAN device
|
||||
*
|
||||
* @param[in,out] dev the device to set pins
|
||||
* @param[in] tx_pin tx pin
|
||||
* @param[in] rx_pin rx pin
|
||||
* @param[in] af alternate function
|
||||
*/
|
||||
void candev_stm32_set_pins(can_t *dev, gpio_t tx_pin, gpio_t rx_pin,
|
||||
gpio_af_t af);
|
||||
#else
|
||||
/**
|
||||
* @brief Set the pins of an stm32 CAN device
|
||||
*
|
||||
* @param[in,out] dev the device to set pins
|
||||
* @param[in] tx_pin tx pin
|
||||
* @param[in] rx_pin rx pin
|
||||
*/
|
||||
void candev_stm32_set_pins(can_t *dev, gpio_t tx_pin, gpio_t rx_pin);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* CANDEV_STM32_H */
|
171
cpu/stm32/include/cpu_conf.h
Normal file
171
cpu/stm32/include/cpu_conf.h
Normal file
@ -0,0 +1,171 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Freie Universität Berlin
|
||||
* 2016 Inria
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser General
|
||||
* Public License v2.1. See the file LICENSE in the top level directory for more
|
||||
* details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup cpu_stm32f0 STM32F0
|
||||
* @brief STM32F0 specific code
|
||||
* @ingroup cpu
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Implementation specific CPU configuration options
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
|
||||
*/
|
||||
|
||||
#ifndef CPU_CONF_H
|
||||
#define CPU_CONF_H
|
||||
|
||||
#include "cpu_conf_common.h"
|
||||
|
||||
#if CPU_FAM_STM32F0
|
||||
#include "vendor/stm32f0xx.h"
|
||||
#elif CPU_FAM_STM32F1
|
||||
#include "vendor/stm32f1xx.h"
|
||||
#elif CPU_FAM_STM32F2
|
||||
#include "vendor/stm32f2xx.h"
|
||||
#elif CPU_FAM_STM32F3
|
||||
#include "vendor/stm32f3xx.h"
|
||||
#elif CPU_FAM_STM32F4
|
||||
#include "vendor/stm32f4xx.h"
|
||||
#elif CPU_FAM_STM32F7
|
||||
#include "vendor/stm32f7xx.h"
|
||||
#elif CPU_FAM_STM32L0
|
||||
#include "vendor/stm32l0xx.h"
|
||||
#elif CPU_FAM_STM32L1
|
||||
#include "vendor/stm32l1xx.h"
|
||||
#elif CPU_FAM_STM32L4
|
||||
#include "vendor/stm32l4xx.h"
|
||||
#elif CPU_FAM_STM32WB
|
||||
#include "vendor/stm32wbxx.h"
|
||||
#else
|
||||
#error Not supported CPU family
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief ARM Cortex-M specific CPU configuration
|
||||
* @{
|
||||
*/
|
||||
#define CPU_DEFAULT_IRQ_PRIO (1U)
|
||||
#if defined(CPU_LINE_STM32F030x8)
|
||||
#define CPU_IRQ_NUMOF (29U)
|
||||
#elif defined(CPU_LINE_STM32F031x6) || defined(CPU_LINE_STM32F030x4)
|
||||
#define CPU_IRQ_NUMOF (28U)
|
||||
#elif defined(CPU_LINE_STM32F051x8) || defined(CPU_LINE_STM32F091xC)
|
||||
#define CPU_IRQ_NUMOF (31U)
|
||||
#elif defined (CPU_FAM_STM32F0)
|
||||
#define CPU_IRQ_NUMOF (32U)
|
||||
#elif defined(CPU_LINE_STM32F103xE)
|
||||
#define CPU_IRQ_NUMOF (60U)
|
||||
#elif defined (CPU_FAM_STM32F1)
|
||||
#define CPU_IRQ_NUMOF (43U)
|
||||
#elif defined (CPU_FAM_STM32F2)
|
||||
#define CPU_IRQ_NUMOF (81U)
|
||||
#elif defined(CPU_LINE_STM32F303xE)
|
||||
#define CPU_IRQ_NUMOF (85U)
|
||||
#elif defined(CPU_FAM_STM32F3)
|
||||
#define CPU_IRQ_NUMOF (82U)
|
||||
#elif defined(CPU_LINE_STM32F401xE)
|
||||
#define CPU_IRQ_NUMOF (85U)
|
||||
#elif defined(CPU_LINE_STM32F405xx) || defined(CPU_LINE_STM32F407xx) \
|
||||
|| defined(CPU_LINE_STM32F415xx)
|
||||
#define CPU_IRQ_NUMOF (82U)
|
||||
#elif defined(CPU_LINE_STM32F410Rx)
|
||||
#define CPU_IRQ_NUMOF (98U)
|
||||
#elif defined(CPU_LINE_STM32F411xE)
|
||||
#define CPU_IRQ_NUMOF (86U)
|
||||
#elif defined(CPU_LINE_STM32F412Zx) || defined(CPU_LINE_STM32F446xx)
|
||||
#define CPU_IRQ_NUMOF (97U)
|
||||
#elif defined(CPU_LINE_STM32F413xx) || defined(CPU_LINE_STM32F423xx)
|
||||
#define CPU_IRQ_NUMOF (102U)
|
||||
#elif defined(CPU_LINE_STM32F429xx) || defined(CPU_LINE_STM32F437xx)
|
||||
#define CPU_IRQ_NUMOF (91U)
|
||||
#elif defined(CPU_LINE_STM32F746xx)
|
||||
#define CPU_IRQ_NUMOF (98U)
|
||||
#elif defined(CPU_LINE_STM32F767xx) || defined(CPU_LINE_STM32F769xx)
|
||||
#define CPU_IRQ_NUMOF (110U)
|
||||
#elif defined(CPU_LINE_STM32F722xx) || defined(CPU_LINE_STM32F723xx)
|
||||
#define CPU_IRQ_NUMOF (104U)
|
||||
#elif defined(CPU_LINE_STM32L031xx)
|
||||
#define CPU_IRQ_NUMOF (30U)
|
||||
#elif defined(CPU_FAM_STM32L0)
|
||||
#define CPU_IRQ_NUMOF (32U)
|
||||
#elif defined(CPU_MODEL_STM32L151RB_A) || defined(CPU_MODEL_STM32L151CB) || \
|
||||
defined(CPU_MODEL_STM32L151CB_A)
|
||||
#define CPU_IRQ_NUMOF (45U)
|
||||
#elif defined(CPU_FAM_STM32L1)
|
||||
#define CPU_IRQ_NUMOF (57U)
|
||||
#elif defined(CPU_MODEL_STM32L432KC) || defined(CPU_MODEL_STM32L433RC)
|
||||
#define CPU_IRQ_NUMOF (83U)
|
||||
#elif defined(CPU_MODEL_STM32L496ZG) || defined(CPU_MODEL_STM32L496AG)
|
||||
#define CPU_IRQ_NUMOF (91U)
|
||||
#elif defined(CPU_MODEL_STM32L4R5ZI)
|
||||
#define CPU_IRQ_NUMOF (95U)
|
||||
#elif defined(CPU_FAM_STM32L4)
|
||||
#define CPU_IRQ_NUMOF (82U)
|
||||
#elif defined(CPU_MODEL_STM32WB55RG)
|
||||
#define CPU_IRQ_NUMOF (63U)
|
||||
#else
|
||||
#error Number of IRQs not configured for this CPU
|
||||
#endif
|
||||
#define CPU_FLASH_BASE FLASH_BASE
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief Flash page configuration
|
||||
* @{
|
||||
*/
|
||||
#if defined(CPU_FAM_STM32WB)
|
||||
#define FLASHPAGE_SIZE (4096U)
|
||||
#elif defined(CPU_LINE_STM32F091xC) || defined(CPU_LINE_STM32F072xB) \
|
||||
|| defined(CPU_LINE_STM32F030xC) || defined(CPU_LINE_STM32F103xE) \
|
||||
|| defined(CPU_FAM_STM32F3) || defined(CPU_FAM_STM32L4)
|
||||
#define FLASHPAGE_SIZE (2048U)
|
||||
#elif defined(CPU_LINE_STM32F051x8) || defined(CPU_LINE_STM32F042x6) \
|
||||
|| defined(CPU_LINE_STM32F070xB) || defined(CPU_LINE_STM32F030x8) \
|
||||
|| defined(CPU_LINE_STM32F030x4) || defined(CPU_LINE_STM32F103xB)
|
||||
#define FLASHPAGE_SIZE (1024U)
|
||||
#elif defined(CPU_FAM_STM32L1)
|
||||
#define FLASHPAGE_SIZE (256U)
|
||||
#elif defined(CPU_FAM_STM32L0)
|
||||
#define FLASHPAGE_SIZE (128U)
|
||||
#endif
|
||||
|
||||
#define FLASHPAGE_NUMOF (STM32_FLASHSIZE / FLASHPAGE_SIZE)
|
||||
|
||||
/* The minimum block size which can be written depends on the family.
|
||||
* However, the erase block is always FLASHPAGE_SIZE.
|
||||
*/
|
||||
#if defined(CPU_FAM_STM32L4) || defined(CPU_FAM_STM32WB)
|
||||
#define FLASHPAGE_RAW_BLOCKSIZE (8U)
|
||||
#elif defined(CPU_FAM_STM32L0) || defined(CPU_FAM_STM32L1)
|
||||
#define FLASHPAGE_RAW_BLOCKSIZE (4U)
|
||||
#else
|
||||
#define FLASHPAGE_RAW_BLOCKSIZE (2U)
|
||||
#endif
|
||||
|
||||
#if defined(CPU_FAM_STM32L4) || defined(CPU_FAM_STM32WB)
|
||||
#define FLASHPAGE_RAW_ALIGNMENT (8U)
|
||||
#else
|
||||
/* Writing should be always 4 bytes aligned */
|
||||
#define FLASHPAGE_RAW_ALIGNMENT (4U)
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* CPU_CONF_H */
|
||||
/** @} */
|
119
cpu/stm32/include/cpu_conf_stm32_common.h
Normal file
119
cpu/stm32/include/cpu_conf_stm32_common.h
Normal file
@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Inria
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32_common
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Shared CPU specific configuration for STM32 family
|
||||
*
|
||||
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
|
||||
*/
|
||||
|
||||
#ifndef CPU_CONF_STM32_COMMON_H
|
||||
#define CPU_CONF_STM32_COMMON_H
|
||||
|
||||
#include "periph_cpu.h"
|
||||
|
||||
#include "periph/i2c.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(CPU_FAM_STM32F0) || defined(CPU_FAM_STM32F3) || \
|
||||
defined(CPU_FAM_STM32F7) || defined(CPU_FAM_STM32L0) || \
|
||||
defined(CPU_FAM_STM32L4) || defined(CPU_FAM_STM32L4) || \
|
||||
defined(CPU_FAM_STM32WB)
|
||||
|
||||
/**
|
||||
* @brief Timing register settings
|
||||
*
|
||||
* @ref i2c_timing_param_t
|
||||
*/
|
||||
static const i2c_timing_param_t timing_params[] = {
|
||||
#if defined(CPU_FAM_STM32F0) || defined(CPU_FAM_STM32F7) || \
|
||||
defined(CPU_FAM_STM32L4) || defined(CPU_FAM_STM32WB)
|
||||
[ I2C_SPEED_NORMAL ] = {
|
||||
.presc = 0xB,
|
||||
.scll = 0x13, /* t_SCLL = 5.0us */
|
||||
.sclh = 0xF, /* t_SCLH = 4.0us */
|
||||
.sdadel = 0x2, /* t_SDADEL = 500ns */
|
||||
.scldel = 0x4, /* t_SCLDEL = 1250ns */
|
||||
},
|
||||
[ I2C_SPEED_FAST ] = {
|
||||
.presc = 5,
|
||||
.scll = 0x9, /* t_SCLL = 1250ns */
|
||||
.sclh = 0x3, /* t_SCLH = 500ns */
|
||||
.sdadel = 0x3, /* t_SDADEL = 375ns */
|
||||
.scldel = 0x3, /* t_SCLDEL = 500ns */
|
||||
},
|
||||
[ I2C_SPEED_FAST_PLUS ] = {
|
||||
.presc = 5,
|
||||
.scll = 0x3, /* t_SCLL = 500ns */
|
||||
.sclh = 0x1, /* t_SCLH = 250ns */
|
||||
.sdadel = 0x0, /* t_SDADEL = 0ns */
|
||||
.scldel = 0x1, /* t_SCLDEL = 250ns */
|
||||
}
|
||||
#elif defined(CPU_FAM_STM32F3)
|
||||
[ I2C_SPEED_NORMAL ] = {
|
||||
.presc = 1,
|
||||
.scll = 0x13, /* t_SCLL = 5.0us */
|
||||
.sclh = 0xF, /* t_SCLH = 4.0us */
|
||||
.sdadel = 0x2, /* t_SDADEL = 500ns */
|
||||
.scldel = 0x4, /* t_SCLDEL = 1250ns */
|
||||
},
|
||||
[ I2C_SPEED_FAST ] = {
|
||||
.presc = 0,
|
||||
.scll = 0x9, /* t_SCLL = 1250ns */
|
||||
.sclh = 0x3, /* t_SCLH = 500ns */
|
||||
.sdadel = 0x1, /* t_SDADEL = 125ns */
|
||||
.scldel = 0x3, /* t_SCLDEL = 500ns */
|
||||
},
|
||||
[ I2C_SPEED_FAST_PLUS ] = {
|
||||
.presc = 0,
|
||||
.scll = 0x6, /* t_SCLL = 875ns */
|
||||
.sclh = 0x3, /* t_SCLH = 500ns */
|
||||
.sdadel = 0x0, /* t_SDADEL = 0ns */
|
||||
.scldel = 0x1, /* t_SCLDEL = 250ns */
|
||||
}
|
||||
#elif defined(CPU_FAM_STM32L0)
|
||||
[ I2C_SPEED_NORMAL ] = {
|
||||
.presc = 1,
|
||||
.scll = 0x56, /* t_SCLL = 5.0us */
|
||||
.sclh = 0x3E, /* t_SCLH = 4.0us */
|
||||
.sdadel = 0x1, /* t_SDADEL = 500ns */
|
||||
.scldel = 0xA, /* t_SCLDEL = 1250ns */
|
||||
},
|
||||
[ I2C_SPEED_FAST ] = {
|
||||
.presc = 0,
|
||||
.scll = 0x2E, /* t_SCLL = 1250ns */
|
||||
.sclh = 0x11, /* t_SCLH = 500ns */
|
||||
.sdadel = 0x1, /* t_SDADEL = 125ns */
|
||||
.scldel = 0xB, /* t_SCLDEL = 500ns */
|
||||
},
|
||||
[ I2C_SPEED_FAST_PLUS ] = {
|
||||
.presc = 0,
|
||||
.scll = 0x6, /* t_SCLL = 875ns */
|
||||
.sclh = 0x3, /* t_SCLH = 500ns */
|
||||
.sdadel = 0x0, /* t_SDADEL = 0ns */
|
||||
.scldel = 0x1, /* t_SCLDEL = 250ns */
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif /* CPU_FAM_STM32F0 || CPU_FAM_STM32F3 || CPU_FAM_STM32F7 ||
|
||||
CPU_FAM_STM32L0 || CPU_FAM_STM32L4 || CPU_FAM_STM32WB */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* CPU_CONF_STM32_COMMON_H */
|
||||
/** @} */
|
53
cpu/stm32/include/periph/f0/periph_cpu.h
Normal file
53
cpu/stm32/include/periph/f0/periph_cpu.h
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) 2015-2016 Freie Universität Berlin
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32f0
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions for internal peripheral handling
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_F0_PERIPH_CPU_H
|
||||
#define PERIPH_F0_PERIPH_CPU_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Starting address of the CPU ID
|
||||
*/
|
||||
#define CPUID_ADDR (0x1ffff7ac)
|
||||
|
||||
#ifndef DOXYGEN
|
||||
/**
|
||||
* @brief Override ADC resolution values
|
||||
* @{
|
||||
*/
|
||||
#define HAVE_ADC_RES_T
|
||||
typedef enum {
|
||||
ADC_RES_6BIT = (0x3 << 3), /**< ADC resolution: 6 bit */
|
||||
ADC_RES_8BIT = (0x2 << 3), /**< ADC resolution: 8 bit */
|
||||
ADC_RES_10BIT = (0x1 << 3), /**< ADC resolution: 10 bit */
|
||||
ADC_RES_12BIT = (0x0 << 3), /**< ADC resolution: 12 bit */
|
||||
ADC_RES_14BIT = (0xfe), /**< not applicable */
|
||||
ADC_RES_16BIT = (0xff) /**< not applicable */
|
||||
} adc_res_t;
|
||||
/** @} */
|
||||
#endif /* ndef DOXYGEN */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_F0_PERIPH_CPU_H */
|
||||
/** @} */
|
53
cpu/stm32/include/periph/f1/periph_cpu.h
Normal file
53
cpu/stm32/include/periph/f1/periph_cpu.h
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) 2015-2016 Freie Universität Berlin
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32f1
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions for internal peripheral handling
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_F1_PERIPH_CPU_H
|
||||
#define PERIPH_F1_PERIPH_CPU_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Starting address of the CPU ID
|
||||
*/
|
||||
#define CPUID_ADDR (0x1ffff7e8)
|
||||
|
||||
/**
|
||||
* @name Real time counter configuration
|
||||
* @{
|
||||
*/
|
||||
#define RTT_IRQ_PRIO 1
|
||||
|
||||
#define RTT_DEV RTC
|
||||
#define RTT_IRQ RTC_IRQn
|
||||
#define RTT_ISR isr_rtc
|
||||
|
||||
#define RTT_MAX_VALUE (0xffffffff)
|
||||
#define RTT_CLOCK_FREQUENCY (32768U) /* in Hz */
|
||||
#define RTT_MIN_FREQUENCY (1U) /* in Hz */
|
||||
/* RTC frequency of 32kHz is not recommended, see RM0008 Rev 20, p490 */
|
||||
#define RTT_MAX_FREQUENCY (RTT_CLOCK_FREQUENCY / 2) /* in Hz */
|
||||
/** @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_F1_PERIPH_CPU_H */
|
||||
/** @} */
|
60
cpu/stm32/include/periph/f2/periph_cpu.h
Normal file
60
cpu/stm32/include/periph/f2/periph_cpu.h
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Engineering-Spirit
|
||||
* Copyright (C) 2016 OTA keys S.A.
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32f2
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions for internal peripheral handling
|
||||
*
|
||||
* @author Nick v. IJzendoorn <nijzendoorn@engineering-spirit.nl>
|
||||
* @author Aurelien Gonce <aurelien.gonce@altran.fr>
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_F2_PERIPH_CPU_H
|
||||
#define PERIPH_F2_PERIPH_CPU_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Starting address of the CPU ID
|
||||
*/
|
||||
#define CPUID_ADDR (0x1fff7a10)
|
||||
|
||||
/**
|
||||
* @brief Available number of ADC devices
|
||||
*/
|
||||
#define ADC_DEVS (2U)
|
||||
|
||||
#ifndef DOXYGEN
|
||||
/**
|
||||
* @brief Override the ADC resolution configuration
|
||||
* @{
|
||||
*/
|
||||
#define HAVE_ADC_RES_T
|
||||
typedef enum {
|
||||
ADC_RES_6BIT = 0x03000000, /**< ADC resolution: 6 bit */
|
||||
ADC_RES_8BIT = 0x02000000, /**< ADC resolution: 8 bit */
|
||||
ADC_RES_10BIT = 0x01000000, /**< ADC resolution: 10 bit */
|
||||
ADC_RES_12BIT = 0x00000000, /**< ADC resolution: 12 bit */
|
||||
ADC_RES_14BIT = 1, /**< ADC resolution: 14 bit (not supported) */
|
||||
ADC_RES_16BIT = 2 /**< ADC resolution: 16 bit (not supported)*/
|
||||
} adc_res_t;
|
||||
/** @} */
|
||||
#endif /* ndef DOXYGEN */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_F2_PERIPH_CPU_H */
|
||||
/** @} */
|
36
cpu/stm32/include/periph/f3/periph_cpu.h
Normal file
36
cpu/stm32/include/periph/f3/periph_cpu.h
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (C) 2015-2016 Freie Universität Berlin
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32f3
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions for internal peripheral handling
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_F3_PERIPH_CPU_H
|
||||
#define PERIPH_F3_PERIPH_CPU_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Starting address of the CPU ID
|
||||
*/
|
||||
#define CPUID_ADDR (0x1ffff7ac)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_F3_PERIPH_CPU_H */
|
||||
/** @} */
|
66
cpu/stm32/include/periph/f4/periph_cpu.h
Normal file
66
cpu/stm32/include/periph/f4/periph_cpu.h
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (C) 2015-2016 Freie Universität Berlin
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32f4
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions for internal peripheral handling
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_F4_PERIPH_CPU_H
|
||||
#define PERIPH_F4_PERIPH_CPU_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Starting address of the CPU ID
|
||||
*/
|
||||
#define CPUID_ADDR (0x1fff7a10)
|
||||
|
||||
/**
|
||||
* @brief Available number of ADC devices
|
||||
*/
|
||||
#if defined(CPU_LINE_STM32F401xE) || defined(CPU_LINE_STM32F410Rx) \
|
||||
|| defined(CPU_LINE_STM32F411xE) || defined(CPU_LINE_STM32F412Zx) \
|
||||
|| defined(CPU_LINE_STM32F413xx) || defined(CPU_LINE_STM32F423xx)
|
||||
#define ADC_DEVS (1U)
|
||||
#elif defined(CPU_LINE_STM32F405xx) || defined(CPU_LINE_STM32F407xx) \
|
||||
|| defined(CPU_LINE_STM32F415xx) || defined(CPU_LINE_STM32F429xx) \
|
||||
|| defined(CPU_LINE_STM32F437xx) || defined(CPU_LINE_STM32F446xx)
|
||||
#define ADC_DEVS (3U)
|
||||
#endif
|
||||
|
||||
#ifndef DOXYGEN
|
||||
/**
|
||||
* @brief Override the ADC resolution configuration
|
||||
* @{
|
||||
*/
|
||||
#define HAVE_ADC_RES_T
|
||||
typedef enum {
|
||||
ADC_RES_6BIT = 0x03000000, /**< ADC resolution: 6 bit */
|
||||
ADC_RES_8BIT = 0x02000000, /**< ADC resolution: 8 bit */
|
||||
ADC_RES_10BIT = 0x01000000, /**< ADC resolution: 10 bit */
|
||||
ADC_RES_12BIT = 0x00000000, /**< ADC resolution: 12 bit */
|
||||
ADC_RES_14BIT = 1, /**< ADC resolution: 14 bit (not supported) */
|
||||
ADC_RES_16BIT = 2 /**< ADC resolution: 16 bit (not supported)*/
|
||||
} adc_res_t;
|
||||
/** @} */
|
||||
#endif /* ndef DOXYGEN */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_F4_PERIPH_CPU_H */
|
||||
/** @} */
|
41
cpu/stm32/include/periph/f7/periph_cpu.h
Normal file
41
cpu/stm32/include/periph/f7/periph_cpu.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (C) 2017 Freie Universität Berlin
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32f7
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions for internal peripheral handling
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_F7_PERIPH_CPU_H
|
||||
#define PERIPH_F7_PERIPH_CPU_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @name Starting address of the CPU ID
|
||||
*/
|
||||
#if defined(CPU_LINE_STM32F722xx) || defined(CPU_LINE_STM32F723xx)
|
||||
#define CPUID_ADDR (0x1ff07a10)
|
||||
#else
|
||||
#define CPUID_ADDR (0x1ff0f420)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_F7_PERIPH_CPU_H */
|
||||
/** @} */
|
77
cpu/stm32/include/periph/l0/periph_cpu.h
Normal file
77
cpu/stm32/include/periph/l0/periph_cpu.h
Normal file
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (C) 2015-2017 Freie Universität Berlin
|
||||
* 2017 Inria
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32l0
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions for internal peripheral handling
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_L0_PERIPH_CPU_H
|
||||
#define PERIPH_L0_PERIPH_CPU_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Starting address of the CPU ID
|
||||
*/
|
||||
#define CPUID_ADDR (0x1ff80050)
|
||||
|
||||
#ifndef DOXYGEN
|
||||
/**
|
||||
* @brief Override ADC resolution values
|
||||
* @{
|
||||
*/
|
||||
#define HAVE_ADC_RES_T
|
||||
typedef enum {
|
||||
ADC_RES_6BIT = (0x3 << 3), /**< ADC resolution: 6 bit */
|
||||
ADC_RES_8BIT = (0x2 << 3), /**< ADC resolution: 8 bit */
|
||||
ADC_RES_10BIT = (0x1 << 3), /**< ADC resolution: 10 bit */
|
||||
ADC_RES_12BIT = (0x0 << 3), /**< ADC resolution: 12 bit */
|
||||
ADC_RES_14BIT = (0xfe), /**< not applicable */
|
||||
ADC_RES_16BIT = (0xff) /**< not applicable */
|
||||
} adc_res_t;
|
||||
/** @} */
|
||||
#endif /* ndef DOXYGEN */
|
||||
|
||||
/**
|
||||
* @name EEPROM configuration
|
||||
* https://www.st.com/en/microcontrollers-microprocessors/stm32l0-series.html#products
|
||||
* @{
|
||||
*/
|
||||
#define EEPROM_START_ADDR (0x08080000)
|
||||
#if defined(CPU_LINE_STM32L073xx) || defined(CPU_LINE_STM32L072xx)
|
||||
#define EEPROM_SIZE (6144U) /* 6kB */
|
||||
#elif defined(CPU_LINE_STM32L053xx) || defined(CPU_LINE_STM32L052xx)
|
||||
#define EEPROM_SIZE (2048U) /* 2kB */
|
||||
#elif defined(CPU_LINE_STM32L031xx)
|
||||
#define EEPROM_SIZE (1024U) /* 1kB */
|
||||
#elif defined(CPU_LINE_STM32L010xB) || defined(CPU_LINE_STM32L011x3) || defined(CPU_LINE_STM32L011x4) || defined(CPU_LINE_STM32L021x4)
|
||||
#define EEPROM_SIZE (512U) /* 512B */
|
||||
#elif defined(CPU_LINE_STM32L010x6) || defined(CPU_LINE_STM32L010x8)
|
||||
#define EEPROM_SIZE (256U) /* 256B */
|
||||
#elif defined(CPU_LINE_STM32L010x4)
|
||||
#define EEPROM_SIZE (128U) /* 128B */
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_L0_PERIPH_CPU_H */
|
||||
/** @} */
|
74
cpu/stm32/include/periph/l1/periph_cpu.h
Normal file
74
cpu/stm32/include/periph/l1/periph_cpu.h
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (C) 2015-2016 Freie Universität Berlin
|
||||
* Copyright (C) 2015 Hamburg University of Applied Sciences
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32l1
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions for internal peripheral handling
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
* @author Katja Kirstein <katja.kirstein@haw-hamburg.de>
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_L1_PERIPH_CPU_H
|
||||
#define PERIPH_L1_PERIPH_CPU_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @name Starting address of the CPU ID
|
||||
*/
|
||||
#if defined(CPU_MODEL_STM32L151RB_A) || defined(CPU_MODEL_STM32L151CB) || \
|
||||
defined(CPU_MODEL_STM32L151CB_A)
|
||||
#define CPUID_ADDR (0x1ff80050)
|
||||
#else
|
||||
#define CPUID_ADDR (0x1ff800d0)
|
||||
#endif
|
||||
|
||||
#ifndef DOXYGEN
|
||||
/**
|
||||
* @brief Override the ADC resolution configuration
|
||||
* @{
|
||||
*/
|
||||
#define HAVE_ADC_RES_T
|
||||
typedef enum {
|
||||
ADC_RES_6BIT = (ADC_CR1_RES_0 | ADC_CR1_RES_1), /**< ADC resolution: 6 bit */
|
||||
ADC_RES_8BIT = (ADC_CR1_RES_1), /**< ADC resolution: 8 bit */
|
||||
ADC_RES_10BIT = (ADC_CR1_RES_0), /**< ADC resolution: 10 bit */
|
||||
ADC_RES_12BIT = (0x00), /**< ADC resolution: 12 bit */
|
||||
ADC_RES_14BIT = (0xfe), /**< not applicable */
|
||||
ADC_RES_16BIT = (0xff) /**< not applicable */
|
||||
} adc_res_t;
|
||||
/** @} */
|
||||
#endif /* ndef DOXYGEN */
|
||||
|
||||
/**
|
||||
* @name EEPROM configuration
|
||||
* @{
|
||||
*/
|
||||
#define EEPROM_START_ADDR (0x08080000)
|
||||
#if defined(CPU_MODEL_STM32L152RE)
|
||||
#define EEPROM_SIZE (16384UL) /* 16kB */
|
||||
#elif defined(CPU_MODEL_STM32L151RC)
|
||||
#define EEPROM_SIZE (8192U) /* 8kB */
|
||||
#elif defined(CPU_MODEL_STM32L151CB) || defined(CPU_MODEL_STM32L151CB_A)
|
||||
#define EEPROM_SIZE (4096U) /* 4kB */
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_L1_PERIPH_CPU_H */
|
||||
/** @} */
|
71
cpu/stm32/include/periph/l4/periph_cpu.h
Normal file
71
cpu/stm32/include/periph/l4/periph_cpu.h
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (C) 2017 Freie Universität Berlin
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32l4
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions for internal peripheral handling
|
||||
*
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_L4_PERIPH_CPU_H
|
||||
#define PERIPH_L4_PERIPH_CPU_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Starting address of the CPU ID
|
||||
*/
|
||||
#define CPUID_ADDR (0x1fff7590)
|
||||
|
||||
/**
|
||||
* @brief Available number of ADC devices
|
||||
*/
|
||||
#if defined(CPU_MODEL_STM32L476RG) || defined(CPU_MODEL_STM32L475VG)
|
||||
#define ADC_DEVS (3U)
|
||||
#elif defined(CPU_MODEL_STM32L452RE) || defined(CPU_MODEL_STM32L432KC)
|
||||
#define ADC_DEVS (1U)
|
||||
#endif
|
||||
|
||||
#if defined(CPU_MODEL_STM32L476RG) || defined(CPU_MODEL_STM32L475VG) || \
|
||||
defined(CPU_MODEL_STM32L452RE) || defined(CPU_MODEL_STM32L432KC)
|
||||
/**
|
||||
* @brief ADC voltage regulator start-up time [us]
|
||||
*/
|
||||
#define ADC_T_ADCVREG_STUP_US (20)
|
||||
#endif
|
||||
|
||||
#ifndef DOXYGEN
|
||||
/**
|
||||
* @brief Override ADC resolution values
|
||||
* @{
|
||||
*/
|
||||
#define HAVE_ADC_RES_T
|
||||
typedef enum {
|
||||
ADC_RES_6BIT = (ADC_CFGR_RES), /**< ADC resolution: 6 bit */
|
||||
ADC_RES_8BIT = (ADC_CFGR_RES_1), /**< ADC resolution: 8 bit */
|
||||
ADC_RES_10BIT = (ADC_CFGR_RES_0), /**< ADC resolution: 10 bit */
|
||||
ADC_RES_12BIT = (0x0), /**< ADC resolution: 12 bit */
|
||||
ADC_RES_14BIT = (0x1), /**< not applicable */
|
||||
ADC_RES_16BIT = (0x2) /**< not applicable */
|
||||
} adc_res_t;
|
||||
/** @} */
|
||||
#endif /* ndef DOXYGEN */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_L4_PERIPH_CPU_H */
|
||||
/** @} */
|
37
cpu/stm32/include/periph/wb/periph_cpu.h
Normal file
37
cpu/stm32/include/periph/wb/periph_cpu.h
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Inria
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32wb
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief CPU specific definitions for internal peripheral handling
|
||||
*
|
||||
* @author Francisco Molina <francois-xavier.molina@inria.fr>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef PERIPH_WB_PERIPH_CPU_H
|
||||
#define PERIPH_WB_PERIPH_CPU_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Starting address of the CPU ID
|
||||
*/
|
||||
#define CPUID_ADDR (0x1fff7580)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* PERIPH_WB_PERIPH_CPU_H */
|
||||
/** @} */
|
1103
cpu/stm32/include/periph_cpu.h
Normal file
1103
cpu/stm32/include/periph_cpu.h
Normal file
File diff suppressed because it is too large
Load Diff
92
cpu/stm32/include/stmclk.h
Normal file
92
cpu/stm32/include/stmclk.h
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (C) 2017 Freie Universität Berlin
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser General
|
||||
* Public License v2.1. See the file LICENSE in the top level directory for more
|
||||
* details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup cpu_stm32_common
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Interface for configuring the clock tree of STM32 CPUs
|
||||
*
|
||||
* @todo This interface should probably be moved and implemented for
|
||||
* every STM32 CPU
|
||||
*
|
||||
* @author Hauke Petersen <hauke.pertersen@fu-berlin.de>
|
||||
*/
|
||||
|
||||
#ifndef STMCLK_H
|
||||
#define STMCLK_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Configure the high speed clock domain (main system clock)
|
||||
*
|
||||
* This function initializes and configures the main systems clock(s). For this,
|
||||
* the following actions are carried out:
|
||||
* - enable the HSI
|
||||
* - use the HSI as system clock (so now we are always in a defined state)
|
||||
* - configure flash wait states and AHB/APB bus dividers
|
||||
* - [opt] enable the HSE / MSI
|
||||
* - configure the PLL
|
||||
* - use PLL as system clock
|
||||
* - turn off the HSI if unused
|
||||
*
|
||||
* All of these options are configurable through the board's periph_conf.h
|
||||
*/
|
||||
void stmclk_init_sysclk(void);
|
||||
|
||||
/**
|
||||
* @brief Enable the internal high speed clock (HSI)
|
||||
*/
|
||||
void stmclk_enable_hsi(void);
|
||||
|
||||
/**
|
||||
* @brief Disable the internal high speed clock (HSI)
|
||||
*
|
||||
* @note The HSI is only disabled, if it is at that point not used to drive
|
||||
* the system clock or the PLL
|
||||
*/
|
||||
void stmclk_disable_hsi(void);
|
||||
|
||||
/**
|
||||
* @brief Configure and enable the low speed clock domain
|
||||
*
|
||||
* The actual clock used as input for the low frequency clock can be either the
|
||||
* external low speed clock (LSE) or the internal low speed clock (LSI). This
|
||||
* is configured in the board's periph_conf.h file.
|
||||
*/
|
||||
void stmclk_enable_lfclk(void);
|
||||
|
||||
/**
|
||||
* @brief Disable the low frequency clock domain
|
||||
*
|
||||
* @note When calling this function, better know what you do: be sure that
|
||||
* the clock is not needed by any peripheral before calling this
|
||||
* function.
|
||||
*/
|
||||
void stmclk_disable_lfclk(void);
|
||||
|
||||
/**
|
||||
* @brief Unlock write access to the backup domain control
|
||||
*/
|
||||
void stmclk_dbp_unlock(void);
|
||||
|
||||
/**
|
||||
* @brief Lock write access to backup control domain
|
||||
*/
|
||||
void stmclk_dbp_lock(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* STMCLK_H */
|
||||
/** @} */
|
138
cpu/stm32/include/usbdev_stm32.h
Normal file
138
cpu/stm32/include/usbdev_stm32.h
Normal file
@ -0,0 +1,138 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Koen Zandberg
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup cpu_stm32_common_usbdev stm32 USB OTG FS/HS peripheral
|
||||
* @ingroup cpu_stm32_common
|
||||
* @brief USB interface functions for the stm32 class devices
|
||||
*
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief USB interface functions for the stm32 OTG FS/HS class devices
|
||||
*
|
||||
* The stm32f2, stm32f4 and stm32f7 have a common USB OTG FS capable USB
|
||||
* peripheral.
|
||||
*
|
||||
* Two versions are currently known to exist with subtle differences
|
||||
* in some registers. The CID register of the peripheral indicates this version,
|
||||
* 0x00001200 for one version of the full speed peripheral and 0x00002000 for
|
||||
* the other version of the full speed peripheral.
|
||||
* The main difference is in the GCCFG register, where the 1.2 version has a
|
||||
* NOVBUSSENS bit and the 2.0 version has a VBDEN bit. This difference is used
|
||||
* to detect the IP version.
|
||||
* The 2.0 version also has more advanced USB low power mode support.
|
||||
*
|
||||
* For the end user, the main difference is the 1.2 version having 4 endpoints
|
||||
* and the 2.0 version having 6 endpoints. The 2.0 version also supports a
|
||||
* number of USB low power modes.
|
||||
*
|
||||
* @author Koen Zandberg <koen@bergzand.net>
|
||||
*/
|
||||
|
||||
#ifndef USBDEV_STM32_H
|
||||
#define USBDEV_STM32_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include "periph_cpu.h"
|
||||
#include "periph/usbdev.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Detect the IP version based on the available register define */
|
||||
#if defined(USB_OTG_GCCFG_NOVBUSSENS)
|
||||
#define STM32_USB_OTG_CID_1x /**< USB OTG FS version 0x00001200 */
|
||||
#elif defined(USB_OTG_GCCFG_VBDEN)
|
||||
#define STM32_USB_OTG_CID_2x /**< USB OTG FS version 0x00002000 */
|
||||
#else
|
||||
#error Unknown USB peripheral version
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Buffer space available for endpoint TX/RX data
|
||||
*/
|
||||
#ifndef STM32_USB_OTG_BUF_SPACE
|
||||
#define STM32_USB_OTG_BUF_SPACE USBDEV_EP_BUF_SPACE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Number of endpoints available with the OTG FS peripheral
|
||||
* including the control endpoint
|
||||
*/
|
||||
#ifdef STM32_USB_OTG_CID_1x
|
||||
#define STM32_USB_OTG_FS_NUM_EP (4) /**< OTG FS with 4 endpoints */
|
||||
#elif defined(STM32_USB_OTG_CID_2x)
|
||||
#define STM32_USB_OTG_FS_NUM_EP (6) /**< OTG FS with 6 endpoints */
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Number of endpoints available with the OTG HS peripheral
|
||||
* including the control endpoint
|
||||
*/
|
||||
#ifdef STM32_USB_OTG_CID_1x
|
||||
#define STM32_USB_OTG_HS_NUM_EP (6) /**< OTG HS with 6 endpoints */
|
||||
#elif defined(STM32_USB_OTG_CID_2x)
|
||||
#define STM32_USB_OTG_HS_NUM_EP (9) /**< OTG HS with 9 endpoints */
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief USB OTG FS FIFO reception buffer space in 32-bit words
|
||||
*
|
||||
* Used as shared FIFO for reception of all OUT transfers
|
||||
*
|
||||
* @note The application might have to increase this when dealing with large
|
||||
* isochronous transfers
|
||||
*/
|
||||
#ifndef STM32_USB_OTG_FS_RX_FIFO_SIZE
|
||||
#define STM32_USB_OTG_FS_RX_FIFO_SIZE (128U)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief USB OTG HS FIFO reception buffer space in 32-bit words
|
||||
*
|
||||
* Used as shared FIFO for reception of all OUT transfers from the host
|
||||
*/
|
||||
#ifndef STM32_USB_OTG_HS_RX_FIFO_SIZE
|
||||
#define STM32_USB_OTG_HS_RX_FIFO_SIZE (512U)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Use the built-in DMA controller of the HS peripheral when possible
|
||||
*/
|
||||
#ifndef STM32_USB_OTG_HS_USE_DMA
|
||||
#ifdef STM32_USB_OTG_CID_1x
|
||||
/* FIXME: It should be possible to use DMA with the 1.x version of the *
|
||||
* peripheral, but somehow it doesn't work. */
|
||||
#define STM32_USB_OTG_HS_USE_DMA (0)
|
||||
#else
|
||||
#define STM32_USB_OTG_HS_USE_DMA (1)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief stm32 USB OTG peripheral device context
|
||||
*/
|
||||
typedef struct {
|
||||
usbdev_t usbdev; /**< Inherited usbdev struct */
|
||||
const stm32_usb_otg_fshs_config_t *config; /**< USB peripheral config */
|
||||
uint8_t buffer[STM32_USB_OTG_BUF_SPACE]; /**< Buffer space for endpoints */
|
||||
size_t occupied; /**< Buffer space occupied */
|
||||
size_t fifo_pos; /**< FIFO space occupied */
|
||||
usbdev_ep_t *in; /**< In endpoints */
|
||||
usbdev_ep_t *out; /**< Out endpoints */
|
||||
bool suspend; /**< Suspend status */
|
||||
} stm32_usb_otg_fshs_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* USBDEV_STM32_H */
|
||||
/** @} */
|
5368
cpu/stm32/include/vendor/stm32f030x4.h
vendored
Normal file
5368
cpu/stm32/include/vendor/stm32f030x4.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5395
cpu/stm32/include/vendor/stm32f030x8.h
vendored
Normal file
5395
cpu/stm32/include/vendor/stm32f030x8.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5852
cpu/stm32/include/vendor/stm32f030xc.h
vendored
Normal file
5852
cpu/stm32/include/vendor/stm32f030xc.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5646
cpu/stm32/include/vendor/stm32f031x6.h
vendored
Normal file
5646
cpu/stm32/include/vendor/stm32f031x6.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5303
cpu/stm32/include/vendor/stm32f042x6.h
vendored
Normal file
5303
cpu/stm32/include/vendor/stm32f042x6.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3791
cpu/stm32/include/vendor/stm32f051x8.h
vendored
Normal file
3791
cpu/stm32/include/vendor/stm32f051x8.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5759
cpu/stm32/include/vendor/stm32f070xb.h
vendored
Normal file
5759
cpu/stm32/include/vendor/stm32f070xb.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
11247
cpu/stm32/include/vendor/stm32f072xb.h
vendored
Normal file
11247
cpu/stm32/include/vendor/stm32f072xb.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
11864
cpu/stm32/include/vendor/stm32f091xc.h
vendored
Normal file
11864
cpu/stm32/include/vendor/stm32f091xc.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
218
cpu/stm32/include/vendor/stm32f0xx.h
vendored
Normal file
218
cpu/stm32/include/vendor/stm32f0xx.h
vendored
Normal file
@ -0,0 +1,218 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f0xx.h
|
||||
* @author MCD Application Team
|
||||
* @brief CMSIS STM32F0xx Device Peripheral Access Layer Header File.
|
||||
*
|
||||
* The file is the unique include file that the application programmer
|
||||
* is using in the C source code, usually in main.c. This file contains:
|
||||
* - Configuration section that allows to select:
|
||||
* - The STM32F0xx device used in the target application
|
||||
* - To use or not the peripherals drivers in application code(i.e.
|
||||
* code will be based on direct access to peripherals registers
|
||||
* rather than drivers API), this option is controlled by
|
||||
* "#define USE_HAL_DRIVER"
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32f0xx
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __STM32F0xx_H
|
||||
#define __STM32F0xx_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** @addtogroup Library_configuration_section
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief STM32 Family
|
||||
*/
|
||||
#if !defined (STM32F0)
|
||||
#define STM32F0
|
||||
#endif /* STM32F0 */
|
||||
|
||||
/* Uncomment the line below according to the target STM32 device used in your
|
||||
application
|
||||
*/
|
||||
|
||||
#if !defined (STM32F030x6) && !defined (STM32F030x8) && \
|
||||
!defined (STM32F031x6) && !defined (STM32F038xx) && \
|
||||
!defined (STM32F042x6) && !defined (STM32F048xx) && !defined (STM32F070x6) && \
|
||||
!defined (STM32F051x8) && !defined (STM32F058xx) && \
|
||||
!defined (STM32F071xB) && !defined (STM32F072xB) && !defined (STM32F078xx) && !defined (STM32F070xB) && \
|
||||
!defined (STM32F091xC) && !defined (STM32F098xx) && !defined (STM32F030xC)
|
||||
/* #define STM32F030x6 */ /*!< STM32F030x4, STM32F030x6 Devices (STM32F030xx microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
||||
/* #define STM32F030x8 */ /*!< STM32F030x8 Devices (STM32F030xx microcontrollers where the Flash memory is 64 Kbytes) */
|
||||
/* #define STM32F031x6 */ /*!< STM32F031x4, STM32F031x6 Devices (STM32F031xx microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
||||
/* #define STM32F038xx */ /*!< STM32F038xx Devices (STM32F038xx microcontrollers where the Flash memory is 32 Kbytes) */
|
||||
/* #define STM32F042x6 */ /*!< STM32F042x4, STM32F042x6 Devices (STM32F042xx microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
||||
/* #define STM32F048x6 */ /*!< STM32F048xx Devices (STM32F042xx microcontrollers where the Flash memory is 32 Kbytes) */
|
||||
/* #define STM32F051x8 */ /*!< STM32F051x4, STM32F051x6, STM32F051x8 Devices (STM32F051xx microcontrollers where the Flash memory ranges between 16 and 64 Kbytes) */
|
||||
/* #define STM32F058xx */ /*!< STM32F058xx Devices (STM32F058xx microcontrollers where the Flash memory is 64 Kbytes) */
|
||||
/* #define STM32F070x6 */ /*!< STM32F070x6 Devices (STM32F070x6 microcontrollers where the Flash memory ranges between 16 and 32 Kbytes) */
|
||||
/* #define STM32F070xB */ /*!< STM32F070xB Devices (STM32F070xB microcontrollers where the Flash memory ranges between 64 and 128 Kbytes) */
|
||||
/* #define STM32F071xB */ /*!< STM32F071x8, STM32F071xB Devices (STM32F071xx microcontrollers where the Flash memory ranges between 64 and 128 Kbytes) */
|
||||
/* #define STM32F072xB */ /*!< STM32F072x8, STM32F072xB Devices (STM32F072xx microcontrollers where the Flash memory ranges between 64 and 128 Kbytes) */
|
||||
/* #define STM32F078xx */ /*!< STM32F078xx Devices (STM32F078xx microcontrollers where the Flash memory is 128 Kbytes) */
|
||||
/* #define STM32F030xC */ /*!< STM32F030xC Devices (STM32F030xC microcontrollers where the Flash memory is 256 Kbytes) */
|
||||
/* #define STM32F091xC */ /*!< STM32F091xB, STM32F091xC Devices (STM32F091xx microcontrollers where the Flash memory ranges between 128 and 256 Kbytes) */
|
||||
/* #define STM32F098xx */ /*!< STM32F098xx Devices (STM32F098xx microcontrollers where the Flash memory is 256 Kbytes) */
|
||||
#endif
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||
devices, you can define the device in your toolchain compiler preprocessor.
|
||||
*/
|
||||
#if !defined (USE_HAL_DRIVER)
|
||||
/**
|
||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||
In this case, these drivers will not be included and the application code will
|
||||
be based on direct access to peripherals registers
|
||||
*/
|
||||
/*#define USE_HAL_DRIVER */
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
/**
|
||||
* @brief CMSIS Device version number V2.3.2
|
||||
*/
|
||||
#define __STM32F0_DEVICE_VERSION_MAIN (0x02) /*!< [31:24] main version */
|
||||
#define __STM32F0_DEVICE_VERSION_SUB1 (0x03) /*!< [23:16] sub1 version */
|
||||
#define __STM32F0_DEVICE_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */
|
||||
#define __STM32F0_DEVICE_VERSION_RC (0x00) /*!< [7:0] release candidate */
|
||||
#define __STM32F0_DEVICE_VERSION ((__STM32F0_DEVICE_VERSION_MAIN << 24)\
|
||||
|(__STM32F0_DEVICE_VERSION_SUB1 << 16)\
|
||||
|(__STM32F0_DEVICE_VERSION_SUB2 << 8 )\
|
||||
|(__STM32F0_DEVICE_VERSION_RC))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Device_Included
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined(STM32F030x4)
|
||||
#include "stm32f030x4.h"
|
||||
#elif defined(STM32F030x6)
|
||||
#include "stm32f030x6.h"
|
||||
#elif defined(STM32F030x8)
|
||||
#include "stm32f030x8.h"
|
||||
#elif defined(STM32F031x6)
|
||||
#include "stm32f031x6.h"
|
||||
#elif defined(STM32F038xx)
|
||||
#include "stm32f038xx.h"
|
||||
#elif defined(STM32F042x6)
|
||||
#include "stm32f042x6.h"
|
||||
#elif defined(STM32F048xx)
|
||||
#include "stm32f048xx.h"
|
||||
#elif defined(STM32F051x8)
|
||||
#include "stm32f051x8.h"
|
||||
#elif defined(STM32F058xx)
|
||||
#include "stm32f058xx.h"
|
||||
#elif defined(STM32F070x6)
|
||||
#include "stm32f070x6.h"
|
||||
#elif defined(STM32F070xB)
|
||||
#include "stm32f070xb.h"
|
||||
#elif defined(STM32F071xB)
|
||||
#include "stm32f071xb.h"
|
||||
#elif defined(STM32F072xB)
|
||||
#include "stm32f072xb.h"
|
||||
#elif defined(STM32F078xx)
|
||||
#include "stm32f078xx.h"
|
||||
#elif defined(STM32F091xC)
|
||||
#include "stm32f091xc.h"
|
||||
#elif defined(STM32F098xx)
|
||||
#include "stm32f098xx.h"
|
||||
#elif defined(STM32F030xC)
|
||||
#include "stm32f030xc.h"
|
||||
#else
|
||||
#error "Please select first the target STM32F0xx device used in your application (in stm32f0xx.h file)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup Exported_macros
|
||||
* @{
|
||||
*/
|
||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
#define READ_REG(REG) ((REG))
|
||||
|
||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (USE_HAL_DRIVER)
|
||||
#include "stm32f0xx_hal.h"
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32F0xx_H */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
6044
cpu/stm32/include/vendor/stm32f103xb.h
vendored
Normal file
6044
cpu/stm32/include/vendor/stm32f103xb.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6846
cpu/stm32/include/vendor/stm32f103xe.h
vendored
Normal file
6846
cpu/stm32/include/vendor/stm32f103xe.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
212
cpu/stm32/include/vendor/stm32f1xx.h
vendored
Normal file
212
cpu/stm32/include/vendor/stm32f1xx.h
vendored
Normal file
@ -0,0 +1,212 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f1xx.h
|
||||
* @author MCD Application Team
|
||||
* @version V4.2.0
|
||||
* @date 31-March-2017
|
||||
* @brief CMSIS STM32F1xx Device Peripheral Access Layer Header File.
|
||||
*
|
||||
* The file is the unique include file that the application programmer
|
||||
* is using in the C source code, usually in main.c. This file contains:
|
||||
* - Configuration section that allows to select:
|
||||
* - The STM32F1xx device used in the target application
|
||||
* - To use or not the peripherals drivers in application code(i.e.
|
||||
* code will be based on direct access to peripherals registers
|
||||
* rather than drivers API), this option is controlled by
|
||||
* "#define USE_HAL_DRIVER"
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32f1xx
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __STM32F1XX_H
|
||||
#define __STM32F1XX_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** @addtogroup Library_configuration_section
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief STM32 Family
|
||||
*/
|
||||
#if !defined (STM32F1)
|
||||
#define STM32F1
|
||||
#endif /* STM32F1 */
|
||||
|
||||
/* Uncomment the line below according to the target STM32L device used in your
|
||||
application
|
||||
*/
|
||||
|
||||
#if !defined (STM32F100xB) && !defined (STM32F100xE) && !defined (STM32F101x6) && \
|
||||
!defined (STM32F101xB) && !defined (STM32F101xE) && !defined (STM32F101xG) && !defined (STM32F102x6) && !defined (STM32F102xB) && !defined (STM32F103x6) && \
|
||||
!defined (STM32F103xB) && !defined (STM32F103xE) && !defined (STM32F103xG) && !defined (STM32F105xC) && !defined (STM32F107xC)
|
||||
/* #define STM32F100xB */ /*!< STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB and STM32F100VB */
|
||||
/* #define STM32F100xE */ /*!< STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE and STM32F100ZE */
|
||||
/* #define STM32F101x6 */ /*!< STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6 and STM32F101T6 Devices */
|
||||
/* #define STM32F101xB */ /*!< STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB and STM32F101VB */
|
||||
/* #define STM32F101xE */ /*!< STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE and STM32F101ZE */
|
||||
/* #define STM32F101xG */ /*!< STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG and STM32F101ZG */
|
||||
/* #define STM32F102x6 */ /*!< STM32F102C4, STM32F102R4, STM32F102C6 and STM32F102R6 */
|
||||
/* #define STM32F102xB */ /*!< STM32F102C8, STM32F102R8, STM32F102CB and STM32F102RB */
|
||||
/* #define STM32F103x6 */ /*!< STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6 and STM32F103T6 */
|
||||
/* #define STM32F103xB */ /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */
|
||||
/* #define STM32F103xE */ /*!< STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE and STM32F103ZE */
|
||||
/* #define STM32F103xG */ /*!< STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG and STM32F103ZG */
|
||||
/* #define STM32F105xC */ /*!< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */
|
||||
/* #define STM32F107xC */ /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */
|
||||
#endif
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||
devices, you can define the device in your toolchain compiler preprocessor.
|
||||
*/
|
||||
|
||||
#if !defined (USE_HAL_DRIVER)
|
||||
/**
|
||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||
In this case, these drivers will not be included and the application code will
|
||||
be based on direct access to peripherals registers
|
||||
*/
|
||||
/*#define USE_HAL_DRIVER */
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
/**
|
||||
* @brief CMSIS Device version number V4.2.0
|
||||
*/
|
||||
#define __STM32F1_CMSIS_VERSION_MAIN (0x04) /*!< [31:24] main version */
|
||||
#define __STM32F1_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
|
||||
#define __STM32F1_CMSIS_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */
|
||||
#define __STM32F1_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
|
||||
#define __STM32F1_CMSIS_VERSION ((__STM32F1_CMSIS_VERSION_MAIN << 24)\
|
||||
|(__STM32F1_CMSIS_VERSION_SUB1 << 16)\
|
||||
|(__STM32F1_CMSIS_VERSION_SUB2 << 8 )\
|
||||
|(__STM32F1_CMSIS_VERSION_RC))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Device_Included
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined(STM32F100xB)
|
||||
#include "stm32f100xb.h"
|
||||
#elif defined(STM32F100xE)
|
||||
#include "stm32f100xe.h"
|
||||
#elif defined(STM32F101x6)
|
||||
#include "stm32f101x6.h"
|
||||
#elif defined(STM32F101xB)
|
||||
#include "stm32f101xb.h"
|
||||
#elif defined(STM32F101xE)
|
||||
#include "stm32f101xe.h"
|
||||
#elif defined(STM32F101xG)
|
||||
#include "stm32f101xg.h"
|
||||
#elif defined(STM32F102x6)
|
||||
#include "stm32f102x6.h"
|
||||
#elif defined(STM32F102xB)
|
||||
#include "stm32f102xb.h"
|
||||
#elif defined(STM32F103x6)
|
||||
#include "stm32f103x6.h"
|
||||
#elif defined(STM32F103xB)
|
||||
#include "stm32f103xb.h"
|
||||
#elif defined(STM32F103xE)
|
||||
#include "stm32f103xe.h"
|
||||
#elif defined(STM32F103xG)
|
||||
#include "stm32f103xg.h"
|
||||
#elif defined(STM32F105xC)
|
||||
#include "stm32f105xc.h"
|
||||
#elif defined(STM32F107xC)
|
||||
#include "stm32f107xc.h"
|
||||
#else
|
||||
#error "Please select first the target STM32F1xx device used in your application (in stm32f1xx.h file)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup Exported_macros
|
||||
* @{
|
||||
*/
|
||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
#define READ_REG(REG) ((REG))
|
||||
|
||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||
|
||||
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (USE_HAL_DRIVER)
|
||||
#include "stm32f1xx_hal.h"
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32F1xx_H */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
7661
cpu/stm32/include/vendor/stm32f205xx.h
vendored
Normal file
7661
cpu/stm32/include/vendor/stm32f205xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
14997
cpu/stm32/include/vendor/stm32f207xx.h
vendored
Normal file
14997
cpu/stm32/include/vendor/stm32f207xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7819
cpu/stm32/include/vendor/stm32f215xx.h
vendored
Normal file
7819
cpu/stm32/include/vendor/stm32f215xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
8471
cpu/stm32/include/vendor/stm32f217xx.h
vendored
Normal file
8471
cpu/stm32/include/vendor/stm32f217xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
183
cpu/stm32/include/vendor/stm32f2xx.h
vendored
Normal file
183
cpu/stm32/include/vendor/stm32f2xx.h
vendored
Normal file
@ -0,0 +1,183 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f2xx.h
|
||||
* @author MCD Application Team
|
||||
* @version V2.2.0
|
||||
* @date 17-March-2017
|
||||
* @brief CMSIS STM32F2xx Device Peripheral Access Layer Header File.
|
||||
*
|
||||
* The file is the unique include file that the application programmer
|
||||
* is using in the C source code, usually in main.c. This file contains:
|
||||
* - Configuration section that allows to select:
|
||||
* - The STM32F2xx device used in the target application
|
||||
* - To use or not the peripherals drivers in application code(i.e.
|
||||
* code will be based on direct access to peripherals registers
|
||||
* rather than drivers API), this option is controlled by
|
||||
* "#define USE_HAL_DRIVER"
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32f2xx
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __STM32F2xx_H
|
||||
#define __STM32F2xx_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** @addtogroup Library_configuration_section
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief STM32 Family
|
||||
*/
|
||||
#if !defined (STM32F2)
|
||||
#define STM32F2
|
||||
#endif /* STM32F2 */
|
||||
|
||||
/* Uncomment the line below according to the target STM32 device used in your
|
||||
application
|
||||
*/
|
||||
#if !defined (STM32F205xx) && !defined (STM32F215xx) && !defined (STM32F207xx) && !defined (STM32F217xx)
|
||||
|
||||
/* #define STM32F205xx */ /*!< STM32F205RG, STM32F205VG, STM32F205ZG, STM32F205RF, STM32F205VF, STM32F205ZF,
|
||||
STM32F205RE, STM32F205VE, STM32F205ZE, STM32F205RC, STM32F205VC, STM32F205ZC,
|
||||
STM32F205RB and STM32F205VB Devices */
|
||||
/* #define STM32F215xx */ /*!< STM32F215RG, STM32F215VG, STM32F215ZG, STM32F215RE, STM32F215VE and STM32F215ZE Devices */
|
||||
/* #define STM32F207xx */ /*!< STM32F207VG, STM32F207ZG, STM32F207IG, STM32F207VF, STM32F207ZF, STM32F207IF,
|
||||
STM32F207VE, STM32F207ZE, STM32F207IE, STM32F207VC, STM32F207ZC and STM32F207IC Devices */
|
||||
/* #define STM32F217xx */ /*!< STM32F217VG, STM32F217ZG, STM32F217IG, STM32F217VE, STM32F217ZE and STM32F217IE Devices */
|
||||
|
||||
#endif
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||
devices, you can define the device in your toolchain compiler preprocessor.
|
||||
*/
|
||||
#if !defined (USE_HAL_DRIVER)
|
||||
/**
|
||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||
In this case, these drivers will not be included and the application code will
|
||||
be based on direct access to peripherals registers
|
||||
*/
|
||||
/*#define USE_HAL_DRIVER */
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
/**
|
||||
* @brief CMSIS Device version number V2.2.0
|
||||
*/
|
||||
#define __STM32F2xx_CMSIS_VERSION_MAIN (0x02U) /*!< [31:24] main version */
|
||||
#define __STM32F2xx_CMSIS_VERSION_SUB1 (0x02U) /*!< [23:16] sub1 version */
|
||||
#define __STM32F2xx_CMSIS_VERSION_SUB2 (0x00U) /*!< [15:8] sub2 version */
|
||||
#define __STM32F2xx_CMSIS_VERSION_RC (0x00U) /*!< [7:0] release candidate */
|
||||
#define __STM32F2xx_CMSIS_VERSION ((__STM32F2xx_CMSIS_VERSION_MAIN << 24)\
|
||||
|(__STM32F2xx_CMSIS_VERSION_SUB1 << 16)\
|
||||
|(__STM32F2xx_CMSIS_VERSION_SUB2 << 8 )\
|
||||
|(__STM32F2xx_CMSIS_VERSION))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Device_Included
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined(STM32F205xx)
|
||||
#include "stm32f205xx.h"
|
||||
#elif defined(STM32F215xx)
|
||||
#include "stm32f215xx.h"
|
||||
#elif defined(STM32F207xx)
|
||||
#include "stm32f207xx.h"
|
||||
#elif defined(STM32F217xx)
|
||||
#include "stm32f217xx.h"
|
||||
#else
|
||||
#error "Please select first the target STM32F2xx device used in your application (in stm32f2xx.h file)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup Exported_macro
|
||||
* @{
|
||||
*/
|
||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
#define READ_REG(REG) ((REG))
|
||||
|
||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||
|
||||
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (USE_HAL_DRIVER)
|
||||
#include "stm32f2xx_hal.h"
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32F2xx_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
12296
cpu/stm32/include/vendor/stm32f302x8.h
vendored
Normal file
12296
cpu/stm32/include/vendor/stm32f302x8.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
12085
cpu/stm32/include/vendor/stm32f303x8.h
vendored
Normal file
12085
cpu/stm32/include/vendor/stm32f303x8.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
13393
cpu/stm32/include/vendor/stm32f303xc.h
vendored
Normal file
13393
cpu/stm32/include/vendor/stm32f303xc.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
15247
cpu/stm32/include/vendor/stm32f303xe.h
vendored
Normal file
15247
cpu/stm32/include/vendor/stm32f303xe.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7603
cpu/stm32/include/vendor/stm32f334x8.h
vendored
Normal file
7603
cpu/stm32/include/vendor/stm32f334x8.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
224
cpu/stm32/include/vendor/stm32f3xx.h
vendored
Normal file
224
cpu/stm32/include/vendor/stm32f3xx.h
vendored
Normal file
@ -0,0 +1,224 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f3xx.h
|
||||
* @author MCD Application Team
|
||||
* @brief CMSIS STM32F3xx Device Peripheral Access Layer Header File.
|
||||
*
|
||||
* The file is the unique include file that the application programmer
|
||||
* is using in the C source code, usually in main.c. This file contains:
|
||||
* - Configuration section that allows to select:
|
||||
* - The STM32F3xx device used in the target application
|
||||
* - To use or not the peripherals drivers in application code(i.e.
|
||||
* code will be based on direct access to peripherals registers
|
||||
* rather than drivers API), this option is controlled by
|
||||
* "#define USE_HAL_DRIVER"
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32f3xx
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __STM32F3xx_H
|
||||
#define __STM32F3xx_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** @addtogroup Library_configuration_section
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief STM32 Family
|
||||
*/
|
||||
#if !defined (STM32F3)
|
||||
#define STM32F3
|
||||
#endif /* STM32F3 */
|
||||
|
||||
/* Uncomment the line below according to the target STM32 device used in your
|
||||
application
|
||||
*/
|
||||
|
||||
#if !defined (STM32F301x8) && !defined (STM32F302x8) && !defined (STM32F318xx) && \
|
||||
!defined (STM32F302xC) && !defined (STM32F303xC) && !defined (STM32F358xx) && \
|
||||
!defined (STM32F303x8) && !defined (STM32F334x8) && !defined (STM32F328xx) && \
|
||||
!defined (STM32F302xE) && !defined (STM32F303xE) && !defined (STM32F398xx) && \
|
||||
!defined (STM32F373xC) && !defined (STM32F378xx)
|
||||
|
||||
/* #define STM32F301x8 */ /*!< STM32F301K6, STM32F301K8, STM32F301C6, STM32F301C8,
|
||||
STM32F301R6 and STM32F301R8 Devices */
|
||||
/* #define STM32F302x8 */ /*!< STM32F302K6, STM32F302K8, STM32F302C6, STM32F302C8,
|
||||
STM32F302R6 and STM32F302R8 Devices */
|
||||
/* #define STM32F302xC */ /*!< STM32F302CB, STM32F302CC, STM32F302RB, STM32F302RC,
|
||||
STM32F302VB and STM32F302VC Devices */
|
||||
/* #define STM32F302xE */ /*!< STM32F302RE, STM32F302VE, STM32F302ZE, STM32F302RD,
|
||||
STM32F302VD and STM32F302ZD Devices */
|
||||
/* #define STM32F303x8 */ /*!< STM32F303K6, STM32F303K8, STM32F303C6, STM32F303C8,
|
||||
STM32F303R6 and STM32F303R8 Devices */
|
||||
/* #define STM32F303xC */ /*!< STM32F303CB, STM32F303CC, STM32F303RB, STM32F303RC,
|
||||
STM32F303VB and STM32F303VC Devices */
|
||||
/* #define STM32F303xE */ /*!< STM32F303RE, STM32F303VE, STM32F303ZE, STM32F303RD,
|
||||
STM32F303VD and STM32F303ZD Devices */
|
||||
/* #define STM32F373xC */ /*!< STM32F373C8, STM32F373CB, STM32F373CC,
|
||||
STM32F373R8, STM32F373RB, STM32F373RC,
|
||||
STM32F373V8, STM32F373VB and STM32F373VC Devices */
|
||||
/* #define STM32F334x8 */ /*!< STM32F334K4, STM32F334K6, STM32F334K8,
|
||||
STM32F334C4, STM32F334C6, STM32F334C8,
|
||||
STM32F334R4, STM32F334R6 and STM32F334R8 Devices */
|
||||
/* #define STM32F318xx */ /*!< STM32F318K8, STM32F318C8: STM32F301x8 with regulator off: STM32F318xx Devices */
|
||||
/* #define STM32F328xx */ /*!< STM32F328C8, STM32F328R8: STM32F334x8 with regulator off: STM32F328xx Devices */
|
||||
/* #define STM32F358xx */ /*!< STM32F358CC, STM32F358RC, STM32F358VC: STM32F303xC with regulator off: STM32F358xx Devices */
|
||||
/* #define STM32F378xx */ /*!< STM32F378CC, STM32F378RC, STM32F378VC: STM32F373xC with regulator off: STM32F378xx Devices */
|
||||
/* #define STM32F398xx */ /*!< STM32F398VE: STM32F303xE with regulator off: STM32F398xx Devices */
|
||||
#endif
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||
devices, you can define the device in your toolchain compiler preprocessor.
|
||||
*/
|
||||
#if !defined (USE_HAL_DRIVER)
|
||||
/**
|
||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||
In this case, these drivers will not be included and the application code will
|
||||
be based on direct access to peripherals registers
|
||||
*/
|
||||
/*#define USE_HAL_DRIVER */
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
/**
|
||||
* @brief CMSIS Device version number V2.3.2
|
||||
*/
|
||||
#define __STM32F3_CMSIS_VERSION_MAIN (0x02) /*!< [31:24] main version */
|
||||
#define __STM32F3_CMSIS_VERSION_SUB1 (0x03) /*!< [23:16] sub1 version */
|
||||
#define __STM32F3_CMSIS_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */
|
||||
#define __STM32F3_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
|
||||
#define __STM32F3_CMSIS_VERSION ((__STM32F3_CMSIS_VERSION_MAIN << 24)\
|
||||
|(__STM32F3_CMSIS_VERSION_SUB1 << 16)\
|
||||
|(__STM32F3_CMSIS_VERSION_SUB2 << 8 )\
|
||||
|(__STM32F3_CMSIS_VERSION_RC))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Device_Included
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined(STM32F301x8)
|
||||
#include "stm32f301x8.h"
|
||||
#elif defined(STM32F302x8)
|
||||
#include "stm32f302x8.h"
|
||||
#elif defined(STM32F302xC)
|
||||
#include "stm32f302xc.h"
|
||||
#elif defined(STM32F302xE)
|
||||
#include "stm32f302xe.h"
|
||||
#elif defined(STM32F303x8)
|
||||
#include "stm32f303x8.h"
|
||||
#elif defined(STM32F303xC)
|
||||
#include "stm32f303xc.h"
|
||||
#elif defined(STM32F303xE)
|
||||
#include "stm32f303xe.h"
|
||||
#elif defined(STM32F373xC)
|
||||
#include "stm32f373xc.h"
|
||||
#elif defined(STM32F334x8)
|
||||
#include "stm32f334x8.h"
|
||||
#elif defined(STM32F318xx)
|
||||
#include "stm32f318xx.h"
|
||||
#elif defined(STM32F328xx)
|
||||
#include "stm32f328xx.h"
|
||||
#elif defined(STM32F358xx)
|
||||
#include "stm32f358xx.h"
|
||||
#elif defined(STM32F378xx)
|
||||
#include "stm32f378xx.h"
|
||||
#elif defined(STM32F398xx)
|
||||
#include "stm32f398xx.h"
|
||||
#else
|
||||
#error "Please select first the target STM32F3xx device used in your application (in stm32f3xx.h file)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup Exported_macros
|
||||
* @{
|
||||
*/
|
||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
#define READ_REG(REG) ((REG))
|
||||
|
||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||
|
||||
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
|
||||
|
||||
|
||||
#if defined (USE_HAL_DRIVER)
|
||||
#include "stm32f3xx_hal.h"
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32F3xx_H */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
8533
cpu/stm32/include/vendor/stm32f401xe.h
vendored
Normal file
8533
cpu/stm32/include/vendor/stm32f401xe.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
14256
cpu/stm32/include/vendor/stm32f405xx.h
vendored
Normal file
14256
cpu/stm32/include/vendor/stm32f405xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
15468
cpu/stm32/include/vendor/stm32f407xx.h
vendored
Normal file
15468
cpu/stm32/include/vendor/stm32f407xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7259
cpu/stm32/include/vendor/stm32f410rx.h
vendored
Normal file
7259
cpu/stm32/include/vendor/stm32f410rx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
8573
cpu/stm32/include/vendor/stm32f411xe.h
vendored
Normal file
8573
cpu/stm32/include/vendor/stm32f411xe.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
14518
cpu/stm32/include/vendor/stm32f412zx.h
vendored
Normal file
14518
cpu/stm32/include/vendor/stm32f412zx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
14990
cpu/stm32/include/vendor/stm32f413xx.h
vendored
Normal file
14990
cpu/stm32/include/vendor/stm32f413xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
14469
cpu/stm32/include/vendor/stm32f415xx.h
vendored
Normal file
14469
cpu/stm32/include/vendor/stm32f415xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
15277
cpu/stm32/include/vendor/stm32f423xx.h
vendored
Normal file
15277
cpu/stm32/include/vendor/stm32f423xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
17019
cpu/stm32/include/vendor/stm32f429xx.h
vendored
Normal file
17019
cpu/stm32/include/vendor/stm32f429xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
17109
cpu/stm32/include/vendor/stm32f437xx.h
vendored
Normal file
17109
cpu/stm32/include/vendor/stm32f437xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
15826
cpu/stm32/include/vendor/stm32f446xx.h
vendored
Normal file
15826
cpu/stm32/include/vendor/stm32f446xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
245
cpu/stm32/include/vendor/stm32f4xx.h
vendored
Normal file
245
cpu/stm32/include/vendor/stm32f4xx.h
vendored
Normal file
@ -0,0 +1,245 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f4xx.h
|
||||
* @author MCD Application Team
|
||||
* @version V2.6.1
|
||||
* @date 14-February-2017
|
||||
* @brief CMSIS STM32F4xx Device Peripheral Access Layer Header File.
|
||||
*
|
||||
* The file is the unique include file that the application programmer
|
||||
* is using in the C source code, usually in main.c. This file contains:
|
||||
* - Configuration section that allows to select:
|
||||
* - The STM32F4xx device used in the target application
|
||||
* - To use or not the peripherals drivers in application code(i.e.
|
||||
* code will be based on direct access to peripherals registers
|
||||
* rather than drivers API), this option is controlled by
|
||||
* "#define USE_HAL_DRIVER"
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32f4xx
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __STM32F4xx_H
|
||||
#define __STM32F4xx_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** @addtogroup Library_configuration_section
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief STM32 Family
|
||||
*/
|
||||
#if !defined (STM32F4)
|
||||
#define STM32F4
|
||||
#endif /* STM32F4 */
|
||||
|
||||
/* Uncomment the line below according to the target STM32 device used in your
|
||||
application
|
||||
*/
|
||||
#if !defined (STM32F405xx) && !defined (STM32F415xx) && !defined (STM32F407xx) && !defined (STM32F417xx) && \
|
||||
!defined (STM32F427xx) && !defined (STM32F437xx) && !defined (STM32F429xx) && !defined (STM32F439xx) && \
|
||||
!defined (STM32F401xC) && !defined (STM32F401xE) && !defined (STM32F410Tx) && !defined (STM32F410Cx) && \
|
||||
!defined (STM32F410Rx) && !defined (STM32F411xE) && !defined (STM32F446xx) && !defined (STM32F469xx) && \
|
||||
!defined (STM32F479xx) && !defined (STM32F412Cx) && !defined (STM32F412Rx) && !defined (STM32F412Vx) && \
|
||||
!defined (STM32F412Zx) && !defined (STM32F413xx) && !defined (STM32F423xx)
|
||||
/* #define STM32F405xx */ /*!< STM32F405RG, STM32F405VG and STM32F405ZG Devices */
|
||||
/* #define STM32F415xx */ /*!< STM32F415RG, STM32F415VG and STM32F415ZG Devices */
|
||||
/* #define STM32F407xx */ /*!< STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG and STM32F407IE Devices */
|
||||
/* #define STM32F417xx */ /*!< STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */
|
||||
/* #define STM32F427xx */ /*!< STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG and STM32F427II Devices */
|
||||
/* #define STM32F437xx */ /*!< STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG and STM32F437II Devices */
|
||||
/* #define STM32F429xx */ /*!< STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI, STM32F429NG,
|
||||
STM32F439NI, STM32F429IG and STM32F429II Devices */
|
||||
/* #define STM32F439xx */ /*!< STM32F439VG, STM32F439VI, STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG,
|
||||
STM32F439NI, STM32F439IG and STM32F439II Devices */
|
||||
/* #define STM32F401xC */ /*!< STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB and STM32F401VC Devices */
|
||||
/* #define STM32F401xE */ /*!< STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CE, STM32F401RE and STM32F401VE Devices */
|
||||
/* #define STM32F410Tx */ /*!< STM32F410T8 and STM32F410TB Devices */
|
||||
/* #define STM32F410Cx */ /*!< STM32F410C8 and STM32F410CB Devices */
|
||||
/* #define STM32F410Rx */ /*!< STM32F410R8 and STM32F410RB Devices */
|
||||
/* #define STM32F411xE */ /*!< STM32F411CC, STM32F411RC, STM32F411VC, STM32F411CE, STM32F411RE and STM32F411VE Devices */
|
||||
/* #define STM32F446xx */ /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC,
|
||||
and STM32F446ZE Devices */
|
||||
/* #define STM32F469xx */ /*!< STM32F469AI, STM32F469II, STM32F469BI, STM32F469NI, STM32F469AG, STM32F469IG, STM32F469BG,
|
||||
STM32F469NG, STM32F469AE, STM32F469IE, STM32F469BE and STM32F469NE Devices */
|
||||
/* #define STM32F479xx */ /*!< STM32F479AI, STM32F479II, STM32F479BI, STM32F479NI, STM32F479AG, STM32F479IG, STM32F479BG
|
||||
and STM32F479NG Devices */
|
||||
/* #define STM32F412Cx */ /*!< STM32F412CEU and STM32F412CGU Devices */
|
||||
/* #define STM32F412Zx */ /*!< STM32F412ZET, STM32F412ZGT, STM32F412ZEJ and STM32F412ZGJ Devices */
|
||||
/* #define STM32F412Vx */ /*!< STM32F412VET, STM32F412VGT, STM32F412VEH and STM32F412VGH Devices */
|
||||
/* #define STM32F412Rx */ /*!< STM32F412RET, STM32F412RGT, STM32F412REY and STM32F412RGY Devices */
|
||||
/* #define STM32F413xx */ /*!< STM32F413CH, STM32F413MH, STM32F413RH, STM32F413VH, STM32F413ZH, STM32F413CG, STM32F413MG,
|
||||
STM32F413RG, STM32F413VG and STM32F413ZG Devices */
|
||||
/* #define STM32F423xx */ /*!< STM32F423CH, STM32F423RH, STM32F423VH and STM32F423ZH Devices */
|
||||
#endif
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||
devices, you can define the device in your toolchain compiler preprocessor.
|
||||
*/
|
||||
#if !defined (USE_HAL_DRIVER)
|
||||
/**
|
||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||
In this case, these drivers will not be included and the application code will
|
||||
be based on direct access to peripherals registers
|
||||
*/
|
||||
/*#define USE_HAL_DRIVER */
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
/**
|
||||
* @brief CMSIS version number V2.6.1
|
||||
*/
|
||||
#define __STM32F4xx_CMSIS_VERSION_MAIN (0x02U) /*!< [31:24] main version */
|
||||
#define __STM32F4xx_CMSIS_VERSION_SUB1 (0x06U) /*!< [23:16] sub1 version */
|
||||
#define __STM32F4xx_CMSIS_VERSION_SUB2 (0x01U) /*!< [15:8] sub2 version */
|
||||
#define __STM32F4xx_CMSIS_VERSION_RC (0x00U) /*!< [7:0] release candidate */
|
||||
#define __STM32F4xx_CMSIS_VERSION ((__STM32F4xx_CMSIS_VERSION_MAIN << 24)\
|
||||
|(__STM32F4xx_CMSIS_VERSION_SUB1 << 16)\
|
||||
|(__STM32F4xx_CMSIS_VERSION_SUB2 << 8 )\
|
||||
|(__STM32F4xx_CMSIS_VERSION))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Device_Included
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined(STM32F405xx)
|
||||
#include "stm32f405xx.h"
|
||||
#elif defined(STM32F415xx)
|
||||
#include "stm32f415xx.h"
|
||||
#elif defined(STM32F407xx)
|
||||
#include "stm32f407xx.h"
|
||||
#elif defined(STM32F417xx)
|
||||
#include "stm32f417xx.h"
|
||||
#elif defined(STM32F427xx)
|
||||
#include "stm32f427xx.h"
|
||||
#elif defined(STM32F437xx)
|
||||
#include "stm32f437xx.h"
|
||||
#elif defined(STM32F429xx)
|
||||
#include "stm32f429xx.h"
|
||||
#elif defined(STM32F439xx)
|
||||
#include "stm32f439xx.h"
|
||||
#elif defined(STM32F401xC)
|
||||
#include "stm32f401xc.h"
|
||||
#elif defined(STM32F401xE)
|
||||
#include "stm32f401xe.h"
|
||||
#elif defined(STM32F410Tx)
|
||||
#include "stm32f410tx.h"
|
||||
#elif defined(STM32F410Cx)
|
||||
#include "stm32f410cx.h"
|
||||
#elif defined(STM32F410Rx)
|
||||
#include "stm32f410rx.h"
|
||||
#elif defined(STM32F411xE)
|
||||
#include "stm32f411xe.h"
|
||||
#elif defined(STM32F446xx)
|
||||
#include "stm32f446xx.h"
|
||||
#elif defined(STM32F469xx)
|
||||
#include "stm32f469xx.h"
|
||||
#elif defined(STM32F479xx)
|
||||
#include "stm32f479xx.h"
|
||||
#elif defined(STM32F412Cx)
|
||||
#include "stm32f412cx.h"
|
||||
#elif defined(STM32F412Zx)
|
||||
#include "stm32f412zx.h"
|
||||
#elif defined(STM32F412Rx)
|
||||
#include "stm32f412rx.h"
|
||||
#elif defined(STM32F412Vx)
|
||||
#include "stm32f412vx.h"
|
||||
#elif defined(STM32F413xx)
|
||||
#include "stm32f413xx.h"
|
||||
#elif defined(STM32F423xx)
|
||||
#include "stm32f423xx.h"
|
||||
#else
|
||||
#error "Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup Exported_macro
|
||||
* @{
|
||||
*/
|
||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
#define READ_REG(REG) ((REG))
|
||||
|
||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||
|
||||
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (USE_HAL_DRIVER)
|
||||
#include "stm32f4xx_hal.h"
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32F4xx_H */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
15160
cpu/stm32/include/vendor/stm32f722xx.h
vendored
Normal file
15160
cpu/stm32/include/vendor/stm32f722xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
15240
cpu/stm32/include/vendor/stm32f723xx.h
vendored
Normal file
15240
cpu/stm32/include/vendor/stm32f723xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
17565
cpu/stm32/include/vendor/stm32f746xx.h
vendored
Normal file
17565
cpu/stm32/include/vendor/stm32f746xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
18595
cpu/stm32/include/vendor/stm32f767xx.h
vendored
Normal file
18595
cpu/stm32/include/vendor/stm32f767xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
21765
cpu/stm32/include/vendor/stm32f769xx.h
vendored
Normal file
21765
cpu/stm32/include/vendor/stm32f769xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
205
cpu/stm32/include/vendor/stm32f7xx.h
vendored
Normal file
205
cpu/stm32/include/vendor/stm32f7xx.h
vendored
Normal file
@ -0,0 +1,205 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f7xx.h
|
||||
* @author MCD Application Team
|
||||
* @version V1.2.0
|
||||
* @date 30-December-2016
|
||||
* @brief CMSIS STM32F7xx Device Peripheral Access Layer Header File.
|
||||
*
|
||||
* The file is the unique include file that the application programmer
|
||||
* is using in the C source code, usually in main.c. This file contains:
|
||||
* - Configuration section that allows to select:
|
||||
* - The STM32F7xx device used in the target application
|
||||
* - To use or not the peripherals drivers in application code(i.e.
|
||||
* code will be based on direct access to peripherals registers
|
||||
* rather than drivers API), this option is controlled by
|
||||
* "#define USE_HAL_DRIVER"
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32f7xx
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __STM32F7xx_H
|
||||
#define __STM32F7xx_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** @addtogroup Library_configuration_section
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief STM32 Family
|
||||
*/
|
||||
#if !defined (STM32F7)
|
||||
#define STM32F7
|
||||
#endif /* STM32F7 */
|
||||
|
||||
/* Uncomment the line below according to the target STM32 device used in your
|
||||
application
|
||||
*/
|
||||
#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F767xx) && \
|
||||
!defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && !defined (STM32F722xx) && \
|
||||
!defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx)
|
||||
/* #define STM32F756xx */ /*!< STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG,
|
||||
STM32F756NG Devices */
|
||||
/* #define STM32F746xx */ /*!< STM32F746VE, STM32F746VG, STM32F746ZE, STM32F746ZG, STM32F746IE, STM32F746IG,
|
||||
STM32F746BE, STM32F746BG, STM32F746NE, STM32F746NG Devices */
|
||||
/* #define STM32F745xx */ /*!< STM32F745VE, STM32F745VG, STM32F745ZG, STM32F745ZE, STM32F745IE, STM32F745IG Devices */
|
||||
/* #define STM32F765xx */ /*!< STM32F765BI, STM32F765BG, STM32F765NI, STM32F765NG, STM32F765II, STM32F765IG,
|
||||
STM32F765ZI, STM32F765ZG, STM32F765VI, STM32F765VG Devices */
|
||||
/* #define STM32F767xx */ /*!< STM32F767BG, STM32F767BI, STM32F767IG, STM32F767II, STM32F767NG, STM32F767NI,
|
||||
STM32F767VG, STM32F767VI, STM32F767ZG, STM32F767ZI Devices */
|
||||
/* #define STM32F769xx */ /*!< STM32F769AG, STM32F769AI, STM32F769BG, STM32F769BI, STM32F769IG, STM32F769II,
|
||||
STM32F769NG, STM32F769NI, STM32F768AI Devices */
|
||||
/* #define STM32F777xx */ /*!< STM32F777VI, STM32F777ZI, STM32F777II, STM32F777BI, STM32F777NI Devices */
|
||||
/* #define STM32F779xx */ /*!< STM32F779II, STM32F779BI, STM32F779NI, STM32F779AI, STM32F778AI Devices */
|
||||
/* #define STM32F722xx */ /*!< STM32F722IE, STM32F722ZE, STM32F722VE, STM32F722RE, STM32F722IC, STM32F722ZC,
|
||||
STM32F722VC, STM32F722RC Devices */
|
||||
/* #define STM32F723xx */ /*!< STM32F723IE, STM32F723ZE, STM32F723VE, STM32F723IC, STM32F723ZC, STM32F723VC Devices */
|
||||
/* #define STM32F732xx */ /*!< STM32F732IE, STM32F732ZE, STM32F732VE, STM32F732RE Devices */
|
||||
/* #define STM32F733xx */ /*!< STM32F733IE, STM32F733ZE, STM32F733VE Devices */
|
||||
#endif
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||
devices, you can define the device in your toolchain compiler preprocessor.
|
||||
*/
|
||||
|
||||
#if !defined (USE_HAL_DRIVER)
|
||||
/**
|
||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||
In this case, these drivers will not be included and the application code will
|
||||
be based on direct access to peripherals registers
|
||||
*/
|
||||
/*#define USE_HAL_DRIVER */
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
/**
|
||||
* @brief CMSIS Device version number V1.2.0
|
||||
*/
|
||||
#define __STM32F7_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
|
||||
#define __STM32F7_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
|
||||
#define __STM32F7_CMSIS_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */
|
||||
#define __STM32F7_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
|
||||
#define __STM32F7_CMSIS_VERSION ((__STM32F7_CMSIS_VERSION_MAIN << 24)\
|
||||
|(__STM32F7_CMSIS_VERSION_SUB1 << 16)\
|
||||
|(__STM32F7_CMSIS_VERSION_SUB2 << 8 )\
|
||||
|(__STM32F7_CMSIS_VERSION))
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Device_Included
|
||||
* @{
|
||||
*/
|
||||
#if defined(STM32F722xx)
|
||||
#include "stm32f722xx.h"
|
||||
#elif defined(STM32F723xx)
|
||||
#include "stm32f723xx.h"
|
||||
#elif defined(STM32F732xx)
|
||||
#include "stm32f732xx.h"
|
||||
#elif defined(STM32F733xx)
|
||||
#include "stm32f733xx.h"
|
||||
#elif defined(STM32F756xx)
|
||||
#include "stm32f756xx.h"
|
||||
#elif defined(STM32F746xx)
|
||||
#include "stm32f746xx.h"
|
||||
#elif defined(STM32F745xx)
|
||||
#include "stm32f745xx.h"
|
||||
#elif defined(STM32F765xx)
|
||||
#include "stm32f765xx.h"
|
||||
#elif defined(STM32F767xx)
|
||||
#include "stm32f767xx.h"
|
||||
#elif defined(STM32F769xx)
|
||||
#include "stm32f769xx.h"
|
||||
#elif defined(STM32F777xx)
|
||||
#include "stm32f777xx.h"
|
||||
#elif defined(STM32F779xx)
|
||||
#include "stm32f779xx.h"
|
||||
#else
|
||||
#error "Please select first the target STM32F7xx device used in your application (in stm32f7xx.h file)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup Exported_macro
|
||||
* @{
|
||||
*/
|
||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
#define READ_REG(REG) ((REG))
|
||||
|
||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||
|
||||
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef USE_HAL_DRIVER
|
||||
#include "stm32f7xx_hal_conf.h"
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32F7xx_H */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
5799
cpu/stm32/include/vendor/stm32l010x4.h
vendored
Normal file
5799
cpu/stm32/include/vendor/stm32l010x4.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5856
cpu/stm32/include/vendor/stm32l010x6.h
vendored
Normal file
5856
cpu/stm32/include/vendor/stm32l010x6.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5852
cpu/stm32/include/vendor/stm32l010x8.h
vendored
Normal file
5852
cpu/stm32/include/vendor/stm32l010x8.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5928
cpu/stm32/include/vendor/stm32l010xb.h
vendored
Normal file
5928
cpu/stm32/include/vendor/stm32l010xb.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6092
cpu/stm32/include/vendor/stm32l031xx.h
vendored
Normal file
6092
cpu/stm32/include/vendor/stm32l031xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7344
cpu/stm32/include/vendor/stm32l052xx.h
vendored
Normal file
7344
cpu/stm32/include/vendor/stm32l052xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7504
cpu/stm32/include/vendor/stm32l053xx.h
vendored
Normal file
7504
cpu/stm32/include/vendor/stm32l053xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7679
cpu/stm32/include/vendor/stm32l072xx.h
vendored
Normal file
7679
cpu/stm32/include/vendor/stm32l072xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7841
cpu/stm32/include/vendor/stm32l073xx.h
vendored
Normal file
7841
cpu/stm32/include/vendor/stm32l073xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
225
cpu/stm32/include/vendor/stm32l0xx.h
vendored
Normal file
225
cpu/stm32/include/vendor/stm32l0xx.h
vendored
Normal file
@ -0,0 +1,225 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32l0xx.h
|
||||
* @author MCD Application Team
|
||||
* @version V1.7.1
|
||||
* @date 25-November-2016
|
||||
* @brief CMSIS Cortex-M0+ Device Peripheral Access Layer Header File.
|
||||
* This file contains all the peripheral register's definitions, bits
|
||||
* definitions and memory mapping for STM32L0xx devices.
|
||||
*
|
||||
* The file is the unique include file that the application programmer
|
||||
* is using in the C source code, usually in main.c. This file contains:
|
||||
* - Configuration section that allows to select:
|
||||
* - The device used in the target application
|
||||
* - To use or not the peripheral's drivers in application code(i.e.
|
||||
* code will be based on direct access to peripheral's registers
|
||||
* rather than drivers API), this option is controlled by
|
||||
* "#define USE_HAL_DRIVER"
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32l0xx
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __STM32L0xx_H
|
||||
#define __STM32L0xx_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** @addtogroup Library_configuration_section
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief STM32 Family
|
||||
*/
|
||||
#if !defined (STM32L0)
|
||||
#define STM32L0
|
||||
#endif /* STM32L0 */
|
||||
|
||||
/* Uncomment the line below according to the target STM32 device used in your
|
||||
application
|
||||
*/
|
||||
|
||||
#if !defined (STM32L011xx) && !defined (STM32L021xx) && \
|
||||
!defined (STM32L031xx) && !defined (STM32L041xx) && \
|
||||
!defined (STM32L051xx) && !defined (STM32L052xx) && !defined (STM32L053xx) && \
|
||||
!defined (STM32L061xx) && !defined (STM32L062xx) && !defined (STM32L063xx) && \
|
||||
!defined (STM32L071xx) && !defined (STM32L072xx) && !defined (STM32L073xx) && \
|
||||
!defined (STM32L081xx) && !defined (STM32L082xx) && !defined (STM32L083xx) \
|
||||
/* #define STM32L011xx */
|
||||
/* #define STM32L021xx */
|
||||
/* #define STM32L031xx */ /*!< STM32L031C6, STM32L031E6, STM32L031F6, STM32L031G6, STM32L031K6 Devices */
|
||||
/* #define STM32L041xx */ /*!< STM32L041C6, STM32L041E6, STM32L041F6, STM32L041G6, STM32L041K6 Devices */
|
||||
/* #define STM32L051xx */ /*!< STM32L051K8, STM32L051C6, STM32L051C8, STM32L051R6, STM32L051R8 Devices */
|
||||
/* #define STM32L052xx */ /*!< STM32L052K6, STM32L052K8, STM32L052C6, STM32L052C8, STM32L052R6, STM32L052R8 Devices */
|
||||
/* #define STM32L053xx */ /*!< STM32L053C6, STM32L053C8, STM32L053R6, STM32L053R8 Devices */
|
||||
/* #define STM32L061xx */ /*!< */
|
||||
/* #define STM32L062xx */ /*!< STM32L062K8 */
|
||||
/* #define STM32L063xx */ /*!< STM32L063C8, STM32L063R8 */
|
||||
/* #define STM32L071xx */ /*!< */
|
||||
/* #define STM32L072xx */ /*!< */
|
||||
/* #define STM32L073xx */ /*!< STM32L073V8, STM32L073VB, STM32L073RB, STM32L073VZ, STM32L073RZ Devices */
|
||||
/* #define STM32L081xx */ /*!< */
|
||||
/* #define STM32L082xx */ /*!< */
|
||||
/* #define STM32L083xx */ /*!< */
|
||||
#endif
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||
devices, you can define the device in your toolchain compiler preprocessor.
|
||||
*/
|
||||
#if !defined (USE_HAL_DRIVER)
|
||||
/**
|
||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||
In this case, these drivers will not be included and the application code will
|
||||
be based on direct access to peripherals registers
|
||||
*/
|
||||
/*#define USE_HAL_DRIVER */
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
/**
|
||||
* @brief CMSIS Device version number V1.7.1
|
||||
*/
|
||||
#define __STM32L0xx_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
|
||||
#define __STM32L0xx_CMSIS_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */
|
||||
#define __STM32L0xx_CMSIS_VERSION_SUB2 (0x01) /*!< [15:8] sub2 version */
|
||||
#define __STM32L0xx_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
|
||||
#define __STM32L0xx_CMSIS_VERSION ((__STM32L0xx_CMSIS_VERSION_MAIN << 24)\
|
||||
|(__STM32L0xx_CMSIS_VERSION_SUB1 << 16)\
|
||||
|(__STM32L0xx_CMSIS_VERSION_SUB2 << 8 )\
|
||||
|(__STM32L0xx_CMSIS_VERSION_RC))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Device_Included
|
||||
* @{
|
||||
*/
|
||||
#if defined(STM32L010xB)
|
||||
#include "stm32l010xb.h"
|
||||
#elif defined(STM32L010x8)
|
||||
#include "stm32l010x8.h"
|
||||
#elif defined(STM32L010x6)
|
||||
#include "stm32l010x6.h"
|
||||
#elif defined(STM32L010x4)
|
||||
#include "stm32l010x4.h"
|
||||
#elif defined(STM32L011xx)
|
||||
#include "stm32l011xx.h"
|
||||
#elif defined(STM32L021xx)
|
||||
#include "stm32l021xx.h"
|
||||
#elif defined(STM32L031xx)
|
||||
#include "stm32l031xx.h"
|
||||
#elif defined(STM32L041xx)
|
||||
#include "stm32l041xx.h"
|
||||
#elif defined(STM32L051xx)
|
||||
#include "stm32l051xx.h"
|
||||
#elif defined(STM32L052xx)
|
||||
#include "stm32l052xx.h"
|
||||
#elif defined(STM32L053xx)
|
||||
#include "stm32l053xx.h"
|
||||
#elif defined(STM32L062xx)
|
||||
#include "stm32l062xx.h"
|
||||
#elif defined(STM32L063xx)
|
||||
#include "stm32l063xx.h"
|
||||
#elif defined(STM32L061xx)
|
||||
#include "stm32l061xx.h"
|
||||
#elif defined(STM32L071xx)
|
||||
#include "stm32l071xx.h"
|
||||
#elif defined(STM32L072xx)
|
||||
#include "stm32l072xx.h"
|
||||
#elif defined(STM32L073xx)
|
||||
#include "stm32l073xx.h"
|
||||
#elif defined(STM32L082xx)
|
||||
#include "stm32l082xx.h"
|
||||
#elif defined(STM32L083xx)
|
||||
#include "stm32l083xx.h"
|
||||
#elif defined(STM32L081xx)
|
||||
#include "stm32l081xx.h"
|
||||
#else
|
||||
#error "Please select first the target STM32L0xx device used in your application (in stm32l0xx.h file)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup Exported_macro
|
||||
* @{
|
||||
*/
|
||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
#define READ_REG(REG) ((REG))
|
||||
|
||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (USE_HAL_DRIVER)
|
||||
#include "stm32l0xx_hal.h"
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32L0xx_H */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
8070
cpu/stm32/include/vendor/stm32l151xb.h
vendored
Normal file
8070
cpu/stm32/include/vendor/stm32l151xb.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
8146
cpu/stm32/include/vendor/stm32l151xba.h
vendored
Normal file
8146
cpu/stm32/include/vendor/stm32l151xba.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
9054
cpu/stm32/include/vendor/stm32l151xc.h
vendored
Normal file
9054
cpu/stm32/include/vendor/stm32l151xc.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
9350
cpu/stm32/include/vendor/stm32l152xe.h
vendored
Normal file
9350
cpu/stm32/include/vendor/stm32l152xe.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
246
cpu/stm32/include/vendor/stm32l1xx.h
vendored
Normal file
246
cpu/stm32/include/vendor/stm32l1xx.h
vendored
Normal file
@ -0,0 +1,246 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32l1xx.h
|
||||
* @author MCD Application Team
|
||||
* @brief CMSIS STM32L1xx Device Peripheral Access Layer Header File.
|
||||
*
|
||||
* The file is the unique include file that the application programmer
|
||||
* is using in the C source code, usually in main.c. This file contains:
|
||||
* - Configuration section that allows to select:
|
||||
* - The STM32L1xx device used in the target application
|
||||
* - To use or not the peripheral<EFBFBD>s drivers in application code(i.e.
|
||||
* code will be based on direct access to peripheral<EFBFBD>s registers
|
||||
* rather than drivers API), this option is controlled by
|
||||
* "#define USE_HAL_DRIVER"
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© Copyright (c) 2017 STMicroelectronics.
|
||||
* All rights reserved.</center></h2>
|
||||
*
|
||||
* This software component is licensed by ST under BSD 3-Clause license,
|
||||
* the "License"; You may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at:
|
||||
* opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32l1xx
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __STM32L1XX_H
|
||||
#define __STM32L1XX_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** @addtogroup Library_configuration_section
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief STM32 Family
|
||||
*/
|
||||
#if !defined (STM32L1)
|
||||
#define STM32L1
|
||||
#endif /* STM32L1 */
|
||||
|
||||
|
||||
/* Uncomment the line below according to the target STM32L device used in your
|
||||
application
|
||||
*/
|
||||
|
||||
#if !defined (STM32L100xB) && !defined (STM32L100xBA) && !defined (STM32L100xC) && \
|
||||
!defined (STM32L151xB) && !defined (STM32L151xBA) && !defined (STM32L151xC) && !defined (STM32L151xCA) && !defined (STM32L151xD) && !defined (STM32L151xDX) && !defined (STM32L151xE) && \
|
||||
!defined (STM32L152xB) && !defined (STM32L152xBA) && !defined (STM32L152xC) && !defined (STM32L152xCA) && !defined (STM32L152xD) && !defined (STM32L152xDX) && !defined (STM32L152xE) && \
|
||||
!defined (STM32L162xC) && !defined (STM32L162xCA) && !defined (STM32L162xD) && !defined (STM32L162xDX) && !defined (STM32L162xE)
|
||||
/* #define STM32L100xB */ /*!< STM32L100C6, STM32L100R and STM32L100RB Devices */
|
||||
/* #define STM32L100xBA */ /*!< STM32L100C6-A, STM32L100R8-A and STM32L100RB-A Devices */
|
||||
/* #define STM32L100xC */ /*!< STM32L100RC Devices */
|
||||
/* #define STM32L151xB */ /*!< STM32L151C6, STM32L151R6, STM32L151C8, STM32L151R8, STM32L151V8, STM32L151CB, STM32L151RB and STM32L151VB */
|
||||
/* #define STM32L151xBA */ /*!< STM32L151C6-A, STM32L151R6-A, STM32L151C8-A, STM32L151R8-A, STM32L151V8-A, STM32L151CB-A, STM32L151RB-A and STM32L151VB-A */
|
||||
/* #define STM32L151xC */ /*!< STM32L151CC, STM32L151UC, STM32L151RC and STM32L151VC */
|
||||
/* #define STM32L151xCA */ /*!< STM32L151RC-A, STM32L151VC-A, STM32L151QC and STM32L151ZC */
|
||||
/* #define STM32L151xD */ /*!< STM32L151QD, STM32L151RD, STM32L151VD & STM32L151ZD */
|
||||
/* #define STM32L151xDX */ /*!< STM32L151VD-X Devices */
|
||||
/* #define STM32L151xE */ /*!< STM32L151QE, STM32L151RE, STM32L151VE and STM32L151ZE */
|
||||
/* #define STM32L152xB */ /*!< STM32L152C6, STM32L152R6, STM32L152C8, STM32L152R8, STM32L152V8, STM32L152CB, STM32L152RB and STM32L152VB */
|
||||
/* #define STM32L152xBA */ /*!< STM32L152C6-A, STM32L152R6-A, STM32L152C8-A, STM32L152R8-A, STM32L152V8-A, STM32L152CB-A, STM32L152RB-A and STM32L152VB-A */
|
||||
/* #define STM32L152xC */ /*!< STM32L152CC, STM32L152UC, STM32L152RC and STM32L152VC */
|
||||
/* #define STM32L152xCA */ /*!< STM32L152RC-A, STM32L152VC-A, STM32L152QC and STM32L152ZC */
|
||||
/* #define STM32L152xD */ /*!< STM32L152QD, STM32L152RD, STM32L152VD and STM32L152ZD */
|
||||
/* #define STM32L152xDX */ /*!< STM32L152VD-X Devices */
|
||||
/* #define STM32L152xE */ /*!< STM32L152QE, STM32L152RE, STM32L152VE and STM32L152ZE */
|
||||
/* #define STM32L162xC */ /*!< STM32L162RC and STM32L162VC */
|
||||
/* #define STM32L162xCA */ /*!< STM32L162RC-A, STM32L162VC-A, STM32L162QC and STM32L162ZC */
|
||||
/* #define STM32L162xD */ /*!< STM32L162QD, STM32L162RD, STM32L162VD and STM32L162ZD */
|
||||
/* #define STM32L162xDX */ /*!< STM32L162VD-X Devices */
|
||||
/* #define STM32L162xE */ /*!< STM32L162RE, STM32L162VE and STM32L162ZE */
|
||||
#endif
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||
devices, you can define the device in your toolchain compiler preprocessor.
|
||||
*/
|
||||
|
||||
#if !defined (USE_HAL_DRIVER)
|
||||
/**
|
||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||
In this case, these drivers will not be included and the application code will
|
||||
be based on direct access to peripherals registers
|
||||
*/
|
||||
/*#define USE_HAL_DRIVER */
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
/**
|
||||
* @brief CMSIS Device version number
|
||||
*/
|
||||
#define __STM32L1xx_CMSIS_VERSION_MAIN (0x02) /*!< [31:24] main version */
|
||||
#define __STM32L1xx_CMSIS_VERSION_SUB1 (0x03) /*!< [23:16] sub1 version */
|
||||
#define __STM32L1xx_CMSIS_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */
|
||||
#define __STM32L1xx_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
|
||||
#define __STM32L1xx_CMSIS_VERSION ((__STM32L1xx_CMSIS_VERSION_MAIN << 24)\
|
||||
|(__STM32L1xx_CMSIS_VERSION_SUB1 << 16)\
|
||||
|(__STM32L1xx_CMSIS_VERSION_SUB2 << 8 )\
|
||||
|(__STM32L1xx_CMSIS_VERSION_RC))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Device_Included
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined(STM32L100xB)
|
||||
#include "stm32l100xb.h"
|
||||
#elif defined(STM32L100xBA)
|
||||
#include "stm32l100xba.h"
|
||||
#elif defined(STM32L100xC)
|
||||
#include "stm32l100xc.h"
|
||||
#elif defined(STM32L151xB)
|
||||
#include "stm32l151xb.h"
|
||||
#elif defined(STM32L151xBA)
|
||||
#include "stm32l151xba.h"
|
||||
#elif defined(STM32L151xC)
|
||||
#include "stm32l151xc.h"
|
||||
#elif defined(STM32L151xCA)
|
||||
#include "stm32l151xca.h"
|
||||
#elif defined(STM32L151xD)
|
||||
#include "stm32l151xd.h"
|
||||
#elif defined(STM32L151xDX)
|
||||
#include "stm32l151xdx.h"
|
||||
#elif defined(STM32L151xE)
|
||||
#include "stm32l151xe.h"
|
||||
#elif defined(STM32L152xB)
|
||||
#include "stm32l152xb.h"
|
||||
#elif defined(STM32L152xBA)
|
||||
#include "stm32l152xba.h"
|
||||
#elif defined(STM32L152xC)
|
||||
#include "stm32l152xc.h"
|
||||
#elif defined(STM32L152xCA)
|
||||
#include "stm32l152xca.h"
|
||||
#elif defined(STM32L152xD)
|
||||
#include "stm32l152xd.h"
|
||||
#elif defined(STM32L152xDX)
|
||||
#include "stm32l152xdx.h"
|
||||
#elif defined(STM32L152xE)
|
||||
#include "stm32l152xe.h"
|
||||
#elif defined(STM32L162xC)
|
||||
#include "stm32l162xc.h"
|
||||
#elif defined(STM32L162xCA)
|
||||
#include "stm32l162xca.h"
|
||||
#elif defined(STM32L162xD)
|
||||
#include "stm32l162xd.h"
|
||||
#elif defined(STM32L162xDX)
|
||||
#include "stm32l162xdx.h"
|
||||
#elif defined(STM32L162xE)
|
||||
#include "stm32l162xe.h"
|
||||
#else
|
||||
#error "Please select first the target STM32L1xx device used in your application (in stm32l1xx.h file)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Exported_types
|
||||
* @{
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
RESET = 0,
|
||||
SET = !RESET
|
||||
} FlagStatus, ITStatus;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DISABLE = 0,
|
||||
ENABLE = !DISABLE
|
||||
} FunctionalState;
|
||||
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SUCCESS = 0,
|
||||
ERROR = !SUCCESS
|
||||
} ErrorStatus;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup Exported_macros
|
||||
* @{
|
||||
*/
|
||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
#define READ_REG(REG) ((REG))
|
||||
|
||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||
|
||||
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (USE_HAL_DRIVER)
|
||||
#include "stm32l1xx_hal.h"
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32L1xx_H */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
10902
cpu/stm32/include/vendor/stm32l412xx.h
vendored
Normal file
10902
cpu/stm32/include/vendor/stm32l412xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
14853
cpu/stm32/include/vendor/stm32l432xx.h
vendored
Normal file
14853
cpu/stm32/include/vendor/stm32l432xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
15967
cpu/stm32/include/vendor/stm32l433xx.h
vendored
Normal file
15967
cpu/stm32/include/vendor/stm32l433xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
16065
cpu/stm32/include/vendor/stm32l452xx.h
vendored
Normal file
16065
cpu/stm32/include/vendor/stm32l452xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
18372
cpu/stm32/include/vendor/stm32l475xx.h
vendored
Normal file
18372
cpu/stm32/include/vendor/stm32l475xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
18523
cpu/stm32/include/vendor/stm32l476xx.h
vendored
Normal file
18523
cpu/stm32/include/vendor/stm32l476xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
19768
cpu/stm32/include/vendor/stm32l496xx.h
vendored
Normal file
19768
cpu/stm32/include/vendor/stm32l496xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
20141
cpu/stm32/include/vendor/stm32l4r5xx.h
vendored
Normal file
20141
cpu/stm32/include/vendor/stm32l4r5xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
254
cpu/stm32/include/vendor/stm32l4xx.h
vendored
Normal file
254
cpu/stm32/include/vendor/stm32l4xx.h
vendored
Normal file
@ -0,0 +1,254 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32l4xx.h
|
||||
* @author MCD Application Team
|
||||
* @brief CMSIS STM32L4xx Device Peripheral Access Layer Header File.
|
||||
*
|
||||
* The file is the unique include file that the application programmer
|
||||
* is using in the C source code, usually in main.c. This file contains:
|
||||
* - Configuration section that allows to select:
|
||||
* - The STM32L4xx device used in the target application
|
||||
* - To use or not the peripheral<EFBFBD>s drivers in application code(i.e.
|
||||
* code will be based on direct access to peripheral<EFBFBD>s registers
|
||||
* rather than drivers API), this option is controlled by
|
||||
* "#define USE_HAL_DRIVER"
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© Copyright (c) 2017 STMicroelectronics.
|
||||
* All rights reserved.</center></h2>
|
||||
*
|
||||
* This software component is licensed by ST under BSD 3-Clause license,
|
||||
* the "License"; You may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at:
|
||||
* opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32l4xx
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __STM32L4xx_H
|
||||
#define __STM32L4xx_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** @addtogroup Library_configuration_section
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief STM32 Family
|
||||
*/
|
||||
#if !defined (STM32L4)
|
||||
#define STM32L4
|
||||
#endif /* STM32L4 */
|
||||
|
||||
/* Uncomment the line below according to the target STM32L4 device used in your
|
||||
application
|
||||
*/
|
||||
|
||||
#if !defined (STM32L412xx) && !defined (STM32L422xx) && \
|
||||
!defined (STM32L431xx) && !defined (STM32L432xx) && !defined (STM32L433xx) && !defined (STM32L442xx) && !defined (STM32L443xx) && \
|
||||
!defined (STM32L451xx) && !defined (STM32L452xx) && !defined (STM32L462xx) && \
|
||||
!defined (STM32L471xx) && !defined (STM32L475xx) && !defined (STM32L476xx) && !defined (STM32L485xx) && !defined (STM32L486xx) && \
|
||||
!defined (STM32L496xx) && !defined (STM32L4A6xx) && \
|
||||
!defined (STM32L4P5xx) && !defined (STM32L4Q5xx) && \
|
||||
!defined (STM32L4R5xx) && !defined (STM32L4R7xx) && !defined (STM32L4R9xx) && !defined (STM32L4S5xx) && !defined (STM32L4S7xx) && !defined (STM32L4S9xx)
|
||||
/* #define STM32L412xx */ /*!< STM32L412xx Devices */
|
||||
/* #define STM32L422xx */ /*!< STM32L422xx Devices */
|
||||
/* #define STM32L431xx */ /*!< STM32L431xx Devices */
|
||||
/* #define STM32L432xx */ /*!< STM32L432xx Devices */
|
||||
/* #define STM32L433xx */ /*!< STM32L433xx Devices */
|
||||
/* #define STM32L442xx */ /*!< STM32L442xx Devices */
|
||||
/* #define STM32L443xx */ /*!< STM32L443xx Devices */
|
||||
/* #define STM32L451xx */ /*!< STM32L451xx Devices */
|
||||
/* #define STM32L452xx */ /*!< STM32L452xx Devices */
|
||||
/* #define STM32L462xx */ /*!< STM32L462xx Devices */
|
||||
/* #define STM32L471xx */ /*!< STM32L471xx Devices */
|
||||
/* #define STM32L475xx */ /*!< STM32L475xx Devices */
|
||||
/* #define STM32L476xx */ /*!< STM32L476xx Devices */
|
||||
/* #define STM32L485xx */ /*!< STM32L485xx Devices */
|
||||
/* #define STM32L486xx */ /*!< STM32L486xx Devices */
|
||||
/* #define STM32L496xx */ /*!< STM32L496xx Devices */
|
||||
/* #define STM32L4A6xx */ /*!< STM32L4A6xx Devices */
|
||||
/* #define STM32L4P5xx */ /*!< STM32L4Q5xx Devices */
|
||||
/* #define STM32L4R5xx */ /*!< STM32L4R5xx Devices */
|
||||
/* #define STM32L4R7xx */ /*!< STM32L4R7xx Devices */
|
||||
/* #define STM32L4R9xx */ /*!< STM32L4R9xx Devices */
|
||||
/* #define STM32L4S5xx */ /*!< STM32L4S5xx Devices */
|
||||
/* #define STM32L4S7xx */ /*!< STM32L4S7xx Devices */
|
||||
/* #define STM32L4S9xx */ /*!< STM32L4S9xx Devices */
|
||||
#endif
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||
devices, you can define the device in your toolchain compiler preprocessor.
|
||||
*/
|
||||
#if !defined (USE_HAL_DRIVER)
|
||||
/**
|
||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||
In this case, these drivers will not be included and the application code will
|
||||
be based on direct access to peripherals registers
|
||||
*/
|
||||
/*#define USE_HAL_DRIVER */
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
/**
|
||||
* @brief CMSIS Device version number
|
||||
*/
|
||||
#define __STM32L4_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
|
||||
#define __STM32L4_CMSIS_VERSION_SUB1 (0x06) /*!< [23:16] sub1 version */
|
||||
#define __STM32L4_CMSIS_VERSION_SUB2 (0x01) /*!< [15:8] sub2 version */
|
||||
#define __STM32L4_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
|
||||
#define __STM32L4_CMSIS_VERSION ((__STM32L4_CMSIS_VERSION_MAIN << 24)\
|
||||
|(__STM32L4_CMSIS_VERSION_SUB1 << 16)\
|
||||
|(__STM32L4_CMSIS_VERSION_SUB2 << 8 )\
|
||||
|(__STM32L4_CMSIS_VERSION_RC))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Device_Included
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined(STM32L412xx)
|
||||
#include "stm32l412xx.h"
|
||||
#elif defined(STM32L422xx)
|
||||
#include "stm32l422xx.h"
|
||||
#elif defined(STM32L431xx)
|
||||
#include "stm32l431xx.h"
|
||||
#elif defined(STM32L432xx)
|
||||
#include "stm32l432xx.h"
|
||||
#elif defined(STM32L433xx)
|
||||
#include "stm32l433xx.h"
|
||||
#elif defined(STM32L442xx)
|
||||
#include "stm32l442xx.h"
|
||||
#elif defined(STM32L443xx)
|
||||
#include "stm32l443xx.h"
|
||||
#elif defined(STM32L451xx)
|
||||
#include "stm32l451xx.h"
|
||||
#elif defined(STM32L452xx)
|
||||
#include "stm32l452xx.h"
|
||||
#elif defined(STM32L462xx)
|
||||
#include "stm32l462xx.h"
|
||||
#elif defined(STM32L471xx)
|
||||
#include "stm32l471xx.h"
|
||||
#elif defined(STM32L475xx)
|
||||
#include "stm32l475xx.h"
|
||||
#elif defined(STM32L476xx)
|
||||
#include "stm32l476xx.h"
|
||||
#elif defined(STM32L485xx)
|
||||
#include "stm32l485xx.h"
|
||||
#elif defined(STM32L486xx)
|
||||
#include "stm32l486xx.h"
|
||||
#elif defined(STM32L496xx)
|
||||
#include "stm32l496xx.h"
|
||||
#elif defined(STM32L4A6xx)
|
||||
#include "stm32l4a6xx.h"
|
||||
#elif defined(STM32L4P5xx)
|
||||
#include "stm32l4p5xx.h"
|
||||
#elif defined(STM32L4Q5xx)
|
||||
#include "stm32l4q5xx.h"
|
||||
#elif defined(STM32L4R5xx)
|
||||
#include "stm32l4r5xx.h"
|
||||
#elif defined(STM32L4R7xx)
|
||||
#include "stm32l4r7xx.h"
|
||||
#elif defined(STM32L4R9xx)
|
||||
#include "stm32l4r9xx.h"
|
||||
#elif defined(STM32L4S5xx)
|
||||
#include "stm32l4s5xx.h"
|
||||
#elif defined(STM32L4S7xx)
|
||||
#include "stm32l4s7xx.h"
|
||||
#elif defined(STM32L4S9xx)
|
||||
#include "stm32l4s9xx.h"
|
||||
#else
|
||||
#error "Please select first the target STM32L4xx device used in your application (in stm32l4xx.h file)"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Exported_types
|
||||
* @{
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
RESET = 0,
|
||||
SET = !RESET
|
||||
} FlagStatus, ITStatus;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DISABLE = 0,
|
||||
ENABLE = !DISABLE
|
||||
} FunctionalState;
|
||||
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SUCCESS = 0,
|
||||
ERROR = !SUCCESS
|
||||
} ErrorStatus;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup Exported_macros
|
||||
* @{
|
||||
*/
|
||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
#define READ_REG(REG) ((REG))
|
||||
|
||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||
|
||||
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (USE_HAL_DRIVER)
|
||||
#include "stm32l4xx_hal.h"
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32L4xx_H */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
13717
cpu/stm32/include/vendor/stm32wb55xx.h
vendored
Normal file
13717
cpu/stm32/include/vendor/stm32wb55xx.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
174
cpu/stm32/include/vendor/stm32wbxx.h
vendored
Normal file
174
cpu/stm32/include/vendor/stm32wbxx.h
vendored
Normal file
@ -0,0 +1,174 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32wbxx.h
|
||||
* @author MCD Application Team
|
||||
* @brief CMSIS STM32WBxx Device Peripheral Access Layer Header File.
|
||||
*
|
||||
* The file is the unique include file that the application programmer
|
||||
* is using in the C source code, usually in main.c. This file contains:
|
||||
* - Configuration section that allows to select:
|
||||
* - The STM32WBxx device used in the target application
|
||||
* - To use or not the peripheral<EFBFBD>s drivers in application code(i.e.
|
||||
* code will be based on direct access to peripheral<EFBFBD>s registers
|
||||
* rather than drivers API), this option is controlled by
|
||||
* "#define USE_HAL_DRIVER"
|
||||
*
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
|
||||
* All rights reserved.</center></h2>
|
||||
*
|
||||
* This software component is licensed by ST under BSD 3-Clause license,
|
||||
* the "License"; You may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at:
|
||||
* opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/** @addtogroup CMSIS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup stm32wbxx
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef __STM32WBxx_H
|
||||
#define __STM32WBxx_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** @addtogroup Library_configuration_section
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief STM32 Family
|
||||
*/
|
||||
#if !defined (STM32WB)
|
||||
#define STM32WB
|
||||
#endif /* STM32WB */
|
||||
|
||||
/* Tip: To avoid modifying this file each time you need to switch between these
|
||||
devices, you can define the device in your toolchain compiler preprocessor.
|
||||
*/
|
||||
#if !defined (USE_HAL_DRIVER)
|
||||
/**
|
||||
* @brief Comment the line below if you will not use the peripherals drivers.
|
||||
In this case, these drivers will not be included and the application code will
|
||||
be based on direct access to peripherals registers
|
||||
*/
|
||||
/*#define USE_HAL_DRIVER */
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
/**
|
||||
* @brief CMSIS Device version number
|
||||
*/
|
||||
#define __STM32WBxx_CMSIS_VERSION_MAIN (0x01U) /*!< [31:24] main version */
|
||||
#define __STM32WBxx_CMSIS_VERSION_SUB1 (0x04U) /*!< [23:16] sub1 version */
|
||||
#define __STM32WBxx_CMSIS_VERSION_SUB2 (0x00U) /*!< [15:8] sub2 version */
|
||||
#define __STM32WBxx_CMSIS_VERSION_RC (0x00U) /*!< [7:0] release candidate */
|
||||
#define __STM32WBxx_CMSIS_DEVICE_VERSION ((__STM32WBxx_CMSIS_VERSION_MAIN << 24)\
|
||||
|(__STM32WBxx_CMSIS_VERSION_SUB1 << 16)\
|
||||
|(__STM32WBxx_CMSIS_VERSION_SUB2 << 8 )\
|
||||
|(__STM32WBxx_CMSIS_VERSION_RC))
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Device_Included
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if defined(STM32WB55xx)
|
||||
#include "stm32wb55xx.h"
|
||||
#elif defined(STM32WB5Mxx)
|
||||
#include "stm32wb5mxx.h"
|
||||
#elif defined(STM32WB50xx)
|
||||
#include "stm32wb50xx.h"
|
||||
#elif defined(STM32WB35xx)
|
||||
#include "stm32wb35xx.h"
|
||||
#elif defined(STM32WB30xx)
|
||||
#include "stm32wb30xx.h"
|
||||
#else
|
||||
#error "Please select first the target STM32WBxx device used in your application, for instance xxx (in stm32wbxx.h file)"
|
||||
#endif
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @addtogroup Exported_types
|
||||
* @{
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
RESET = 0,
|
||||
SET = !RESET
|
||||
} FlagStatus, ITStatus;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DISABLE = 0,
|
||||
ENABLE = !DISABLE
|
||||
} FunctionalState;
|
||||
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SUCCESS = 0,
|
||||
ERROR = !SUCCESS
|
||||
} ErrorStatus;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/** @addtogroup Exported_macros
|
||||
* @{
|
||||
*/
|
||||
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
#define READ_REG(REG) ((REG))
|
||||
|
||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
|
||||
|
||||
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#if defined (USE_HAL_DRIVER)
|
||||
#include "stm32wbxx_hal.h"
|
||||
#endif /* USE_HAL_DRIVER */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __STM32WBxx_H */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
28
cpu/stm32/ldscripts/stm32.ld
Normal file
28
cpu/stm32/ldscripts/stm32.ld
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (C) 2017 Inria
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup cpu_cortexm_common
|
||||
* @{
|
||||
*
|
||||
* @file
|
||||
* @brief Memory definitions for the Cortex-M family
|
||||
*
|
||||
* @author Francisco Acosta <francisco.acosta@inria.fr>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
ccmram_length = DEFINED( ccmram_len ) ? ccmram_len : 0x0 ;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
ccmram : ORIGIN = 0x10000000, LENGTH = ccmram_length
|
||||
}
|
||||
|
||||
INCLUDE cortexm.ld
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user