gpio.c
上传用户:yyyd609
上传日期:2022-07-18
资源大小:183k
文件大小:3k
源码类别:

微处理器开发

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2003 STMicroelectronics ********************
  2. * File Name          : gpio.c
  3. * Author             : MCD Application Team
  4. * Date First Issued  : 06/08/2003
  5. * Description        : This file provides all the GPIO software functions
  6. ********************************************************************************
  7. * History:
  8. *  01/01/2004 : V1.2
  9. *  14/07/2004 : V1.3
  10. *******************************************************************************/
  11. #include "gpio.h"
  12. /*******************************************************************************
  13. * Function Name  : GPIO_Config
  14. * Description    : Configure the GPIO port pins
  15. * Input 1        : GPIOx (x can be 0,1 or 2) the desired port
  16. * Input 2        : Port_Pins : pins placements
  17. * Input 3        : Pins Mode
  18. * Output         : None
  19. * Return         : None
  20. *******************************************************************************/
  21. void GPIO_Config (GPIO_TypeDef *GPIOx, u16 Port_Pins, GpioPinMode_TypeDef GPIO_Mode)
  22. {
  23.   switch (GPIO_Mode)
  24.   {
  25.     case GPIO_HI_AIN_TRI:
  26.       GPIOx->PC0&=~Port_Pins;
  27.       GPIOx->PC1&=~Port_Pins;
  28.       GPIOx->PC2&=~Port_Pins;
  29.       break;
  30.     case GPIO_IN_TRI_TTL:
  31.       GPIOx->PC0|=Port_Pins;
  32.       GPIOx->PC1&=~Port_Pins;
  33.       GPIOx->PC2&=~Port_Pins;
  34.       break;
  35.     case GPIO_IN_TRI_CMOS:
  36.       GPIOx->PC0&=~Port_Pins;
  37.       GPIOx->PC1|=Port_Pins;
  38.       GPIOx->PC2&=~Port_Pins;
  39.       break;
  40.     case GPIO_INOUT_WP:
  41.       GPIOx->PC0|=Port_Pins;
  42.       GPIOx->PC1|=Port_Pins;
  43.       GPIOx->PC2&=~Port_Pins;
  44.       break;
  45.     case GPIO_OUT_OD:
  46.       GPIOx->PC0&=~Port_Pins;
  47.       GPIOx->PC1&=~Port_Pins;
  48.       GPIOx->PC2|=Port_Pins;
  49.       break;
  50.     case GPIO_OUT_PP:
  51.       GPIOx->PC0|=Port_Pins;
  52.       GPIOx->PC1&=~Port_Pins;
  53.       GPIOx->PC2|=Port_Pins;
  54.       break;
  55.     case GPIO_AF_OD:
  56.       GPIOx->PC0&=~Port_Pins;
  57.       GPIOx->PC1|=Port_Pins;
  58.       GPIOx->PC2|=Port_Pins;
  59.       break;
  60.     case GPIO_AF_PP:
  61.       GPIOx->PC0|=Port_Pins;
  62.       GPIOx->PC1|=Port_Pins;
  63.       GPIOx->PC2|=Port_Pins;
  64.       break;
  65.   }
  66. }
  67. /*******************************************************************************
  68. * Function Name  : GPIO_BitWrite
  69. * Description    : Set or reset the selected port pin
  70. * Input 1        : Selected GPIO port
  71. * Input 2        : Pin number
  72. * Input 3        : bit value
  73. * Output         : None
  74. * Return         : None
  75. *******************************************************************************/
  76. void GPIO_BitWrite(GPIO_TypeDef *GPIOx, u8 Port_Pin, u8 Port_Val)
  77. {
  78.   if (Port_Val&0x01) GPIOx->PD |= 1<<Port_Pin; else GPIOx->PD &= ~(1<<Port_Pin);
  79. }
  80. /*******************************************************************************
  81. * Function Name  : GPIO_ByteWrite
  82. * Description    : Write byte value to the selected PD register
  83. * Input 1        : Selected GPIO port
  84. * Input 2        : GPIO_MSB or GPIO_LSB
  85. * Input 3        : Byte value
  86. * Output         : None
  87. * Return         : None
  88. *******************************************************************************/
  89. void GPIO_ByteWrite(GPIO_TypeDef *GPIOx, u8 Port_Byte, u8 Port_Val)
  90. {
  91.   GPIOx->PD = Port_Byte ? (GPIOx->PD&0x00FF) | ((u16)Port_Val<<8)
  92.                         : (GPIOx->PD&0xFF00) | Port_Val;
  93. }
  94. /******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****/