uart.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #include "uart.h"
  2. #include "board_cfg.h"
  3. #include "common.h"
  4. #include "gd32e23x.h"
  5. #include "Hlw8110.h"
  6. #include "stdbool.h"
  7. #define UART1_BUF_SIZE 10
  8. extern unsigned char u8_TxBuf[UART1_BUF_SIZE];
  9. extern unsigned char u8_RxBuf[UART1_BUF_SIZE];
  10. extern unsigned char u8_TX_Length;
  11. extern unsigned char u8_RX_Length;
  12. extern unsigned char u8_RX_Index;
  13. extern unsigned char B_Rx_Data_ING;
  14. extern unsigned char B_Rx_Finish;
  15. Rx_Data data={0};
  16. #define SEL_0_H gpio_bit_set(GPIOA,GPIO_PIN_6)
  17. #define SEL_0_L gpio_bit_reset(GPIOA,GPIO_PIN_6)
  18. #define SEL_1_H gpio_bit_set(GPIOA,GPIO_PIN_7)
  19. #define SEL_1_L gpio_bit_reset(GPIOA,GPIO_PIN_7)
  20. #define SEL_2_H gpio_bit_set(GPIOB,GPIO_PIN_0)
  21. #define SEL_2_L gpio_bit_reset(GPIOB,GPIO_PIN_0)
  22. void uart1_config(uint32_t bound)
  23. {
  24. nvic_irq_enable(USART1_IRQn, 2);
  25. rcu_periph_clock_enable(RCU_GPIOA);
  26. gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_2);
  27. gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_2);
  28. gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_2);
  29. gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_3);
  30. gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_3);
  31. gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_3);
  32. rcu_periph_clock_enable(RCU_USART1);
  33. usart_deinit(USART1);
  34. usart_baudrate_set(USART1, bound);
  35. usart_stop_bit_set(USART1,USART_STB_1BIT);
  36. usart_word_length_set(USART1,USART_WL_9BIT);
  37. usart_parity_config(USART1,USART_PM_EVEN);
  38. usart_receive_config(USART1, USART_RECEIVE_ENABLE);
  39. usart_transmit_config(USART1, USART_TRANSMIT_ENABLE);
  40. usart_enable(USART1);
  41. usart_interrupt_enable(USART1, USART_INT_RBNE);
  42. }
  43. void USART1_IRQHandler(void)
  44. {
  45. if(usart_flag_get(USART1, USART_FLAG_ORERR) == SET)
  46. {
  47. usart_flag_clear(USART1, USART_FLAG_ORERR);
  48. }
  49. if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_TBE)!= RESET)
  50. {
  51. usart_interrupt_flag_clear(USART1, USART_INT_FLAG_TBE);
  52. }
  53. if(usart_interrupt_flag_get(USART1, USART_INT_FLAG_RBNE) != RESET)
  54. {
  55. usart_interrupt_flag_clear(USART1, USART_INT_FLAG_RBNE);
  56. if (u8_RX_Index < u8_RX_Length )
  57. {
  58. u8_RxBuf[u8_RX_Index] = usart_data_receive(USART1);
  59. u8_RX_Index++;
  60. B_Rx_Data_ING = 1;
  61. if(u8_RX_Index == u8_RX_Length)
  62. {
  63. B_Rx_Finish = TRUE;
  64. u8_RX_Index = 0;
  65. }
  66. }
  67. }
  68. }
  69. void Awaken_Hlw8110()
  70. {
  71. usart_data_transmit(USART1, 0x55);
  72. }
  73. void Start_Send_UartData(unsigned char len)
  74. {
  75. unsigned int i;
  76. for(i=0;i<len;i++)
  77. {
  78. usart_data_transmit(USART1, (uint8_t)u8_TxBuf[i]);
  79. while(usart_flag_get(USART1, USART_FLAG_TC) == RESET);
  80. }
  81. }
  82. void ch448f_config(void)
  83. {
  84. rcu_periph_clock_enable(RCU_GPIOA);
  85. rcu_periph_clock_enable(RCU_GPIOB);
  86. gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
  87. gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
  88. gpio_bit_reset(GPIOA, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
  89. gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
  90. gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
  91. gpio_bit_reset(GPIOB, GPIO_PIN_0);
  92. }
  93. void select_channel(uint8_t chx)
  94. {
  95. switch(chx)
  96. {
  97. case 0:
  98. {
  99. SEL_0_L;
  100. SEL_1_L;
  101. SEL_2_H;
  102. }
  103. break;
  104. case 1:
  105. {
  106. SEL_0_H;
  107. SEL_1_L;
  108. SEL_2_H;
  109. }
  110. break;
  111. case 2:
  112. {
  113. SEL_0_L;
  114. SEL_1_H;
  115. SEL_2_H;
  116. }
  117. break;
  118. case 3:
  119. {
  120. SEL_0_H;
  121. SEL_1_H;
  122. SEL_2_H;
  123. }
  124. break;
  125. case 4:
  126. {
  127. SEL_0_L;
  128. SEL_1_L;
  129. SEL_2_L;
  130. }
  131. break;
  132. case 5:
  133. {
  134. SEL_0_H;
  135. SEL_1_L;
  136. SEL_2_L;
  137. }
  138. break;
  139. default:
  140. break;
  141. }
  142. }