2 ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.apache.org/licenses/LICENSE-2.0
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
18 * This file has been automatically generated using ChibiStudio board
19 * generator plugin. Do not edit manually.
23 #include "stm32_gpio.h"
25 /*===========================================================================*/
26 /* Driver local definitions. */
27 /*===========================================================================*/
29 /*===========================================================================*/
30 /* Driver exported variables. */
31 /*===========================================================================*/
33 /*===========================================================================*/
34 /* Driver local variables and types. */
35 /*===========================================================================*/
38 * @brief Type of STM32 GPIO port setup.
51 * @brief Type of STM32 GPIO initialization data.
54 #if STM32_HAS_GPIOA || defined(__DOXYGEN__)
57 #if STM32_HAS_GPIOB || defined(__DOXYGEN__)
60 #if STM32_HAS_GPIOC || defined(__DOXYGEN__)
63 #if STM32_HAS_GPIOD || defined(__DOXYGEN__)
66 #if STM32_HAS_GPIOE || defined(__DOXYGEN__)
69 #if STM32_HAS_GPIOF || defined(__DOXYGEN__)
72 #if STM32_HAS_GPIOG || defined(__DOXYGEN__)
75 #if STM32_HAS_GPIOH || defined(__DOXYGEN__)
78 #if STM32_HAS_GPIOI || defined(__DOXYGEN__)
81 #if STM32_HAS_GPIOJ || defined(__DOXYGEN__)
84 #if STM32_HAS_GPIOK || defined(__DOXYGEN__)
90 * @brief STM32 GPIO static initialization data.
92 static const gpio_config_t gpio_default_config
= {
94 {VAL_GPIOA_MODER
, VAL_GPIOA_OTYPER
, VAL_GPIOA_OSPEEDR
, VAL_GPIOA_PUPDR
, VAL_GPIOA_ODR
, VAL_GPIOA_AFRL
, VAL_GPIOA_AFRH
},
97 {VAL_GPIOB_MODER
, VAL_GPIOB_OTYPER
, VAL_GPIOB_OSPEEDR
, VAL_GPIOB_PUPDR
, VAL_GPIOB_ODR
, VAL_GPIOB_AFRL
, VAL_GPIOB_AFRH
},
100 {VAL_GPIOC_MODER
, VAL_GPIOC_OTYPER
, VAL_GPIOC_OSPEEDR
, VAL_GPIOC_PUPDR
, VAL_GPIOC_ODR
, VAL_GPIOC_AFRL
, VAL_GPIOC_AFRH
},
103 {VAL_GPIOD_MODER
, VAL_GPIOD_OTYPER
, VAL_GPIOD_OSPEEDR
, VAL_GPIOD_PUPDR
, VAL_GPIOD_ODR
, VAL_GPIOD_AFRL
, VAL_GPIOD_AFRH
},
106 {VAL_GPIOE_MODER
, VAL_GPIOE_OTYPER
, VAL_GPIOE_OSPEEDR
, VAL_GPIOE_PUPDR
, VAL_GPIOE_ODR
, VAL_GPIOE_AFRL
, VAL_GPIOE_AFRH
},
109 {VAL_GPIOF_MODER
, VAL_GPIOF_OTYPER
, VAL_GPIOF_OSPEEDR
, VAL_GPIOF_PUPDR
, VAL_GPIOF_ODR
, VAL_GPIOF_AFRL
, VAL_GPIOF_AFRH
},
112 {VAL_GPIOG_MODER
, VAL_GPIOG_OTYPER
, VAL_GPIOG_OSPEEDR
, VAL_GPIOG_PUPDR
, VAL_GPIOG_ODR
, VAL_GPIOG_AFRL
, VAL_GPIOG_AFRH
},
115 {VAL_GPIOH_MODER
, VAL_GPIOH_OTYPER
, VAL_GPIOH_OSPEEDR
, VAL_GPIOH_PUPDR
, VAL_GPIOH_ODR
, VAL_GPIOH_AFRL
, VAL_GPIOH_AFRH
},
118 {VAL_GPIOI_MODER
, VAL_GPIOI_OTYPER
, VAL_GPIOI_OSPEEDR
, VAL_GPIOI_PUPDR
, VAL_GPIOI_ODR
, VAL_GPIOI_AFRL
, VAL_GPIOI_AFRH
},
121 {VAL_GPIOJ_MODER
, VAL_GPIOJ_OTYPER
, VAL_GPIOJ_OSPEEDR
, VAL_GPIOJ_PUPDR
, VAL_GPIOJ_ODR
, VAL_GPIOJ_AFRL
, VAL_GPIOJ_AFRH
},
124 {VAL_GPIOK_MODER
, VAL_GPIOK_OTYPER
, VAL_GPIOK_OSPEEDR
, VAL_GPIOK_PUPDR
, VAL_GPIOK_ODR
, VAL_GPIOK_AFRL
, VAL_GPIOK_AFRH
}
128 /*===========================================================================*/
129 /* Driver local functions. */
130 /*===========================================================================*/
132 static void gpio_init(stm32_gpio_t
*gpiop
, const gpio_setup_t
*config
) {
133 gpiop
->OTYPER
= config
->otyper
;
134 gpiop
->OSPEEDR
= config
->ospeedr
;
135 gpiop
->PUPDR
= config
->pupdr
;
136 gpiop
->ODR
= config
->odr
;
137 gpiop
->AFRL
= config
->afrl
;
138 gpiop
->AFRH
= config
->afrh
;
139 gpiop
->MODER
= config
->moder
;
142 static void stm32_gpio_init(void) {
143 /* Enabling GPIO-related clocks, the mask comes from the
144 registry header file.*/
145 rccResetAHB(STM32_GPIO_EN_MASK
);
146 rccEnableAHB(STM32_GPIO_EN_MASK
, true);
148 /* Initializing all the defined GPIO ports.*/
150 gpio_init(GPIOA
, &gpio_default_config
.PAData
);
153 gpio_init(GPIOB
, &gpio_default_config
.PBData
);
156 gpio_init(GPIOC
, &gpio_default_config
.PCData
);
159 gpio_init(GPIOD
, &gpio_default_config
.PDData
);
162 gpio_init(GPIOE
, &gpio_default_config
.PEData
);
165 gpio_init(GPIOF
, &gpio_default_config
.PFData
);
168 gpio_init(GPIOG
, &gpio_default_config
.PGData
);
171 gpio_init(GPIOH
, &gpio_default_config
.PHData
);
174 gpio_init(GPIOI
, &gpio_default_config
.PIData
);
177 gpio_init(GPIOJ
, &gpio_default_config
.PJData
);
180 gpio_init(GPIOK
, &gpio_default_config
.PKData
);
184 /*===========================================================================*/
185 /* Driver interrupt handlers. */
186 /*===========================================================================*/
188 /*===========================================================================*/
189 /* Driver exported functions. */
190 /*===========================================================================*/
192 __attribute__((weak
)) void enter_bootloader_mode_if_requested(void) {}
195 * @brief Early initialization code.
196 * @details GPIO ports and system clocks are initialized before everything
199 void __early_init(void) {
200 enter_bootloader_mode_if_requested();
206 #if HAL_USE_SDC || defined(__DOXYGEN__)
208 * @brief SDC card detection.
210 bool sdc_lld_is_card_inserted(SDCDriver
*sdcp
) {
212 /* TODO: Fill the implementation.*/
217 * @brief SDC card write protection detection.
219 bool sdc_lld_is_write_protected(SDCDriver
*sdcp
) {
221 /* TODO: Fill the implementation.*/
224 #endif /* HAL_USE_SDC */
226 #if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
228 * @brief MMC_SPI card detection.
230 bool mmc_lld_is_card_inserted(MMCDriver
*mmcp
) {
232 /* TODO: Fill the implementation.*/
237 * @brief MMC_SPI card write protection detection.
239 bool mmc_lld_is_write_protected(MMCDriver
*mmcp
) {
241 /* TODO: Fill the implementation.*/
247 * @brief Board-specific initialization code.
248 * @todo Add your board-specific code, if any.
250 void boardInit(void) {}