diff --git a/include/libopencm3/stm32/common/crc_common_all.h b/include/libopencm3/stm32/common/crc_common_all.h
index 209f19bf..ad87c667 100644
--- a/include/libopencm3/stm32/common/crc_common_all.h
+++ b/include/libopencm3/stm32/common/crc_common_all.h
@@ -23,8 +23,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA CRC.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA CRC.H
+The order of header inclusion is important. crc.h includes the device
+specific memorymap.h header before including this header file.*/
+#ifdef LIBOPENCM3_CRC_H
#ifndef LIBOPENCM3_CRC_COMMON_ALL_H
#define LIBOPENCM3_CRC_COMMON_ALL_H
@@ -87,3 +90,7 @@ u32 crc_calculate_block(u32 *datap, int size);
END_DECLS
#endif
+#else
+#warning "crc_common_all.h should not be included explicitly, only via crc.h"
+#endif
+
diff --git a/include/libopencm3/stm32/common/dac_common_all.h b/include/libopencm3/stm32/common/dac_common_all.h
index 94bf01bb..b3f75682 100644
--- a/include/libopencm3/stm32/common/dac_common_all.h
+++ b/include/libopencm3/stm32/common/dac_common_all.h
@@ -25,6 +25,11 @@
/**@{*/
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA DAC.H
+The order of header inclusion is important. dac.h includes the device
+specific memorymap.h header before including this header file.*/
+
+#ifdef LIBOPENCM3_DAC_H
#ifndef LIBOPENCM3_DAC_COMMON_ALL_H
#define LIBOPENCM3_DAC_COMMON_ALL_H
@@ -403,5 +408,9 @@ void dac_software_trigger(data_channel dac_channel);
END_DECLS
#endif
+#else
+#warning "dac_common_all.h should not be included explicitly, only via dac.h"
+#endif
+
/**@}*/
diff --git a/include/libopencm3/stm32/common/dma_common_f13.h b/include/libopencm3/stm32/common/dma_common_f13.h
index 68ade004..642ed730 100644
--- a/include/libopencm3/stm32/common/dma_common_f13.h
+++ b/include/libopencm3/stm32/common/dma_common_f13.h
@@ -27,6 +27,11 @@
/**@{*/
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA DMA.H
+The order of header inclusion is important. dma.h includes the device
+specific memorymap.h header before including this header file.*/
+
+#ifdef LIBOPENCM3_DMA_H
#ifndef LIBOPENCM3_DMA_COMMON_F13_H
#define LIBOPENCM3_DMA_COMMON_F13_H
@@ -390,5 +395,9 @@ void dma_set_number_of_data(u32 dma, u8 channel, u16 number);
END_DECLS
#endif
+#else
+#warning "dma_common_f13.h should not be included explicitly, only via dma.h"
+#endif
+
/**@}*/
diff --git a/include/libopencm3/stm32/common/dma_common_f24.h b/include/libopencm3/stm32/common/dma_common_f24.h
index ecf9fcfc..c8aab3ea 100644
--- a/include/libopencm3/stm32/common/dma_common_f24.h
+++ b/include/libopencm3/stm32/common/dma_common_f24.h
@@ -24,8 +24,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA DMA.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA DMA.H
+The order of header inclusion is important. dma.h includes the device
+specific memorymap.h header before including this header file.*/
+#ifdef LIBOPENCM3_DMA_H
#ifndef LIBOPENCM3_DMA_COMMON_F24_H
#define LIBOPENCM3_DMA_COMMON_F24_H
@@ -605,4 +608,7 @@ void dma_set_number_of_data(u32 dma, u8 stream, u16 number);
END_DECLS
/**@}*/
#endif
+#else
+#warning "dma_common_f24.h should not be included explicitly, only via dma.h"
+#endif
diff --git a/include/libopencm3/stm32/common/gpio_common_all.h b/include/libopencm3/stm32/common/gpio_common_all.h
index 4d03db09..beac325e 100644
--- a/include/libopencm3/stm32/common/gpio_common_all.h
+++ b/include/libopencm3/stm32/common/gpio_common_all.h
@@ -25,8 +25,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA GPIO.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA GPIO.H
+The order of header inclusion is important. gpio.h includes the device
+specific memorymap.h header before including this header file.*/
+#if defined (LIBOPENCM3_GPIO_H) || defined (LIBOPENCM3_GPIO_COMMON_F24_H)
#ifndef LIBOPENCM3_GPIO_COMMON_ALL_H
#define LIBOPENCM3_GPIO_COMMON_ALL_H
@@ -79,4 +82,7 @@ END_DECLS
/**@}*/
#endif
+#else
+#warning "gpio_common_all.h should not be included explicitly, only via gpio.h"
+#endif
diff --git a/include/libopencm3/stm32/common/gpio_common_f24.h b/include/libopencm3/stm32/common/gpio_common_f24.h
index 2ce0167e..6263d516 100644
--- a/include/libopencm3/stm32/common/gpio_common_f24.h
+++ b/include/libopencm3/stm32/common/gpio_common_f24.h
@@ -24,8 +24,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA GPIO.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA GPIO.H
+The order of header inclusion is important. gpio.h includes the device
+specific memorymap.h header before including this header file.*/
+#ifdef LIBOPENCM3_GPIO_H
#ifndef LIBOPENCM3_GPIO_COMMON_F24_H
#define LIBOPENCM3_GPIO_COMMON_F24_H
@@ -287,4 +290,7 @@ void gpio_set_af(u32 gpioport, u8 alt_func_num, u16 gpios);
END_DECLS
/**@}*/
#endif
+#else
+#warning "gpio_common_f24.h should not be included explicitly, only via gpio.h"
+#endif
diff --git a/include/libopencm3/stm32/common/i2c_common_all.h b/include/libopencm3/stm32/common/i2c_common_all.h
index 7f6d447e..cd954cb8 100644
--- a/include/libopencm3/stm32/common/i2c_common_all.h
+++ b/include/libopencm3/stm32/common/i2c_common_all.h
@@ -23,8 +23,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA I2C.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA I2C.H
+The order of header inclusion is important. i2c.h includes the device
+specific memorymap.h header before including this header file.*/
+#if defined (LIBOPENCM3_I2C_H) || defined (LIBOPENCM3_I2C_COMMON_F24_H)
#ifndef LIBOPENCM3_I2C_COMMON_ALL_H
#define LIBOPENCM3_I2C_COMMON_ALL_H
@@ -382,6 +385,9 @@ void i2c_clear_dma_last_transfer(u32 i2c);
END_DECLS
+#endif
+#else
+#warning "i2c_common_all.h should not be included explicitly, only via i2c.h"
#endif
/**@}*/
diff --git a/include/libopencm3/stm32/common/i2c_common_f24.h b/include/libopencm3/stm32/common/i2c_common_f24.h
index c267bd85..8cb4ae7f 100644
--- a/include/libopencm3/stm32/common/i2c_common_f24.h
+++ b/include/libopencm3/stm32/common/i2c_common_f24.h
@@ -23,8 +23,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA I2C.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA I2C.H
+The order of header inclusion is important. i2c.h includes the device
+specific memorymap.h header before including this header file.*/
+#ifdef LIBOPENCM3_I2C_H
#ifndef LIBOPENCM3_I2C_COMMON_F24_H
#define LIBOPENCM3_I2C_COMMON_F24_H
@@ -37,3 +40,6 @@
/**@}*/
#endif
+#else
+#warning "i2c_common_f24.h should not be included explicitly, only via i2c.h"
+#endif
diff --git a/include/libopencm3/stm32/common/iwdg_common_all.h b/include/libopencm3/stm32/common/iwdg_common_all.h
index b75e4d14..eed4cdb9 100644
--- a/include/libopencm3/stm32/common/iwdg_common_all.h
+++ b/include/libopencm3/stm32/common/iwdg_common_all.h
@@ -22,8 +22,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA IWDG.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA IWDG.H
+The order of header inclusion is important. iwdg.h includes the device
+specific memorymap.h header before including this header file.*/
+#ifdef LIBOPENCM3_IWDG_H
#ifndef LIBOPENCM3_IWDG_COMMON_ALL_H
#define LIBOPENCM3_IWDG_COMMON_ALL_H
@@ -108,6 +111,9 @@ void iwdg_reset(void);
END_DECLS
+#endif
+#else
+#warning "iwdg_common_all.h should not be included explicitly, only via iwdg.h"
#endif
/**@}*/
diff --git a/include/libopencm3/stm32/common/pwr_common_all.h b/include/libopencm3/stm32/common/pwr_common_all.h
index a6b38d88..fd9b4224 100644
--- a/include/libopencm3/stm32/common/pwr_common_all.h
+++ b/include/libopencm3/stm32/common/pwr_common_all.h
@@ -23,8 +23,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA PWR.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA PWR.H
+The order of header inclusion is important. pwr.h includes the device
+specific memorymap.h header before including this header file.*/
+#ifdef LIBOPENCM3_PWR_H
#ifndef LIBOPENCM3_PWR_COMMON_ALL_H
#define LIBOPENCM3_PWR_COMMON_ALL_H
@@ -121,3 +124,7 @@ END_DECLS
/**@}*/
#endif
+#else
+#warning "pwr_common_all.h should not be included explicitly, only via pwr.h"
+#endif
+
diff --git a/include/libopencm3/stm32/common/rng_common_f24.h b/include/libopencm3/stm32/common/rng_common_f24.h
index 7d98bfab..4fb3745c 100644
--- a/include/libopencm3/stm32/common/rng_common_f24.h
+++ b/include/libopencm3/stm32/common/rng_common_f24.h
@@ -16,6 +16,11 @@
* along with this library. If not, see .
*/
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA RNG.H
+The order of header inclusion is important. rng.h includes the device
+specific memorymap.h header before including this header file.*/
+
+#ifdef LIBOPENCM3_RNG_H
#ifndef LIBOPENCM3_RNG_COMMON_F24_H
#define LIBOPENCM3_RNG_COMMON_F24_H
@@ -59,3 +64,7 @@
#define RNG_SR_SEIS (1 << 6)
#endif
+#else
+#warning "rng_common_f24.h should not be included explicitly, only via rng.h"
+#endif
+
diff --git a/include/libopencm3/stm32/common/rtc_common_bcd.h b/include/libopencm3/stm32/common/rtc_common_bcd.h
index 41afe3f5..791af8db 100644
--- a/include/libopencm3/stm32/common/rtc_common_bcd.h
+++ b/include/libopencm3/stm32/common/rtc_common_bcd.h
@@ -22,8 +22,6 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA RTC.H */
-
/*
* This covers the "version 2" RTC peripheral. This is completely different
* to the v1 RTC periph on the F1 series devices. It has BCD counters, with
@@ -32,6 +30,11 @@
* only support a subset.
*/
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA RTC.H
+The order of header inclusion is important. rtc.h includes the device
+specific memorymap.h header before including this header file.*/
+
+#ifdef LIBOPENCM3_RTC_H
#ifndef LIBOPENCM3_RTC2_H
#define LIBOPENCM3_RTC2_H
@@ -316,4 +319,8 @@ END_DECLS
/**@}*/
#endif /* RTC2_H */
+#else
+#warning "rtc_common_bcd.h should not be included explicitly, only via rtc.h"
+#endif
+
diff --git a/include/libopencm3/stm32/common/spi_common_all.h b/include/libopencm3/stm32/common/spi_common_all.h
index a337c371..26086f7c 100644
--- a/include/libopencm3/stm32/common/spi_common_all.h
+++ b/include/libopencm3/stm32/common/spi_common_all.h
@@ -23,8 +23,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA SPI.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA SPI.H
+The order of header inclusion is important. spi.h includes the device
+specific memorymap.h header before including this header file.*/
+#if defined (LIBOPENCM3_SPI_H) || defined (LIBOPENCM3_SPI_COMMON_F24_H)
#ifndef LIBOPENCM3_SPI_COMMON_ALL_H
#define LIBOPENCM3_SPI_COMMON_ALL_H
@@ -402,3 +405,7 @@ END_DECLS
/**@}*/
#endif
+#else
+#warning "spi_common_all.h should not be included explicitly, only via spi.h"
+#endif
+
diff --git a/include/libopencm3/stm32/common/spi_common_f24.h b/include/libopencm3/stm32/common/spi_common_f24.h
index 0a5873dd..ad901429 100644
--- a/include/libopencm3/stm32/common/spi_common_f24.h
+++ b/include/libopencm3/stm32/common/spi_common_f24.h
@@ -22,8 +22,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA SPI.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA SPI.H
+The order of header inclusion is important. spi.h includes the device
+specific memorymap.h header before including this header file.*/
+#ifdef LIBOPENCM3_SPI_H
#ifndef LIBOPENCM3_SPI_COMMON_F24_H
#define LIBOPENCM3_SPI_COMMON_F24_H
@@ -49,6 +52,9 @@
/* TIFRFE: TI frame format error */
#define SPI_SR_TIFRFE (1 << 8)
+#endif
+#else
+#warning "spi_common_f24.h should not be included explicitly, only via spi.h"
#endif
/**@}*/
diff --git a/include/libopencm3/stm32/common/usart_common_all.h b/include/libopencm3/stm32/common/usart_common_all.h
index b7ab394a..2f33942b 100644
--- a/include/libopencm3/stm32/common/usart_common_all.h
+++ b/include/libopencm3/stm32/common/usart_common_all.h
@@ -25,8 +25,11 @@
/**@{*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA SPI.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA USART.H
+The order of header inclusion is important. usart.h includes the device
+specific memorymap.h header before including this header file.*/
+#if defined (LIBOPENCM3_USART_H) || defined (LIBOPENCM3_USART_COMMON_F24_H)
#ifndef LIBOPENCM3_USART_COMMON_ALL_H
#define LIBOPENCM3_USART_COMMON_ALL_H
@@ -370,6 +373,9 @@ bool usart_get_interrupt_source(u32 usart, u32 flag);
END_DECLS
+#endif
+#else
+#warning "usart_common_all.h should not be included explicitly, only via usart.h"
#endif
/**@}*/
diff --git a/include/libopencm3/stm32/common/usart_common_f24.h b/include/libopencm3/stm32/common/usart_common_f24.h
index 301eceb7..22bb194e 100644
--- a/include/libopencm3/stm32/common/usart_common_f24.h
+++ b/include/libopencm3/stm32/common/usart_common_f24.h
@@ -24,8 +24,11 @@
* along with this library. If not, see .
*/
-/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA SPI.H */
+/* THIS FILE SHOULD NOT BE INCLUDED DIRECTLY, BUT ONLY VIA USART.H
+The order of header inclusion is important. usart.h includes the device
+specific memorymap.h header before including this header file.*/
+#ifdef LIBOPENCM3_USART_H
#ifndef LIBOPENCM3_USART_COMMON_F24_H
#define LIBOPENCM3_USART_COMMON_F24_H
@@ -69,3 +72,7 @@
#define USART_CR3_ONEBIT (1 << 11)
#endif
+#else
+#warning "usart_common_f24.h should not be included explicitly, only via usart.h"
+#endif
+
diff --git a/include/libopencm3/stm32/f2/rng.h b/include/libopencm3/stm32/f2/rng.h
index 403c7c77..2dbd5f17 100644
--- a/include/libopencm3/stm32/f2/rng.h
+++ b/include/libopencm3/stm32/f2/rng.h
@@ -15,8 +15,8 @@
* along with this library. If not, see .
*/
-#ifndef LIBOPENCM3_RNG_F2_H
-#define LIBOPENCM3_RNG_F2_H
+#ifndef LIBOPENCM3_RNG_H
+#define LIBOPENCM3_RNG_H
#include
#include
diff --git a/include/libopencm3/stm32/f4/rng.h b/include/libopencm3/stm32/f4/rng.h
index e8e6cc43..2dbd5f17 100644
--- a/include/libopencm3/stm32/f4/rng.h
+++ b/include/libopencm3/stm32/f4/rng.h
@@ -15,8 +15,8 @@
* along with this library. If not, see .
*/
-#ifndef LIBOPENCM3_RNG_F4_H
-#define LIBOPENCM3_RNG_F4_H
+#ifndef LIBOPENCM3_RNG_H
+#define LIBOPENCM3_RNG_H
#include
#include
diff --git a/lib/stm32/common/gpio_common_f24.c b/lib/stm32/common/gpio_common_f24.c
index 63c18c3f..dfa2bacd 100644
--- a/lib/stm32/common/gpio_common_f24.c
+++ b/lib/stm32/common/gpio_common_f24.c
@@ -68,7 +68,6 @@ Example 2: Digital input on port C12 with pullup
/**@{*/
-#include
#include
/*-----------------------------------------------------------------------------*/
diff --git a/lib/stm32/f1/gpio.c b/lib/stm32/f1/gpio.c
index cbb6b9d3..0cc4f5e0 100644
--- a/lib/stm32/f1/gpio.c
+++ b/lib/stm32/f1/gpio.c
@@ -73,7 +73,6 @@ LGPL License Terms @ref lgpl_license
*/
#include
-#include
/**@{*/
diff --git a/lib/stm32/f2/gpio.c b/lib/stm32/f2/gpio.c
index 370f59ba..052e306f 100644
--- a/lib/stm32/f2/gpio.c
+++ b/lib/stm32/f2/gpio.c
@@ -29,5 +29,3 @@ LGPL License Terms @ref lgpl_license
*/
#include
-#include
-
diff --git a/lib/stm32/f4/gpio.c b/lib/stm32/f4/gpio.c
index db42e8da..ea59ae79 100644
--- a/lib/stm32/f4/gpio.c
+++ b/lib/stm32/f4/gpio.c
@@ -29,5 +29,3 @@ LGPL License Terms @ref lgpl_license
*/
#include
-#include
-
diff --git a/lib/stm32/l1/gpio.c b/lib/stm32/l1/gpio.c
index fd42ba87..46ea658a 100644
--- a/lib/stm32/l1/gpio.c
+++ b/lib/stm32/l1/gpio.c
@@ -29,5 +29,3 @@ LGPL License Terms @ref lgpl_license
*/
#include
-#include
-