Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2 | Rev 9 | ||
---|---|---|---|
Line 88... | Line 88... | ||
88 | 88 | ||
89 | @endverbatim |
89 | @endverbatim |
90 | ****************************************************************************** |
90 | ****************************************************************************** |
91 | * @attention |
91 | * @attention |
92 | * |
92 | * |
93 | * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> |
93 | * <h2><center>© Copyright (c) 2016 STMicroelectronics. |
- | 94 | * All rights reserved.</center></h2> |
|
94 | * |
95 | * |
95 | * Redistribution and use in source and binary forms, with or without modification, |
96 | * This software component is licensed by ST under BSD 3-Clause license, |
96 | * are permitted provided that the following conditions are met: |
97 | * the "License"; You may not use this file except in compliance with the |
97 | * 1. Redistributions of source code must retain the above copyright notice, |
- | |
98 | * this list of conditions and the following disclaimer. |
- | |
99 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
- | |
100 | * this list of conditions and the following disclaimer in the documentation |
- | |
101 | * and/or other materials provided with the distribution. |
98 | * License. You may obtain a copy of the License at: |
102 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
- | |
103 | * may be used to endorse or promote products derived from this software |
99 | * opensource.org/licenses/BSD-3-Clause |
104 | * without specific prior written permission. |
- | |
105 | * |
- | |
106 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
- | |
107 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
- | |
108 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
- | |
109 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
- | |
110 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
- | |
111 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
- | |
112 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
- | |
113 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
- | |
114 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- | |
115 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- | |
116 | * |
100 | * |
117 | ****************************************************************************** |
101 | ****************************************************************************** |
118 | */ |
102 | */ |
119 | 103 | ||
120 | /* Includes ------------------------------------------------------------------*/ |
104 | /* Includes ------------------------------------------------------------------*/ |
Line 134... | Line 118... | ||
134 | /* Private typedef -----------------------------------------------------------*/ |
118 | /* Private typedef -----------------------------------------------------------*/ |
135 | /* Private define ------------------------------------------------------------*/ |
119 | /* Private define ------------------------------------------------------------*/ |
136 | /** @addtogroup GPIO_Private_Constants GPIO Private Constants |
120 | /** @addtogroup GPIO_Private_Constants GPIO Private Constants |
137 | * @{ |
121 | * @{ |
138 | */ |
122 | */ |
139 | #define GPIO_MODE 0x00000003U |
123 | #define GPIO_MODE 0x00000003u |
140 | #define EXTI_MODE 0x10000000U |
124 | #define EXTI_MODE 0x10000000u |
141 | #define GPIO_MODE_IT 0x00010000U |
125 | #define GPIO_MODE_IT 0x00010000u |
142 | #define GPIO_MODE_EVT 0x00020000U |
126 | #define GPIO_MODE_EVT 0x00020000u |
143 | #define RISING_EDGE 0x00100000U |
127 | #define RISING_EDGE 0x00100000u |
144 | #define FALLING_EDGE 0x00200000U |
128 | #define FALLING_EDGE 0x00200000u |
145 | #define GPIO_OUTPUT_TYPE 0x00000010U |
129 | #define GPIO_OUTPUT_TYPE 0x00000010u |
146 | 130 | ||
147 | #define GPIO_NUMBER 16U |
131 | #define GPIO_NUMBER 16u |
148 | 132 | ||
149 | /* Definitions for bit manipulation of CRL and CRH register */ |
133 | /* Definitions for bit manipulation of CRL and CRH register */ |
150 | #define GPIO_CR_MODE_INPUT 0x00000000U /*!< 00: Input mode (reset state) */ |
134 | #define GPIO_CR_MODE_INPUT 0x00000000u /*!< 00: Input mode (reset state) */ |
151 | #define GPIO_CR_CNF_ANALOG 0x00000000U /*!< 00: Analog mode */ |
135 | #define GPIO_CR_CNF_ANALOG 0x00000000u /*!< 00: Analog mode */ |
152 | #define GPIO_CR_CNF_INPUT_FLOATING 0x00000004U /*!< 01: Floating input (reset state) */ |
136 | #define GPIO_CR_CNF_INPUT_FLOATING 0x00000004u /*!< 01: Floating input (reset state) */ |
153 | #define GPIO_CR_CNF_INPUT_PU_PD 0x00000008U /*!< 10: Input with pull-up / pull-down */ |
137 | #define GPIO_CR_CNF_INPUT_PU_PD 0x00000008u /*!< 10: Input with pull-up / pull-down */ |
154 | #define GPIO_CR_CNF_GP_OUTPUT_PP 0x00000000U /*!< 00: General purpose output push-pull */ |
138 | #define GPIO_CR_CNF_GP_OUTPUT_PP 0x00000000u /*!< 00: General purpose output push-pull */ |
155 | #define GPIO_CR_CNF_GP_OUTPUT_OD 0x00000004U /*!< 01: General purpose output Open-drain */ |
139 | #define GPIO_CR_CNF_GP_OUTPUT_OD 0x00000004u /*!< 01: General purpose output Open-drain */ |
156 | #define GPIO_CR_CNF_AF_OUTPUT_PP 0x00000008U /*!< 10: Alternate function output Push-pull */ |
140 | #define GPIO_CR_CNF_AF_OUTPUT_PP 0x00000008u /*!< 10: Alternate function output Push-pull */ |
157 | #define GPIO_CR_CNF_AF_OUTPUT_OD 0x0000000CU /*!< 11: Alternate function output Open-drain */ |
141 | #define GPIO_CR_CNF_AF_OUTPUT_OD 0x0000000Cu /*!< 11: Alternate function output Open-drain */ |
158 | 142 | ||
159 | /** |
143 | /** |
160 | * @} |
144 | * @} |
161 | */ |
145 | */ |
162 | /* Private macro -------------------------------------------------------------*/ |
146 | /* Private macro -------------------------------------------------------------*/ |
Line 191... | Line 175... | ||
191 | * the configuration information for the specified GPIO peripheral. |
175 | * the configuration information for the specified GPIO peripheral. |
192 | * @retval None |
176 | * @retval None |
193 | */ |
177 | */ |
194 | void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) |
178 | void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) |
195 | { |
179 | { |
196 | uint32_t position; |
180 | uint32_t position = 0x00u; |
197 | uint32_t ioposition = 0x00U; |
181 | uint32_t ioposition; |
198 | uint32_t iocurrent = 0x00U; |
182 | uint32_t iocurrent; |
199 | uint32_t temp = 0x00U; |
183 | uint32_t temp; |
200 | uint32_t config = 0x00U; |
184 | uint32_t config = 0x00u; |
201 | __IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */ |
185 | __IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */ |
202 | uint32_t registeroffset = 0U; /* offset used during computation of CNF and MODE bits placement inside CRL or CRH register */ |
186 | uint32_t registeroffset; /* offset used during computation of CNF and MODE bits placement inside CRL or CRH register */ |
203 | 187 | ||
204 | /* Check the parameters */ |
188 | /* Check the parameters */ |
205 | assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); |
189 | assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); |
206 | assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); |
190 | assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); |
207 | assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); |
191 | assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); |
208 | 192 | ||
209 | /* Configure the port pins */ |
193 | /* Configure the port pins */ |
210 | for (position = 0U; position < GPIO_NUMBER; position++) |
194 | while (((GPIO_Init->Pin) >> position) != 0x00u) |
211 | { |
195 | { |
212 | /* Get the IO position */ |
196 | /* Get the IO position */ |
213 | ioposition = (0x01U << position); |
197 | ioposition = (0x01uL << position); |
214 | 198 | ||
215 | /* Get the current IO position */ |
199 | /* Get the current IO position */ |
216 | iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; |
200 | iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; |
217 | 201 | ||
218 | if (iocurrent == ioposition) |
202 | if (iocurrent == ioposition) |
Line 292... | Line 276... | ||
292 | } |
276 | } |
293 | 277 | ||
294 | /* Check if the current bit belongs to first half or last half of the pin count number |
278 | /* Check if the current bit belongs to first half or last half of the pin count number |
295 | in order to address CRH or CRL register*/ |
279 | in order to address CRH or CRL register*/ |
296 | configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH; |
280 | configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH; |
297 | registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2U) : ((position - 8U) << 2U); |
281 | registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u); |
298 | 282 | ||
299 | /* Apply the new configuration of the pin to the register */ |
283 | /* Apply the new configuration of the pin to the register */ |
300 | MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), (config << registeroffset)); |
284 | MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), (config << registeroffset)); |
301 | 285 | ||
302 | /*--------------------- EXTI Mode Configuration ------------------------*/ |
286 | /*--------------------- EXTI Mode Configuration ------------------------*/ |
303 | /* Configure the External Interrupt or event for the current IO */ |
287 | /* Configure the External Interrupt or event for the current IO */ |
304 | if ((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) |
288 | if ((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) |
305 | { |
289 | { |
306 | /* Enable AFIO Clock */ |
290 | /* Enable AFIO Clock */ |
307 | __HAL_RCC_AFIO_CLK_ENABLE(); |
291 | __HAL_RCC_AFIO_CLK_ENABLE(); |
308 | temp = AFIO->EXTICR[position >> 2U]; |
292 | temp = AFIO->EXTICR[position >> 2u]; |
309 | CLEAR_BIT(temp, (0x0FU) << (4U * (position & 0x03U))); |
293 | CLEAR_BIT(temp, (0x0Fu) << (4u * (position & 0x03u))); |
310 | SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U))); |
294 | SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4u * (position & 0x03u))); |
311 | AFIO->EXTICR[position >> 2U] = temp; |
295 | AFIO->EXTICR[position >> 2u] = temp; |
312 | 296 | ||
313 | 297 | ||
314 | /* Configure the interrupt mask */ |
298 | /* Configure the interrupt mask */ |
315 | if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) |
299 | if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) |
316 | { |
300 | { |
Line 350... | Line 334... | ||
350 | { |
334 | { |
351 | CLEAR_BIT(EXTI->FTSR, iocurrent); |
335 | CLEAR_BIT(EXTI->FTSR, iocurrent); |
352 | } |
336 | } |
353 | } |
337 | } |
354 | } |
338 | } |
- | 339 | ||
- | 340 | position++; |
|
355 | } |
341 | } |
356 | } |
342 | } |
357 | 343 | ||
358 | /** |
344 | /** |
359 | * @brief De-initializes the GPIOx peripheral registers to their default reset values. |
345 | * @brief De-initializes the GPIOx peripheral registers to their default reset values. |
Line 362... | Line 348... | ||
362 | * This parameter can be one of GPIO_PIN_x where x can be (0..15). |
348 | * This parameter can be one of GPIO_PIN_x where x can be (0..15). |
363 | * @retval None |
349 | * @retval None |
364 | */ |
350 | */ |
365 | void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) |
351 | void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) |
366 | { |
352 | { |
367 | uint32_t position = 0x00U; |
353 | uint32_t position = 0x00u; |
368 | uint32_t iocurrent = 0x00U; |
354 | uint32_t iocurrent; |
369 | uint32_t tmp = 0x00U; |
355 | uint32_t tmp; |
370 | __IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */ |
356 | __IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */ |
371 | uint32_t registeroffset = 0U; |
357 | uint32_t registeroffset; |
372 | 358 | ||
373 | /* Check the parameters */ |
359 | /* Check the parameters */ |
374 | assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); |
360 | assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); |
375 | assert_param(IS_GPIO_PIN(GPIO_Pin)); |
361 | assert_param(IS_GPIO_PIN(GPIO_Pin)); |
376 | 362 | ||
377 | /* Configure the port pins */ |
363 | /* Configure the port pins */ |
378 | while ((GPIO_Pin >> position) != 0U) |
364 | while ((GPIO_Pin >> position) != 0u) |
379 | { |
365 | { |
380 | /* Get current io position */ |
366 | /* Get current io position */ |
381 | iocurrent = (GPIO_Pin) & (1U << position); |
367 | iocurrent = (GPIO_Pin) & (1uL << position); |
382 | 368 | ||
383 | if (iocurrent) |
369 | if (iocurrent) |
384 | { |
370 | { |
385 | /*------------------------- GPIO Mode Configuration --------------------*/ |
- | |
386 | /* Check if the current bit belongs to first half or last half of the pin count number |
- | |
387 | in order to address CRH or CRL register */ |
- | |
388 | configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH; |
- | |
389 | registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2U) : ((position - 8U) << 2U); |
- | |
390 | - | ||
391 | /* CRL/CRH default value is floating input(0x04) shifted to correct position */ |
- | |
392 | MODIFY_REG(*configregister, ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), GPIO_CRL_CNF0_0 << registeroffset); |
- | |
393 | - | ||
394 | /* ODR default value is 0 */ |
- | |
395 | CLEAR_BIT(GPIOx->ODR, iocurrent); |
- | |
396 | - | ||
397 | /*------------------------- EXTI Mode Configuration --------------------*/ |
371 | /*------------------------- EXTI Mode Configuration --------------------*/ |
398 | /* Clear the External Interrupt or Event for the current IO */ |
372 | /* Clear the External Interrupt or Event for the current IO */ |
399 | 373 | ||
400 | tmp = AFIO->EXTICR[position >> 2U]; |
374 | tmp = AFIO->EXTICR[position >> 2u]; |
401 | tmp &= 0x0FU << (4U * (position & 0x03U)); |
375 | tmp &= 0x0FuL << (4u * (position & 0x03u)); |
402 | if (tmp == (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U)))) |
376 | if (tmp == (GPIO_GET_INDEX(GPIOx) << (4u * (position & 0x03u)))) |
403 | { |
377 | { |
404 | tmp = 0x0FU << (4U * (position & 0x03U)); |
378 | tmp = 0x0FuL << (4u * (position & 0x03u)); |
405 | CLEAR_BIT(AFIO->EXTICR[position >> 2U], tmp); |
379 | CLEAR_BIT(AFIO->EXTICR[position >> 2u], tmp); |
406 | 380 | ||
407 | /* Clear EXTI line configuration */ |
381 | /* Clear EXTI line configuration */ |
408 | CLEAR_BIT(EXTI->IMR, (uint32_t)iocurrent); |
382 | CLEAR_BIT(EXTI->IMR, (uint32_t)iocurrent); |
409 | CLEAR_BIT(EXTI->EMR, (uint32_t)iocurrent); |
383 | CLEAR_BIT(EXTI->EMR, (uint32_t)iocurrent); |
410 | 384 | ||
411 | /* Clear Rising Falling edge configuration */ |
385 | /* Clear Rising Falling edge configuration */ |
412 | CLEAR_BIT(EXTI->RTSR, (uint32_t)iocurrent); |
386 | CLEAR_BIT(EXTI->RTSR, (uint32_t)iocurrent); |
413 | CLEAR_BIT(EXTI->FTSR, (uint32_t)iocurrent); |
387 | CLEAR_BIT(EXTI->FTSR, (uint32_t)iocurrent); |
414 | } |
388 | } |
- | 389 | /*------------------------- GPIO Mode Configuration --------------------*/ |
|
- | 390 | /* Check if the current bit belongs to first half or last half of the pin count number |
|
- | 391 | in order to address CRH or CRL register */ |
|
- | 392 | configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH; |
|
- | 393 | registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u); |
|
- | 394 | ||
- | 395 | /* CRL/CRH default value is floating input(0x04) shifted to correct position */ |
|
- | 396 | MODIFY_REG(*configregister, ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), GPIO_CRL_CNF0_0 << registeroffset); |
|
- | 397 | ||
- | 398 | /* ODR default value is 0 */ |
|
- | 399 | CLEAR_BIT(GPIOx->ODR, iocurrent); |
|
415 | } |
400 | } |
416 | 401 | ||
417 | position++; |
402 | position++; |
418 | } |
403 | } |
419 | } |
404 | } |
Line 487... | Line 472... | ||
487 | { |
472 | { |
488 | GPIOx->BSRR = GPIO_Pin; |
473 | GPIOx->BSRR = GPIO_Pin; |
489 | } |
474 | } |
490 | else |
475 | else |
491 | { |
476 | { |
492 | GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U; |
477 | GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u; |
493 | } |
478 | } |
494 | } |
479 | } |
495 | 480 | ||
496 | /** |
481 | /** |
497 | * @brief Toggles the specified GPIO pin |
482 | * @brief Toggles the specified GPIO pin |
Line 499... | Line 484... | ||
499 | * @param GPIO_Pin: Specifies the pins to be toggled. |
484 | * @param GPIO_Pin: Specifies the pins to be toggled. |
500 | * @retval None |
485 | * @retval None |
501 | */ |
486 | */ |
502 | void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) |
487 | void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) |
503 | { |
488 | { |
- | 489 | uint32_t odr; |
|
- | 490 | ||
504 | /* Check the parameters */ |
491 | /* Check the parameters */ |
505 | assert_param(IS_GPIO_PIN(GPIO_Pin)); |
492 | assert_param(IS_GPIO_PIN(GPIO_Pin)); |
506 | 493 | ||
- | 494 | /* get current Ouput Data Register value */ |
|
507 | GPIOx->ODR ^= GPIO_Pin; |
495 | odr = GPIOx->ODR; |
- | 496 | ||
- | 497 | /* Set selected pins that were at low level, and reset ones that were high */ |
|
- | 498 | GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin); |
|
508 | } |
499 | } |
509 | 500 | ||
510 | /** |
501 | /** |
511 | * @brief Locks GPIO Pins configuration registers. |
502 | * @brief Locks GPIO Pins configuration registers. |
512 | * @note The locking mechanism allows the IO configuration to be frozen. When the LOCK sequence |
503 | * @note The locking mechanism allows the IO configuration to be frozen. When the LOCK sequence |
Line 531... | Line 522... | ||
531 | GPIOx->LCKR = tmp; |
522 | GPIOx->LCKR = tmp; |
532 | /* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */ |
523 | /* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */ |
533 | GPIOx->LCKR = GPIO_Pin; |
524 | GPIOx->LCKR = GPIO_Pin; |
534 | /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */ |
525 | /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */ |
535 | GPIOx->LCKR = tmp; |
526 | GPIOx->LCKR = tmp; |
536 | /* Read LCKK bit*/ |
527 | /* Read LCKK register. This read is mandatory to complete key lock sequence */ |
537 | tmp = GPIOx->LCKR; |
528 | tmp = GPIOx->LCKR; |
538 | 529 | ||
- | 530 | /* read again in order to confirm lock is active */ |
|
539 | if ((uint32_t)(GPIOx->LCKR & GPIO_LCKR_LCKK)) |
531 | if ((uint32_t)(GPIOx->LCKR & GPIO_LCKR_LCKK)) |
540 | { |
532 | { |
541 | return HAL_OK; |
533 | return HAL_OK; |
542 | } |
534 | } |
543 | else |
535 | else |
Line 552... | Line 544... | ||
552 | * @retval None |
544 | * @retval None |
553 | */ |
545 | */ |
554 | void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) |
546 | void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) |
555 | { |
547 | { |
556 | /* EXTI line interrupt detected */ |
548 | /* EXTI line interrupt detected */ |
557 | if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) |
549 | if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u) |
558 | { |
550 | { |
559 | __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); |
551 | __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); |
560 | HAL_GPIO_EXTI_Callback(GPIO_Pin); |
552 | HAL_GPIO_EXTI_Callback(GPIO_Pin); |
561 | } |
553 | } |
562 | } |
554 | } |