Rev 50 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 50 | Rev 61 | ||
|---|---|---|---|
| Line 131... | Line 131... | ||
| 131 | /* Private typedef -----------------------------------------------------------*/ |
131 | /* Private typedef -----------------------------------------------------------*/ |
| 132 | /* Private define ------------------------------------------------------------*/ |
132 | /* Private define ------------------------------------------------------------*/ |
| 133 | /** @addtogroup GPIO_Private_Constants |
133 | /** @addtogroup GPIO_Private_Constants |
| 134 | * @{ |
134 | * @{ |
| 135 | */ |
135 | */ |
| 136 | #define GPIO_MODE (0x00000003U) |
- | |
| 137 | #define EXTI_MODE (0x10000000U) |
- | |
| 138 | #define GPIO_MODE_IT (0x00010000U) |
- | |
| 139 | #define GPIO_MODE_EVT (0x00020000U) |
- | |
| 140 | #define RISING_EDGE (0x00100000U) |
- | |
| 141 | #define FALLING_EDGE (0x00200000U) |
- | |
| 142 | #define GPIO_OUTPUT_TYPE (0x00000010U) |
- | |
| 143 | - | ||
| 144 | #define GPIO_NUMBER (16U) |
136 | #define GPIO_NUMBER (16U) |
| 145 | 137 | ||
| 146 | /** |
138 | /** |
| 147 | * @} |
139 | * @} |
| 148 | */ |
140 | */ |
| Line 183... | Line 175... | ||
| 183 | 175 | ||
| 184 | /* Check the parameters */ |
176 | /* Check the parameters */ |
| 185 | assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); |
177 | assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); |
| 186 | assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); |
178 | assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); |
| 187 | assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); |
179 | assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); |
| 188 | assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); |
- | |
| 189 | 180 | ||
| 190 | /* Configure the port pins */ |
181 | /* Configure the port pins */ |
| 191 | while (((GPIO_Init->Pin) >> position) != 0) |
182 | while (((GPIO_Init->Pin) >> position) != 0) |
| 192 | { |
183 | { |
| 193 | /* Get current io position */ |
184 | /* Get current io position */ |
| Line 195... | Line 186... | ||
| 195 | 186 | ||
| 196 | if (iocurrent) |
187 | if (iocurrent) |
| 197 | { |
188 | { |
| 198 | /*--------------------- GPIO Mode Configuration ------------------------*/ |
189 | /*--------------------- GPIO Mode Configuration ------------------------*/ |
| 199 | /* In case of Output or Alternate function mode selection */ |
190 | /* In case of Output or Alternate function mode selection */ |
| 200 | if ((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) || |
191 | if (((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || |
| 201 | (GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD)) |
192 | ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)) |
| 202 | { |
193 | { |
| 203 | /* Check the Speed parameter */ |
194 | /* Check the Speed parameter */ |
| 204 | assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); |
195 | assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); |
| 205 | /* Configure the IO Speed */ |
196 | /* Configure the IO Speed */ |
| 206 | temp = GPIOx->OSPEEDR; |
197 | temp = GPIOx->OSPEEDR; |
| Line 209... | Line 200... | ||
| 209 | GPIOx->OSPEEDR = temp; |
200 | GPIOx->OSPEEDR = temp; |
| 210 | 201 | ||
| 211 | /* Configure the IO Output Type */ |
202 | /* Configure the IO Output Type */ |
| 212 | temp = GPIOx->OTYPER; |
203 | temp = GPIOx->OTYPER; |
| 213 | CLEAR_BIT(temp, GPIO_OTYPER_OT_0 << position) ; |
204 | CLEAR_BIT(temp, GPIO_OTYPER_OT_0 << position) ; |
| 214 | SET_BIT(temp, ((GPIO_Init->Mode & GPIO_OUTPUT_TYPE) >> 4) << position); |
205 | SET_BIT(temp, ((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position); |
| 215 | GPIOx->OTYPER = temp; |
206 | GPIOx->OTYPER = temp; |
| 216 | } |
207 | } |
| 217 | 208 | ||
| - | 209 | if ((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG) |
|
| - | 210 | { |
|
| - | 211 | /* Check the Pull parameter */ |
|
| - | 212 | assert_param(IS_GPIO_PULL(GPIO_Init->Pull)); |
|
| - | 213 | ||
| 218 | /* Activate the Pull-up or Pull down resistor for the current IO */ |
214 | /* Activate the Pull-up or Pull down resistor for the current IO */ |
| 219 | temp = GPIOx->PUPDR; |
215 | temp = GPIOx->PUPDR; |
| 220 | CLEAR_BIT(temp, GPIO_PUPDR_PUPDR0 << (position * 2)); |
216 | CLEAR_BIT(temp, GPIO_PUPDR_PUPDR0 << (position * 2)); |
| 221 | SET_BIT(temp, (GPIO_Init->Pull) << (position * 2)); |
217 | SET_BIT(temp, (GPIO_Init->Pull) << (position * 2)); |
| 222 | GPIOx->PUPDR = temp; |
218 | GPIOx->PUPDR = temp; |
| - | 219 | } |
|
| 223 | 220 | ||
| 224 | /* In case of Alternate function mode selection */ |
221 | /* In case of Alternate function mode selection */ |
| 225 | if ((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD)) |
222 | if ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF) |
| 226 | { |
223 | { |
| 227 | /* Check the Alternate function parameters */ |
224 | /* Check the Alternate function parameters */ |
| 228 | assert_param(IS_GPIO_AF_INSTANCE(GPIOx)); |
225 | assert_param(IS_GPIO_AF_INSTANCE(GPIOx)); |
| 229 | assert_param(IS_GPIO_AF(GPIO_Init->Alternate)); |
226 | assert_param(IS_GPIO_AF(GPIO_Init->Alternate)); |
| 230 | 227 | ||
| Line 242... | Line 239... | ||
| 242 | SET_BIT(temp, (GPIO_Init->Mode & GPIO_MODE) << (position * 2)); |
239 | SET_BIT(temp, (GPIO_Init->Mode & GPIO_MODE) << (position * 2)); |
| 243 | GPIOx->MODER = temp; |
240 | GPIOx->MODER = temp; |
| 244 | 241 | ||
| 245 | /*--------------------- EXTI Mode Configuration ------------------------*/ |
242 | /*--------------------- EXTI Mode Configuration ------------------------*/ |
| 246 | /* Configure the External Interrupt or event for the current IO */ |
243 | /* Configure the External Interrupt or event for the current IO */ |
| 247 | if ((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) |
244 | if ((GPIO_Init->Mode & EXTI_MODE) != 0x00U) |
| 248 | { |
245 | { |
| 249 | /* Enable SYSCFG Clock */ |
246 | /* Enable SYSCFG Clock */ |
| 250 | __HAL_RCC_SYSCFG_CLK_ENABLE(); |
247 | __HAL_RCC_SYSCFG_CLK_ENABLE(); |
| 251 | 248 | ||
| 252 | temp = SYSCFG->EXTICR[position >> 2]; |
249 | temp = SYSCFG->EXTICR[position >> 2]; |
| Line 255... | Line 252... | ||
| 255 | SYSCFG->EXTICR[position >> 2] = temp; |
252 | SYSCFG->EXTICR[position >> 2] = temp; |
| 256 | 253 | ||
| 257 | /* Clear EXTI line configuration */ |
254 | /* Clear EXTI line configuration */ |
| 258 | temp = EXTI->IMR; |
255 | temp = EXTI->IMR; |
| 259 | CLEAR_BIT(temp, (uint32_t)iocurrent); |
256 | CLEAR_BIT(temp, (uint32_t)iocurrent); |
| 260 | if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) |
257 | if ((GPIO_Init->Mode & EXTI_IT) != 0x00U) |
| 261 | { |
258 | { |
| 262 | SET_BIT(temp, iocurrent); |
259 | SET_BIT(temp, iocurrent); |
| 263 | } |
260 | } |
| 264 | EXTI->IMR = temp; |
261 | EXTI->IMR = temp; |
| 265 | 262 | ||
| 266 | temp = EXTI->EMR; |
263 | temp = EXTI->EMR; |
| 267 | CLEAR_BIT(temp, (uint32_t)iocurrent); |
264 | CLEAR_BIT(temp, (uint32_t)iocurrent); |
| 268 | if ((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) |
265 | if ((GPIO_Init->Mode & EXTI_EVT) != 0x00U) |
| 269 | { |
266 | { |
| 270 | SET_BIT(temp, iocurrent); |
267 | SET_BIT(temp, iocurrent); |
| 271 | } |
268 | } |
| 272 | EXTI->EMR = temp; |
269 | EXTI->EMR = temp; |
| 273 | 270 | ||
| 274 | /* Clear Rising Falling edge configuration */ |
271 | /* Clear Rising Falling edge configuration */ |
| 275 | temp = EXTI->RTSR; |
272 | temp = EXTI->RTSR; |
| 276 | CLEAR_BIT(temp, (uint32_t)iocurrent); |
273 | CLEAR_BIT(temp, (uint32_t)iocurrent); |
| 277 | if ((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) |
274 | if ((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U) |
| 278 | { |
275 | { |
| 279 | SET_BIT(temp, iocurrent); |
276 | SET_BIT(temp, iocurrent); |
| 280 | } |
277 | } |
| 281 | EXTI->RTSR = temp; |
278 | EXTI->RTSR = temp; |
| 282 | 279 | ||
| 283 | temp = EXTI->FTSR; |
280 | temp = EXTI->FTSR; |
| 284 | CLEAR_BIT(temp, (uint32_t)iocurrent); |
281 | CLEAR_BIT(temp, (uint32_t)iocurrent); |
| 285 | if ((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) |
282 | if ((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U) |
| 286 | { |
283 | { |
| 287 | SET_BIT(temp, iocurrent); |
284 | SET_BIT(temp, iocurrent); |
| 288 | } |
285 | } |
| 289 | EXTI->FTSR = temp; |
286 | EXTI->FTSR = temp; |
| 290 | } |
287 | } |