uart.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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 Start_Send_UartData(unsigned char len)
  70. {
  71. unsigned int i;
  72. for(i=0;i<len;i++)
  73. {
  74. usart_data_transmit(USART1, (uint8_t)u8_TxBuf[i]);
  75. while(usart_flag_get(USART1, USART_FLAG_TC) == RESET);
  76. }
  77. }
  78. void ch448f_config(void)
  79. {
  80. rcu_periph_clock_enable(RCU_GPIOA);
  81. rcu_periph_clock_enable(RCU_GPIOB);
  82. gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
  83. gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
  84. gpio_bit_reset(GPIOA, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
  85. gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
  86. gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
  87. gpio_bit_reset(GPIOB, GPIO_PIN_0);
  88. }
  89. void select_channel(uint8_t chx)
  90. {
  91. switch(chx)
  92. {
  93. case 0:
  94. {
  95. SEL_0_L;
  96. SEL_1_L;
  97. SEL_2_L;
  98. }
  99. break;
  100. case 1:
  101. {
  102. SEL_0_H;
  103. SEL_1_L;
  104. SEL_2_L;
  105. }
  106. break;
  107. case 2:
  108. {
  109. SEL_0_L;
  110. SEL_1_H;
  111. SEL_2_L;
  112. }
  113. break;
  114. case 3:
  115. {
  116. SEL_0_H;
  117. SEL_1_H;
  118. SEL_2_L;
  119. }
  120. break;
  121. case 4:
  122. {
  123. SEL_0_L;
  124. SEL_1_L;
  125. SEL_2_H;
  126. }
  127. break;
  128. case 5:
  129. {
  130. SEL_0_H;
  131. SEL_1_L;
  132. SEL_2_H;
  133. }
  134. break;
  135. case 6:
  136. {
  137. SEL_0_L;
  138. SEL_1_H;
  139. SEL_2_H;
  140. }
  141. break;
  142. case 7:
  143. {
  144. SEL_0_H;
  145. SEL_1_H;
  146. SEL_2_H;
  147. }
  148. break;
  149. default:
  150. break;
  151. }
  152. }