HAL library 1.5- GPIO for STM32Fxxx
GPIO library is second mainly used library in your project. It is designed to be very easily used for initializing GPIO pins without making sure if clock is enabled or not because this will library do for you.
It can init pin as normal or alternate with passing alternate function, it can deinit pin to set it as analog input, it can read pin, set pin and more.
Library
Features
- Initialize pins with single function clock,
- Initialize pins as alternate,
- Deinitialize pin,
- Fast set pull resistors,
- Read GPIO pin,
- Set GPIO pin,
- …
Dependencies
- HAL
- GPIO
- TM
- STM32Fxxx HAL
- defines.h
Functions and enumerations
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 |
/** * @defgroup TM_GPIO_Typedefs * @brief GPIO Typedefs used for GPIO library for initialization purposes * @{ */ /** * @brief GPIO Mode enumeration */ typedef enum { TM_GPIO_Mode_IN = 0x00, /*!< GPIO Pin as General Purpose Input */ TM_GPIO_Mode_OUT = 0x01, /*!< GPIO Pin as General Purpose Output */ TM_GPIO_Mode_AF = 0x02, /*!< GPIO Pin as Alternate Function */ TM_GPIO_Mode_AN = 0x03, /*!< GPIO Pin as Analog input/output */ } TM_GPIO_Mode_t; /** * @brief GPIO Output type enumeration */ typedef enum { TM_GPIO_OType_PP = 0x00, /*!< GPIO Output Type Push-Pull */ TM_GPIO_OType_OD = 0x01 /*!< GPIO Output Type Open-Drain */ } TM_GPIO_OType_t; /** * @brief GPIO Speed enumeration */ typedef enum { TM_GPIO_Speed_Low = 0x00, /*!< GPIO Speed Low */ TM_GPIO_Speed_Medium = 0x01, /*!< GPIO Speed Medium */ TM_GPIO_Speed_Fast = 0x02, /*!< GPIO Speed Fast, not available on STM32F0xx devices */ TM_GPIO_Speed_High = 0x03 /*!< GPIO Speed High */ } TM_GPIO_Speed_t; /** * @brief GPIO pull resistors enumeration */ typedef enum { TM_GPIO_PuPd_NOPULL = 0x00, /*!< No pull resistor */ TM_GPIO_PuPd_UP = 0x01, /*!< Pull up resistor enabled */ TM_GPIO_PuPd_DOWN = 0x02 /*!< Pull down resistor enabled */ } TM_GPIO_PuPd_t; /** * @} TM_GPIO_Typedefs */ /** * @defgroup TM_GPIO_Functions * @brief GPIO Functions * @{ */ /** * @brief Initializes GPIO pins(s) * @note This function also enables clock for GPIO port * @param GPIOx: Pointer to GPIOx port you will use for initialization * @param GPIO_Pin: GPIO pin(s) you will use for initialization * @param GPIO_Mode: Select GPIO mode. This parameter can be a value of @ref TM_GPIO_Mode_t enumeration * @param GPIO_OType: Select GPIO Output type. This parameter can be a value of @ref TM_GPIO_OType_t enumeration * @param GPIO_PuPd: Select GPIO pull resistor. This parameter can be a value of @ref TM_GPIO_PuPd_t enumeration * @param GPIO_Speed: Select GPIO speed. This parameter can be a value of @ref TM_GPIO_Speed_t enumeration * @retval None */ void TM_GPIO_Init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_Mode_t GPIO_Mode, TM_GPIO_OType_t GPIO_OType, TM_GPIO_PuPd_t GPIO_PuPd, TM_GPIO_Speed_t GPIO_Speed); /** * @brief Initializes GPIO pins(s) as alternate function * @note This function also enables clock for GPIO port * @param GPIOx: Pointer to GPIOx port you will use for initialization * @param GPIO_Pin: GPIO pin(s) you will use for initialization * @param GPIO_OType: Select GPIO Output type. This parameter can be a value of @ref TM_GPIO_OType_t enumeration * @param GPIO_PuPd: Select GPIO pull resistor. This parameter can be a value of @ref TM_GPIO_PuPd_t enumeration * @param GPIO_Speed: Select GPIO speed. This parameter can be a value of @ref TM_GPIO_Speed_t enumeration * @param Alternate: Alternate function you will use * @retval None */ void TM_GPIO_InitAlternate(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_OType_t GPIO_OType, TM_GPIO_PuPd_t GPIO_PuPd, TM_GPIO_Speed_t GPIO_Speed, uint8_t Alternate); /** * @brief Deinitializes pin(s) * @note Pins(s) will be set as analog mode to get low power consumption * @param GPIOx: GPIOx PORT where you want to set pin as input * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as input * @retval None */ void TM_GPIO_DeInit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); /** * @brief Sets pin(s) as input * @note Pins HAVE to be initialized first using @ref TM_GPIO_Init() or @ref TM_GPIO_InitAlternate() function * @note This is just an option for fast input mode * @param GPIOx: GPIOx PORT where you want to set pin as input * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as input * @retval None */ void TM_GPIO_SetPinAsInput(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); /** * @brief Sets pin(s) as output * @note Pins HAVE to be initialized first using @ref TM_GPIO_Init() or @ref TM_GPIO_InitAlternate() function * @note This is just an option for fast output mode * @param GPIOx: GPIOx PORT where you want to set pin as output * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as output * @retval None */ void TM_GPIO_SetPinAsOutput(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); /** * @brief Sets pin(s) as analog * @note Pins HAVE to be initialized first using @ref TM_GPIO_Init() or @ref TM_GPIO_InitAlternate() function * @note This is just an option for fast analog mode * @param GPIOx: GPIOx PORT where you want to set pin as analog * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as analog * @retval None */ void TM_GPIO_SetPinAsAnalog(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); /** * @brief Sets pin(s) as alternate function * @note For proper alternate function, you should first init pin using @ref TM_GPIO_InitAlternate() function. * This functions is only used for changing GPIO mode * @param GPIOx: GPIOx PORT where you want to set pin as alternate * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as alternate * @retval None */ void TM_GPIO_SetPinAsAlternate(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); /** * @brief Sets pull resistor settings to GPIO pin(s) * @note Pins HAVE to be initialized first using @ref TM_GPIO_Init() or @ref TM_GPIO_InitAlternate() function * @param *GPIOx: GPIOx PORT where you want to select pull resistor * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as output * @param GPIO_PuPd: Pull resistor option. This parameter can be a value of @ref TM_GPIO_PuPd_t enumeration * @retval None */ void TM_GPIO_SetPullResistor(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_PuPd_t GPIO_PuPd); /** * @brief Sets pin(s) low * @note Defined as macro to get maximum speed using register access * @param GPIOx: GPIOx PORT where you want to set pin low * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them low * @retval None */ #define TM_GPIO_SetPinLow(GPIOx, GPIO_Pin) ((GPIOx)->BSRR = (uint32_t)((GPIO_Pin) << 16)) /** * @brief Sets pin(s) high * @note Defined as macro to get maximum speed using register access * @param GPIOx: GPIOx PORT where you want to set pin high * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them high * @retval None */ #define TM_GPIO_SetPinHigh(GPIOx, GPIO_Pin) ((GPIOx)->BSRR = (uint32_t)(GPIO_Pin)) /** * @brief Sets pin(s) value * @note Defined as macro to get maximum speed using register access * @param GPIOx: GPIOx PORT where you want to set pin value * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them value * @param val: If parameter is 0 then pin will be low, otherwise high * @retval None */ #define TM_GPIO_SetPinValue(GPIOx, GPIO_Pin, val) ((val) ? TM_GPIO_SetPinHigh(GPIOx, GPIO_Pin) : TM_GPIO_SetPinLow(GPIOx, GPIO_Pin)) /** * @brief Toggles pin(s) * @note Defined as macro to get maximum speed using register access * @param GPIOx: GPIOx PORT where you want to toggle pin value * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to toggle them all at a time * @retval None */ #define TM_GPIO_TogglePinValue(GPIOx, GPIO_Pin) ((GPIOx)->ODR ^= (GPIO_Pin)) /** * @brief Sets value to entire GPIO PORT * @note Defined as macro to get maximum speed using register access * @param GPIOx: GPIOx PORT where you want to set value * @param value: Value for GPIO OUTPUT data * @retval None */ #define TM_GPIO_SetPortValue(GPIOx, value) ((GPIOx)->ODR = (value)) /** * @brief Gets input data bit * @note Defined as macro to get maximum speed using register access * @param GPIOx: GPIOx PORT where you want to read input bit value * @param GPIO_Pin: GPIO pin where you want to read value * @retval 1 in case pin is high, or 0 if low */ #define TM_GPIO_GetInputPinValue(GPIOx, GPIO_Pin) (((GPIOx)->IDR & (GPIO_Pin)) == 0 ? 0 : 1) /** * @brief Gets output data bit * @note Defined as macro to get maximum speed using register access * @param GPIOx: GPIOx PORT where you want to read output bit value * @param GPIO_Pin: GPIO pin where you want to read value * @retval 1 in case pin is high, or 0 if low */ #define TM_GPIO_GetOutputPinValue(GPIOx, GPIO_Pin) (((GPIOx)->ODR & (GPIO_Pin)) == 0 ? 0 : 1) /** * @brief Gets input value from entire GPIO PORT * @note Defined as macro to get maximum speed using register access * @param GPIOx: GPIOx PORT where you want to read input data value * @retval Entire PORT INPUT register */ #define TM_GPIO_GetPortInputValue(GPIOx) ((GPIOx)->IDR) /** * @brief Gets output value from entire GPIO PORT * @note Defined as macro to get maximum speed using register access * @param GPIOx: GPIOx PORT where you want to read output data value * @retval Entire PORT OUTPUT register */ #define TM_GPIO_GetPortOutputValue(GPIOx) ((GPIOx)->ODR) /** * @brief Gets port source from desired GPIOx PORT * @note Meant for private use, unless you know what are you doing * @param GPIOx: GPIO PORT for calculating port source * @retval Calculated port source for GPIO */ uint16_t TM_GPIO_GetPortSource(GPIO_TypeDef* GPIOx); /** * @brief Gets pin source from desired GPIO pin * @note Meant for private use, unless you know what are you doing * @param GPIO_Pin: GPIO pin for calculating port source * @retval Calculated pin source for GPIO pin */ uint16_t TM_GPIO_GetPinSource(uint16_t GPIO_Pin); /** * @brief Locks GPIOx register for future changes * @note You are not able to config GPIO registers until new MCU reset occurs * @param *GPIOx: GPIOx PORT where you want to lock config registers * @param GPIO_Pin: GPIO pin(s) where you want to lock config registers * @retval None */ void TM_GPIO_Lock(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); /** * @brief Gets bit separated pins which were used at least once in library and were not deinitialized * @param *GPIOx: Pointer to GPIOx peripheral where to check used GPIO pins * @retval Bit values for used pins */ uint16_t TM_GPIO_GetUsedPins(GPIO_TypeDef* GPIOx); /** * @brief Gets bit separated pins which were not used at in library or were deinitialized * @param *GPIOx: Pointer to GPIOx peripheral where to check used GPIO pins * @retval Bit values for free pins */ uint16_t TM_GPIO_GetFreePins(GPIO_TypeDef* GPIOx); /** * @} */ |
Example
For this library is example not shown because GPIO lib is used everywhere. In future libs you will be able to see example of using this library.
STM32 libraries based on STM32Fxxx HAL drivers.
Recent comments