Relay.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "Relay.h"
  2. #include "gd32e230x_conf.h"
  3. static void ConfigRelayGPIO(void); //配置Relay的GPIO
  4. static void ConfigRelayGPIO(void)
  5. {
  6. #if (RelaySlaveChaNum == 6)
  7. rcu_periph_clock_enable(RELAY_1_RCU); // gpioA
  8. rcu_periph_clock_enable(RELAY_2_6_RCU); // gpioB
  9. gpio_mode_set(RELAY_1_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_1);
  10. gpio_output_options_set(RELAY_1_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_1);
  11. gpio_bit_reset(RELAY_1_IO, RELAY_1);
  12. gpio_mode_set(RELAY_2_6_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_2);
  13. gpio_output_options_set(RELAY_2_6_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_2);
  14. gpio_bit_reset(RELAY_2_6_IO, RELAY_2);
  15. gpio_mode_set(RELAY_2_6_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_3);
  16. gpio_output_options_set(RELAY_2_6_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_3);
  17. gpio_bit_reset(RELAY_2_6_IO, RELAY_3);
  18. gpio_mode_set(RELAY_2_6_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_4);
  19. gpio_output_options_set(RELAY_2_6_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_4);
  20. gpio_bit_reset(RELAY_2_6_IO, RELAY_4);
  21. gpio_mode_set(RELAY_2_6_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_5);
  22. gpio_output_options_set(RELAY_2_6_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_5);
  23. gpio_bit_reset(RELAY_2_6_IO, RELAY_5);
  24. gpio_mode_set(RELAY_2_6_IO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_6);
  25. gpio_output_options_set(RELAY_2_6_IO, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_6);
  26. gpio_bit_reset(RELAY_2_6_IO, RELAY_6);
  27. #elif ((RelaySlaveChaNum <= 4) && !(SUPPORT_TWIN_FIRE))
  28. //使能RCU相关时钟
  29. rcu_periph_clock_enable(RCU_GPIOA); //使能GPIOA的时钟
  30. gpio_mode_set(RELAY_1_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_1); //设置GPIO模式
  31. gpio_output_options_set(RELAY_1_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_1); //设置GPIO输出模式及速度
  32. gpio_bit_reset(RELAY_1_RCU, RELAY_1); //将Relay_1默认状态设置为关闭
  33. //使能RCU相关时钟
  34. rcu_periph_clock_enable(RCU_GPIOB); //使能GPIOB的时钟
  35. gpio_mode_set(RELAY_2_4_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_2); //设置GPIO模式
  36. gpio_output_options_set(RELAY_2_4_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_2); //设置GPIO输出模式及速度
  37. gpio_bit_reset(RELAY_2_4_RCU, RELAY_2); //将Relay_2默认状态设置为关闭
  38. gpio_mode_set(RELAY_2_4_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_3); //设置GPIO模式
  39. gpio_output_options_set(RELAY_2_4_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_3); //设置GPIO输出模式及速度
  40. gpio_bit_reset(RELAY_2_4_RCU, RELAY_3); //将Relay_3默认状态设置为关闭
  41. gpio_mode_set(RELAY_2_4_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_4); //设置GPIO模式
  42. gpio_output_options_set(RELAY_2_4_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_4); //设置GPIO输出模式及速度
  43. gpio_bit_reset(RELAY_2_4_RCU, RELAY_4); //将Relay_4默认状态设置为关闭
  44. #else
  45. //使能RCU相关时钟
  46. rcu_periph_clock_enable(RCU_GPIOA); //使能GPIOA的时钟
  47. //使能RCU相关时钟
  48. rcu_periph_clock_enable(RCU_GPIOB);
  49. gpio_mode_set(RELAY_2_8_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_8); //设置GPIO模式
  50. gpio_output_options_set(RELAY_2_8_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_8); //设置GPIO输出模式及速度
  51. gpio_bit_reset(RELAY_2_8_RCU, RELAY_8); //将Relay_8默认状态设置为关闭
  52. //使能GPIOA的时钟
  53. gpio_mode_set(RELAY_1_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_1); //设置GPIO模式
  54. gpio_output_options_set(RELAY_1_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_1); //设置GPIO输出模式及速度
  55. gpio_bit_reset(RELAY_1_RCU, RELAY_1); //将Relay_1默认状态设置为关闭
  56. gpio_mode_set(RELAY_2_8_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_2); //设置GPIO模式
  57. gpio_output_options_set(RELAY_2_8_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_2); //设置GPIO输出模式及速度
  58. gpio_bit_reset(RELAY_2_8_RCU, RELAY_2); //将Relay_2默认状态设置为关闭
  59. gpio_mode_set(RELAY_2_8_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_3); //设置GPIO模式
  60. gpio_output_options_set(RELAY_2_8_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_3); //设置GPIO输出模式及速度
  61. gpio_bit_reset(RELAY_2_8_RCU, RELAY_3); //将Relay_3默认状态设置为关闭
  62. gpio_mode_set(RELAY_2_8_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_4); //设置GPIO模式
  63. gpio_output_options_set(RELAY_2_8_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_4); //设置GPIO输出模式及速度
  64. gpio_bit_reset(RELAY_2_8_RCU, RELAY_4); //将Relay_4默认状态设置为关闭
  65. gpio_mode_set(RELAY_2_8_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_5); //设置GPIO模式
  66. gpio_output_options_set(RELAY_2_8_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_5); //设置GPIO输出模式及速度
  67. gpio_bit_reset(RELAY_2_8_RCU, RELAY_5); //将Relay_5默认状态设置为关闭
  68. gpio_mode_set(RELAY_2_8_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_6); //设置GPIO模式
  69. gpio_output_options_set(RELAY_2_8_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_6); //设置GPIO输出模式及速度
  70. gpio_bit_reset(RELAY_2_8_RCU, RELAY_6); //将Relay_6默认状态设置为关闭
  71. gpio_mode_set(RELAY_2_8_RCU, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_7); //设置GPIO模式
  72. gpio_output_options_set(RELAY_2_8_RCU, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_7); //设置GPIO输出模式及速度
  73. gpio_bit_reset(RELAY_2_8_RCU, RELAY_7); //将Relay_7默认状态设置为关闭
  74. #endif
  75. }
  76. /*********************************************************************************************************
  77. * 函数名称:InitRelay
  78. * 函数功能:初始化LED模块
  79. * 输入参数:void
  80. * 输出参数:void
  81. * 返 回 值:void
  82. * 创建日期:2021年07月01日
  83. * 注 意:
  84. *********************************************************************************************************/
  85. void InitRelay(void)
  86. {
  87. ConfigRelayGPIO();
  88. }
  89. #if SURPPORT_2_2
  90. void solid_on()
  91. {
  92. gpio_bit_set(RELAY_2_4_RCU, RELAY_3);
  93. gpio_bit_set(RELAY_2_4_RCU, RELAY_4);
  94. }
  95. #endif