你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

NUCLEO_L552ZE_Q+GPIO HAL模块文件(第四篇)

[复制链接]
qbwww 发布时间:2020-3-22 22:02
今天仔细研究了GPIO HAL模块,看看他的定义是什么意思,发出来给大家看一看,希望对大家有一定的帮助。

  1. /*GPIO初始化结构定义*/
  2. typedef struct
  3. {
  4. uint32_t Pin;/*指定要配置的GPIO引脚。此参数可以是GPIO_pins的任何值*/

  5. uint32_t Mode;/*指定所选引脚的操作模式。此参数可以是GPIO_mode的值*/

  6. uint32_t Pull;/*指定所选引脚的上拉或下拉激活。此参数可以是GPIO_pull的值*/

  7. uint32_t Speed;/*指定选定引脚的速度。此参数可以是GPIO_speed的值*/

  8. uint32_t Alternate;/*要连接到选定引脚的外围设备此参数可以是GPIOEx_Alternate_function_selection的值*/
  9. }GPIO_InitTypeDef;

  10. /*GPIO位设置和位RESET枚举*/
  11. typedef enum
  12. {
  13.   GPIO_PIN_RESET = 0U,
  14.   GPIO_PIN_SET
  15. } GPIO_PinState;

  16. /*GPIO引脚*/
  17. #define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
  18. #define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
  19. #define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
  20. #define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */
  21. #define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
  22. #define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
  23. #define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
  24. #define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
  25. #define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
  26. #define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
  27. #define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
  28. #define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
  29. #define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
  30. #define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
  31. #define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
  32. #define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
  33. #define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* 选择所有引脚 */

  34. #define GPIO_PIN_MASK              (0x0000FFFFU)/*用于断言测试的PIN掩码*/

  35. /*
  36. *GPIO配置模式
  37. *        元素值约定:0xX0yz00YZ
  38. *                -X:GPIO模式或EXTI模式
  39. *                -y:外部IT或事件触发检测
  40. *                -z:外部IT或事件上的IO配置
  41. *                -Y:输出类型(推挽或漏极开路)
  42. *                -Z:IO方向模式(输入,输出,备用或模拟)
  43. */
  44. #define  GPIO_MODE_INPUT                        (0x00000000U)   /*输入浮动模式*/
  45. #define  GPIO_MODE_OUTPUT_PP                    (0x00000001U)   /*输出推挽模式*/
  46. #define  GPIO_MODE_OUTPUT_OD                    (0x00000011U)   /*输出漏极开路模式*/
  47. #define  GPIO_MODE_AF_PP                        (0x00000002U)   /*备用功能推拉模式*/
  48. #define  GPIO_MODE_AF_OD                        (0x00000012U)   /*替代功能开漏模式*/
  49. #define  GPIO_MODE_ANALOG                       (0x00000003U)   /*模拟模式*/
  50. #define  GPIO_MODE_IT_RISING                    (0x10110000U)   /*具有上升沿触发检测的外部中断模式*/
  51. #define  GPIO_MODE_IT_FALLING                   (0x10210000U)  /*具有下降沿触发检测的外部中断模式*/
  52. #define  GPIO_MODE_IT_RISING_FALLING            (0x10310000U)  /*具有上升沿/下降沿触发检测的外部中断模式*/
  53. #define  GPIO_MODE_EVT_RISING                   (0x10120000U)   /*具有上升沿触发检测的外部事件模式*/
  54. #define  GPIO_MODE_EVT_FALLING                  (0x10220000U)   /*具有下降沿触发检测的外部事件模式*/
  55. #define  GPIO_MODE_EVT_RISING_FALLING           (0x10320000U)   /*具有上升沿/下降沿触发检测的外部事件模式*/


  56. /*
  57. *GPIO输出最大频率
  58. */
  59. #define  GPIO_SPEED_FREQ_LOW        (0x00000000U)   /*范围最高5MHz*/
  60. #define  GPIO_SPEED_FREQ_MEDIUM     (0x00000001U)   /*范围5MHz至25MHz*/
  61. #define  GPIO_SPEED_FREQ_HIGH       (0x00000002U)   /*范围25MHz至50MHz*/
  62. #define  GPIO_SPEED_FREQ_VERY_HIGH  (0x00000003U)  /*范围50MHz至80MHz*/

  63. /*
  64. *GPIO上拉或下拉激活
  65. */
  66. #define  GPIO_NOPULL        (0x00000000U)   /*无上拉或下拉激活*/
  67. #define  GPIO_PULLUP        (0x00000001U)   /*上拉激活*/
  68. #define  GPIO_PULLDOWN      (0x00000002U)   /*下拉激活*/


  69. /*
  70. GPIO引脚安全或非安全属性
  71. */
  72. #define  GPIO_PIN_SEC       (0x00000001U)  /*安全引脚属性*/
  73. #define  GPIO_PIN_NSEC      (0x00000000U)  /*非安全引脚属性*/



  74. /**
  75. *检查指定的EXTI行是否声明了上升沿。
  76. */
  77. #define __HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__)         (EXTI->RPR1 & (__EXTI_LINE__))

  78. /**
  79. *清除EXTI行上升的挂起位。
  80. */
  81. #define __HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__)       (EXTI->RPR1 = (__EXTI_LINE__))

  82. /**
  83. *检查指定的EXTI行是否已声明下降沿。
  84. */
  85. #define __HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__)        (EXTI->FPR1 & (__EXTI_LINE__))

  86. /**
  87. *清除EXTI行下降的挂起位。
  88. */
  89. #define __HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__)      (EXTI->FPR1 = (__EXTI_LINE__))

  90. /**
  91. *检查指定的EXTI行是否有效。
  92. */
  93. #define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__)         (__HAL_GPIO_EXTI_GET_RISING_IT(__EXTI_LINE__) || \
  94.                                                        __HAL_GPIO_EXTI_GET_FALLING_IT(__EXTI_LINE__))

  95. /**
  96. *清除EXTI行暂挂位。
  97. */
  98. #define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__)         \
  99.   do {                                                  \
  100.     __HAL_GPIO_EXTI_CLEAR_RISING_IT(__EXTI_LINE__);     \
  101.     __HAL_GPIO_EXTI_CLEAR_FALLING_IT(__EXTI_LINE__);    \
  102.   } while(0)


  103. /**
  104. *在选定的EXTI行上生成软件中断。
  105. */
  106. #define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__)  (EXTI->SWIER1 = (__EXTI_LINE__))

  107. /**
  108. *检查是否设置了指定的EXTI行标志。
  109. */
  110. #define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__)       __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__)

  111. /**
  112. *清除EXTI行挂起标志。
  113. */
  114. #define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__)     __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__)


  115. /*私有宏------------------------------------------------------------*/

  116. #define IS_GPIO_PIN_ACTION(ACTION)  (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))

  117. #define IS_GPIO_PIN(__PIN__)        ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U) &&\
  118.                                      (((uint32_t)(__PIN__) & ~GPIO_PIN_MASK) == 0x00U))

  119. #define IS_GPIO_MODE(__MODE__)      (((__MODE__) == GPIO_MODE_INPUT)              ||\
  120.                                      ((__MODE__) == GPIO_MODE_OUTPUT_PP)          ||\
  121.                                      ((__MODE__) == GPIO_MODE_OUTPUT_OD)          ||\
  122.                                      ((__MODE__) == GPIO_MODE_AF_PP)              ||\
  123.                                      ((__MODE__) == GPIO_MODE_AF_OD)              ||\
  124.                                      ((__MODE__) == GPIO_MODE_IT_RISING)          ||\
  125.                                      ((__MODE__) == GPIO_MODE_IT_FALLING)         ||\
  126.                                      ((__MODE__) == GPIO_MODE_IT_RISING_FALLING)  ||\
  127.                                      ((__MODE__) == GPIO_MODE_EVT_RISING)         ||\
  128.                                      ((__MODE__) == GPIO_MODE_EVT_FALLING)        ||\
  129.                                      ((__MODE__) == GPIO_MODE_EVT_RISING_FALLING) ||\
  130.                                      ((__MODE__) == GPIO_MODE_ANALOG))

  131. #define IS_GPIO_SPEED(__SPEED__)    (((__SPEED__) == GPIO_SPEED_FREQ_LOW)    ||\
  132.                                      ((__SPEED__) == GPIO_SPEED_FREQ_MEDIUM) ||\
  133.                                      ((__SPEED__) == GPIO_SPEED_FREQ_HIGH)   ||\
  134.                                      ((__SPEED__) == GPIO_SPEED_FREQ_VERY_HIGH))

  135. #define IS_GPIO_PULL(__PULL__)      (((__PULL__) == GPIO_NOPULL)   ||\
  136.                                      ((__PULL__) == GPIO_PULLUP)   || \
  137.                                      ((__PULL__) == GPIO_PULLDOWN))

  138. #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)

  139. #define IS_GPIO_PIN_ATTRIBUTES(__ATTRIBUTES__)  (((__ATTRIBUTES__) == GPIO_PIN_SEC)  ||\
  140.                                                  ((__ATTRIBUTES__) == GPIO_PIN_NSEC))

  141. #endif /* __ARM_FEATURE_CMSE */




  142. /*初始化和取消初始化功能*****************************/
  143. void              HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);
  144. void              HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);


  145. /*IO操作功能*****************************************************/
  146. GPIO_PinState     HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
  147. void              HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
  148. void              HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
  149. HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
  150. void              HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
  151. void              HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin);
  152. void              HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin);



  153. /*IO属性管理功能*********************************************/
  154. void              HAL_GPIO_ConfigPinAttributes(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint32_t PinAttributes);
  155. HAL_StatusTypeDef HAL_GPIO_GetConfigPinAttributes(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint32_t *pPinAttributes);

复制代码





收藏 评论0 发布时间:2020-3-22 22:02

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版