Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 

169 rindas
6.2 KiB

  1. /*****************头文件*************************/
  2. #include "fsl_common.h"
  3. #include "uart_Interrupt.h"
  4. #include "fsl_uart.h"
  5. #include "pin_Init.h"
  6. #include "fsl_gpio.h"
  7. #include "adc_Interrupt.h"
  8. /*****************变量声明*************************/
  9. uint8_t demoRingBuffer[DEMO_RING_BUFFER_SIZE];
  10. uint16_t txIndex; //发送数据计数
  11. uint16_t rxIndex; //接收数据计数
  12. volatile uint16_t UART1rxIndex = 0; //接收数据计数
  13. uint8_t RS485_Buf_Arr[DEMO_RS485_ARR_SIZE]; //RS485缓存数据数组
  14. uint16_t UART2_SendData_len; //记录UART2发送数据长度
  15. uint16_t UART2_SendData_OK; //UART2发送结束标志
  16. uint8_t g_tipString1[] = "\r\n\r\n编码器位置\t";
  17. uint8_t g_tipString2[] = "\t电压\t";
  18. uint32_t BMQ_Location_Num; //编码器位置
  19. uint8_t UART2_Buf_Arr[DEMO_UART2_ARR_SIZE]; //RS485缓存数据数组
  20. uint32_t adc_GetValue = 0; //接收母线直流电压值
  21. /*****************UART1初始化*************************/
  22. void UART1_InterrputInit()
  23. {
  24. UART1_InitPins(); //UART1引脚初始化
  25. uart_config_t config; //参数设置
  26. UART_GetDefaultConfig(&config);
  27. config.stopBitCount = kUART_OneStopBit;
  28. config.baudRate_Bps = 2500000u; //设置波特率
  29. config.enableTx = true;
  30. config.enableRx = true;
  31. UART_Init(UART1, &config, SystemCoreClock); //初始化配置
  32. UART_EnableInterrupts(UART1, kUART_RxDataRegFullInterruptEnable | kUART_RxOverrunInterruptEnable); //使能Rx中断
  33. EnableIRQ(UART1_RX_TX_IRQn); //开启中断
  34. }
  35. /*****************UART2初始化*************************/
  36. void UART2_InterrputInit()
  37. {
  38. UART2_InitPins(); //UART2引脚初始化
  39. uart_config_t config; //参数设置
  40. UART_GetDefaultConfig(&config);
  41. config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE; //设置波特率
  42. config.enableTx = true;
  43. config.enableRx = true;
  44. UART_Init(DEMO_UART, &config, SystemCoreClock); //初始化配置
  45. UART_EnableInterrupts(DEMO_UART, kUART_RxDataRegFullInterruptEnable | kUART_RxOverrunInterruptEnable); //使能Rx中断
  46. EnableIRQ(UART2_RX_TX_IRQn); //开启中断
  47. }
  48. uint32_t UART1_IRQ_Count;
  49. /*****************UART1中断服务函数**********************/
  50. void UART1_RX_TX_IRQHandler(void)
  51. {
  52. uint16_t data;
  53. UART1_IRQ_Count ++;
  54. UART1_IRQ_Count %= 1000;
  55. if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(UART1)) //接收到数据标志
  56. {
  57. data = UART_ReadByte(UART1);
  58. if (UART1rxIndex < DEMO_RING_BUFFER_SIZE) //
  59. {
  60. demoRingBuffer[UART1rxIndex] = data;
  61. UART1rxIndex++;
  62. UART1rxIndex %= DEMO_RING_BUFFER_SIZE;
  63. }
  64. }
  65. SDK_ISR_EXIT_BARRIER;
  66. }
  67. uint32_t UART2_IRQ_Count;
  68. /*****************UART2中断服务函数**********************/
  69. void UART2_RX_TX_IRQHandler(void)
  70. {
  71. uint16_t data;
  72. UART2_IRQ_Count ++;
  73. UART2_IRQ_Count %= 1000;
  74. if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(DEMO_UART)) //接收到数据标志
  75. {
  76. data = UART_ReadByte(DEMO_UART);
  77. if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) //
  78. {
  79. demoRingBuffer[rxIndex] = data;
  80. rxIndex++;
  81. rxIndex %= DEMO_RING_BUFFER_SIZE;
  82. }
  83. }
  84. /*将接收到的数据返回*/
  85. if ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)) && (rxIndex != txIndex)) //发送中断标志
  86. {
  87. UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]); //发送一帧数据(一个字节,8个数据位)
  88. txIndex++;
  89. txIndex %= DEMO_RING_BUFFER_SIZE;
  90. }
  91. SDK_ISR_EXIT_BARRIER;
  92. }
  93. /**************发送一帧数据*************/
  94. void UART1_sendData()
  95. {
  96. // if (UART2_SendData_OK == 1)
  97. // {
  98. // return;
  99. // }
  100. UART2_SendData_OK ++;
  101. UART2_SendData_OK %= 100;
  102. GPIO_PinWrite(GPIOE, 3, 1); //PTE3写
  103. UART_WriteByte(UART1, 0x1A); //发送一帧数据(一个字节,8个数据位)
  104. UART_WriteByte(UART1, 0x1A); //发送一帧数据(一个字节,8个数据位)
  105. UART_WriteByte(UART1, 0x1A); //发送一帧数据(一个字节,8个数据位)
  106. // UART_WriteByte(UART1, 0x00); //发送一帧数据(一个字节,8个数据位)
  107. while (!(kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(UART1))); //发送中断标志
  108. UART_ClearStatusFlags(UART1, kUART_TransmissionCompleteFlag);
  109. GPIO_PinWrite(GPIOE, 3, 0); //PTE3写
  110. }
  111. /**************UART2发送数据*******************/
  112. void UART2_sendData()
  113. {
  114. if (UART2_SendData_len != 0)
  115. {
  116. UART_WriteBlocking(DEMO_UART, g_tipString1, sizeof(g_tipString1) / sizeof(g_tipString1[0])-1);
  117. for (uint8_t i = 0; i < 6; i++ )
  118. {
  119. UART_WriteByte(DEMO_UART, UART2_Buf_Arr[i]);
  120. while (!(kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART))); //等待发送结束
  121. UART_ClearStatusFlags(DEMO_UART, kUART_TransmissionCompleteFlag);
  122. }
  123. UART_WriteBlocking(DEMO_UART, g_tipString2, sizeof(g_tipString2) / sizeof(g_tipString2[0])-1);
  124. for (uint8_t i = 0; i < 6; i++ )
  125. {
  126. UART_WriteByte(DEMO_UART, UART2_Buf_Arr[i+6]);
  127. while (!(kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART))); //等待发送结束
  128. UART_ClearStatusFlags(DEMO_UART, kUART_TransmissionCompleteFlag);
  129. }
  130. }
  131. }
  132. /***************RS485接收数据*********************/
  133. void RS485_Recieve_Data()
  134. {
  135. // for (uint8_t i = 0; i < UART1rxIndex; i++ )
  136. // {
  137. // RS485_Buf_Arr[i] = demoRingBuffer[i];
  138. // }
  139. // BMQ_Location_Num = (RS485_Buf_Arr[4] << 16) + (RS485_Buf_Arr[3] << 8) + (RS485_Buf_Arr[2]);
  140. BMQ_Location_Num = (demoRingBuffer[4] << 16) + (demoRingBuffer[3] << 8) + (demoRingBuffer[2]);
  141. UART2_Buf_Arr[0] = (BMQ_Location_Num / 100000) + '0';
  142. UART2_Buf_Arr[1] = (BMQ_Location_Num % 100000 / 10000) + '0';
  143. UART2_Buf_Arr[2] = (BMQ_Location_Num % 10000 / 1000) + '0';
  144. UART2_Buf_Arr[3] = (BMQ_Location_Num % 1000 / 100) + '0';
  145. UART2_Buf_Arr[4] = (BMQ_Location_Num % 100 / 10) + '0';
  146. UART2_Buf_Arr[5] = (BMQ_Location_Num % 10) + '0';
  147. UART2_SendData_len = UART1rxIndex;
  148. UART1rxIndex = 0;
  149. }
  150. /*************刷新电压数据******************/
  151. void ADC16_Recieve_Data()
  152. {
  153. adc_GetValue = adc_ReturnValue();
  154. UART2_Buf_Arr[6] = (adc_GetValue / 100000) + '0';
  155. UART2_Buf_Arr[7] = (adc_GetValue % 100000 / 10000) + '0';
  156. UART2_Buf_Arr[8] = (adc_GetValue % 10000 / 1000) + '0';
  157. UART2_Buf_Arr[9] = (adc_GetValue % 1000 / 100) + '0';
  158. UART2_Buf_Arr[10] = (adc_GetValue % 100 / 10) + '0';
  159. UART2_Buf_Arr[11] = (adc_GetValue % 10) + '0';
  160. }