uart.c 3.9 KB

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