ciu32f003_std_gpio(3).c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /************************************************************************************************/
  2. /**
  3. * @file ciu32f003_std_gpio.c
  4. * @author MCU Ecosystem Development Team
  5. * @brief GPIO STD库驱动。
  6. * 实现GPIO初始化、去初始化等API。
  7. *
  8. *
  9. **************************************************************************************************
  10. * @attention
  11. * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
  12. *
  13. **************************************************************************************************
  14. */
  15. /************************************************************************************************/
  16. /**
  17. * @addtogroup CIU32F003_STD_Driver
  18. * @{
  19. */
  20. /**
  21. * @addtogroup GPIO
  22. * @{
  23. *
  24. */
  25. /************************************************************************************************/
  26. /*------------------------------------------includes--------------------------------------------*/
  27. #include "ciu32f003_std.h"
  28. #ifdef STD_GPIO_PERIPHERAL_USED
  29. /*-------------------------------------------functions------------------------------------------*/
  30. /************************************************************************************************/
  31. /**
  32. * @addtogroup GPIO_External_Functions
  33. * @{
  34. *
  35. */
  36. /************************************************************************************************/
  37. /**
  38. * @brief GPIO初始化
  39. * @param gpiox GPIO外设
  40. * @arg GPIOA
  41. * @arg GPIOB
  42. * @arg GPIOC
  43. * @param gpio_init_param GPIO初始化参数结构体
  44. * @retval 无
  45. */
  46. void std_gpio_init(GPIO_t* gpiox, std_gpio_init_t* gpio_init_param)
  47. {
  48. uint32_t offset = 0;
  49. uint32_t current_pin = 0;
  50. /* 遍历配置GPIO引脚 */
  51. for (; ((gpio_init_param->pin) >> offset) != 0x00U; offset++)
  52. {
  53. /* 获取当前所遍历引脚 */
  54. current_pin = (gpio_init_param->pin) & (0x00000001UL << offset);
  55. if (current_pin != 0x00U)
  56. {
  57. /* 配置模式 */
  58. std_gpio_set_pin_mode(gpiox, current_pin, gpio_init_param->mode);
  59. /* 配置上下拉 */
  60. std_gpio_set_pin_pull(gpiox, current_pin, gpio_init_param->pull);
  61. if (gpio_init_param->mode == GPIO_MODE_ALTERNATE)
  62. {
  63. /* 设置GPIO引脚(0~7)复用功能 */
  64. std_gpio_set_afpin_0_7 (gpiox, current_pin, gpio_init_param->alternate);
  65. }
  66. }
  67. }
  68. if ((gpio_init_param->mode == GPIO_MODE_OUTPUT) || (gpio_init_param->mode == GPIO_MODE_ALTERNATE))
  69. {
  70. /* 配置输出类型 */
  71. std_gpio_set_pin_output_type(gpiox, gpio_init_param->pin, gpio_init_param->output_type);
  72. }
  73. }
  74. /**
  75. * @brief GPIO去初始化
  76. * @param gpiox GPIO外设
  77. * @arg GPIOA
  78. * @arg GPIOB
  79. * @arg GPIOC
  80. * @retval 无
  81. */
  82. void std_gpio_deinit(GPIO_t* gpiox)
  83. {
  84. if(GPIOA == gpiox)
  85. {
  86. std_rcc_gpio_reset(RCC_PERIPH_RESET_GPIOA);
  87. }
  88. else if(GPIOB == gpiox)
  89. {
  90. std_rcc_gpio_reset(RCC_PERIPH_RESET_GPIOB);
  91. }
  92. else if(GPIOC == gpiox)
  93. {
  94. std_rcc_gpio_reset(RCC_PERIPH_RESET_GPIOC);
  95. }
  96. }
  97. /**
  98. * @brief GPIO初始化结构体初始化
  99. * @param gpio_init_struct GPIO初始化参数结构体
  100. * @retval 无
  101. */
  102. void std_gpio_struct_init(std_gpio_init_t* gpio_init_struct)
  103. {
  104. gpio_init_struct->pin = GPIO_PIN_0;
  105. gpio_init_struct->mode = GPIO_MODE_ANALOG;
  106. gpio_init_struct->pull = GPIO_NOPULL;
  107. gpio_init_struct->output_type = GPIO_OUTPUT_PUSHPULL;
  108. gpio_init_struct->alternate = 0U;
  109. }
  110. /**
  111. * @}
  112. */
  113. #endif /* STD_GPIO_PERIPHERAL_USED */
  114. /**
  115. * @}
  116. */
  117. /**
  118. * @}
  119. */