STM32G474xx HAL用户手册
stm32g4xx_ll_gpio.c
跳转到本文件的相关文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_ll_gpio.c
00004   * @author  MCD Application Team
00005   * @brief   GPIO LL模块驱动程序。
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2019 STMicroelectronics.
00010   * 保留所有权利。
00011   *
00012   * 本软件根据LICENSE文件中规定的条款进行许可。
00013   * 如果本软件不包含LICENSE文件,则按原样提供。
00014   *
00015   ******************************************************************************
00016   */
00017 #if defined(USE_FULL_LL_DRIVER)
00018 
00019 /* 头文件包含 ------------------------------------------------------------------*/
00020 #include "stm32g4xx_ll_gpio.h"
00021 #include "stm32g4xx_ll_bus.h"
00022 #ifdef  USE_FULL_ASSERT
00023 #include "stm32_assert.h"
00024 #else
00025 #define assert_param(expr) ((void)0U)
00026 #endif /* USE_FULL_ASSERT */
00027 
00028 /** @addtogroup STM32G4xx_LL_Driver
00029   * @{
00030   */
00031 
00032 #if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG)
00033 
00034 /** @addtogroup GPIO_LL
00035   * @{
00036   */
00037 /** 已针对以下规则授予MISRA C:2012偏差规则:
00038   * Rule-12.2 - 中等:右侧操作数在区间[0,INF]内,超出了
00039   * 以下API中移位运算符的范围:
00040   * LL_GPIO_Init
00041   */
00042 
00043 /* 私有类型定义 -------------------------------------------------------------*/
00044 /* 私有变量 -----------------------------------------------------------------*/
00045 /* 私有常量 -----------------------------------------------------------------*/
00046 /* 私有宏定义 --------------------------------------------------------------*/
00047 /** @addtogroup GPIO_LL_Private_Macros
00048   * @{
00049   */
00050 #define IS_LL_GPIO_PIN(__VALUE__)          (((0x00000000U) < (__VALUE__)) && ((__VALUE__) <= (LL_GPIO_PIN_ALL)))
00051 
00052 #define IS_LL_GPIO_MODE(__VALUE__)         (((__VALUE__) == LL_GPIO_MODE_INPUT)     ||\
00053                                             ((__VALUE__) == LL_GPIO_MODE_OUTPUT)    ||\
00054                                             ((__VALUE__) == LL_GPIO_MODE_ALTERNATE) ||\
00055                                             ((__VALUE__) == LL_GPIO_MODE_ANALOG))
00056 
00057 #define IS_LL_GPIO_OUTPUT_TYPE(__VALUE__)  (((__VALUE__) == LL_GPIO_OUTPUT_PUSHPULL)  ||\
00058                                             ((__VALUE__) == LL_GPIO_OUTPUT_OPENDRAIN))
00059 
00060 #define IS_LL_GPIO_SPEED(__VALUE__)        (((__VALUE__) == LL_GPIO_SPEED_FREQ_LOW)       ||\
00061                                             ((__VALUE__) == LL_GPIO_SPEED_FREQ_MEDIUM)    ||\
00062                                             ((__VALUE__) == LL_GPIO_SPEED_FREQ_HIGH)      ||\
00063                                             ((__VALUE__) == LL_GPIO_SPEED_FREQ_VERY_HIGH))
00064 
00065 #define IS_LL_GPIO_PULL(__VALUE__)         (((__VALUE__) == LL_GPIO_PULL_NO)   ||\
00066                                             ((__VALUE__) == LL_GPIO_PULL_UP)   ||\
00067                                             ((__VALUE__) == LL_GPIO_PULL_DOWN))
00068 
00069 #define IS_LL_GPIO_ALTERNATE(__VALUE__)    (((__VALUE__) == LL_GPIO_AF_0  )   ||\
00070                                             ((__VALUE__) == LL_GPIO_AF_1  )   ||\
00071                                             ((__VALUE__) == LL_GPIO_AF_2  )   ||\
00072                                             ((__VALUE__) == LL_GPIO_AF_3  )   ||\
00073                                             ((__VALUE__) == LL_GPIO_AF_4  )   ||\
00074                                             ((__VALUE__) == LL_GPIO_AF_5  )   ||\
00075                                             ((__VALUE__) == LL_GPIO_AF_6  )   ||\
00076                                             ((__VALUE__) == LL_GPIO_AF_7  )   ||\
00077                                             ((__VALUE__) == LL_GPIO_AF_8  )   ||\
00078                                             ((__VALUE__) == LL_GPIO_AF_9  )   ||\
00079                                             ((__VALUE__) == LL_GPIO_AF_10 )   ||\
00080                                             ((__VALUE__) == LL_GPIO_AF_11 )   ||\
00081                                             ((__VALUE__) == LL_GPIO_AF_12 )   ||\
00082                                             ((__VALUE__) == LL_GPIO_AF_13 )   ||\
00083                                             ((__VALUE__) == LL_GPIO_AF_14 )   ||\
00084                                             ((__VALUE__) == LL_GPIO_AF_15 ))
00085 /**
00086   * @}
00087   */
00088 
00089 /* 私有函数原型 -------------------------------------------------------------*/
00090 
00091 /* 导出函数 -----------------------------------------------------------------*/
00092 /** @addtogroup GPIO_LL_Exported_Functions
00093   * @{
00094   */
00095 
00096 /** @addtogroup GPIO_LL_EF_Init
00097   * @{
00098   */
00099 
00100 /**
00101   * @brief  反初始化GPIO寄存器(寄存器恢复为默认值)。
00102   * @param  GPIOx GPIO端口
00103   * @retval ErrorStatus枚举值:
00104   *          - SUCCESS:GPIO寄存器已反初始化
00105   *          - ERROR:  错误的GPIO端口
00106   */
00107 
00108 ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx)
00109 {
00110   ErrorStatus status = SUCCESS;
00111 
00112   /* 检查参数 */
00113   assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
00114 
00115   /* 强制并释放GPIOx端口时钟复位 */
00116   if (GPIOx == GPIOA)
00117   {
00118     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_GPIOA);
00119     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_GPIOA);
00120   }
00121   else if (GPIOx == GPIOB)
00122   {
00123     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_GPIOB);
00124     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_GPIOB);
00125   }
00126   else if (GPIOx == GPIOC)
00127   {
00128     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_GPIOC);
00129     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_GPIOC);
00130   }
00131   else if (GPIOx == GPIOD)
00132   {
00133     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_GPIOD);
00134     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_GPIOD);
00135   }
00136   else if (GPIOx == GPIOE)
00137   {
00138     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_GPIOE);
00139     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_GPIOE);
00140   }
00141   else if (GPIOx == GPIOF)
00142   {
00143     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_GPIOF);
00144     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_GPIOF);
00145   }
00146   else if (GPIOx == GPIOG)
00147   {
00148     LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_GPIOG);
00149     LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_GPIOG);
00150   }
00151   else
00152