Files for each peripheral (examples given for STM32 GPIO) --------------------------------------------------------- In include/libopencm3/stm32. A "dispatch" header to point to the subfamily header (gpio.h) In include/libopencm3/stm32/f* A file with defines that are specific to the subfamily, and an include of needed common header files (gpio.h). In include/libopencm3/stm32/common A file with defines common to all subfamilies. Includes the cm3 common header (gpio_common_all.h). In include/libopencm3/stm32/common May be one other file with defines common to a subgroup of devices. This includes the file common to all (gpio_common_f24.h). In lib/stm32/f* A file with functions specific to the subfamily. Includes the "dispatch" header and any common headers needed (gpio.c). In lib/stm32/common Has functions common to all subfamilies. Includes the "dispatch" header (gpio_common_all.c). In lib/stm32/common May be one other file with functions common to a group of subfamilies. Includes the "dispatch" header and the file common to all (gpio_common_f24.h). Makefiles in lib/stm32/f? have the common object files added and the common directory added to VPATH. NOTE: The common source files MUST have the "dispatch" header so that compilation will use the specific defines for the subfamily being compiled. These can differ between subfamilies. NOTE: The common source files must have a line of the form #ifdef LIBOPENCM3_xxx_H where xxx is the associated peripheral name. This prevents the common files from being included accidentally into a user's application. This however causes doxygen to skip processing of the remainder of the file. Thus a @cond ... @endcond directive must be placed around the statement to prevent doxygen from processing it. This works only for doxygen 1.8.4 or later. At the present time most distros have an earlier buggy version. Documentation ------------- In include/libopencm3/stm32/f* A file doc-stm32f*.h contains a definition of the particular family grouping. This grouping will appear in the main index of the resulting document with all documentation under it. All header files for a peripheral (common or otherwise) will subgroup under a name which is the same in all families (such as gpio_defines). The peripheral header file in include/libopencm3/stm32/f* will then include this group as a subgroup under the specific family group. Doxygen is run separately for each family so there is no danger of accidentally including the wrong stuff. Similarly for the source files for a peripheral which will subgroup under a same name (such as gpio_files). The peripheral source file in lib/stm32/f* will include this as a subgroup under the specific family group. DOXYFILE for a particular family will list the family specific and common files (headers and source) that are to be included. The result (in the long run) will be that all peripherals will appear under the same family grouping in the documentation, even if they are identical over a number of families. That is probably most useful to end users who only need to see the documentation for one family.