uart(3877).c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * uart.c
  3. *
  4. * Created on: 2019. 5. 27.
  5. * Author: parkyj
  6. */
  7. #include "uart.h"
  8. UARTQUEUE TerminalQueue;
  9. UARTQUEUE WifiQueue;
  10. void InitUartQueue(pUARTQUEUE pQueue)
  11. {
  12. pQueue->data = pQueue->head = pQueue->tail = 0;
  13. if (HAL_UART_Receive_DMA(&hTerminal, TerminalQueue.Buffer, 1) != HAL_OK)
  14. {
  15. // _Error_Handler(__FILE__, __LINE__);
  16. }
  17. //HAL_UART_Receive_DMA(&hTerminal, TerminalQueue.Buffer, 1);
  18. //HAL_UART_Receive_IT(hTerminal, pQueue->Buffer + pQueue->head, 1);
  19. }
  20. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  21. {
  22. pUARTQUEUE pQueue;
  23. pQueue = &TerminalQueue;
  24. pQueue->head++;
  25. if (pQueue->head >= QUEUE_BUFFER_LENGTH) pQueue->head = 0;
  26. pQueue->data++;
  27. if (pQueue->data >= QUEUE_BUFFER_LENGTH)
  28. GetDataFromUartQueue(huart);
  29. HAL_UART_Receive_DMA(&hTerminal, pQueue->Buffer + pQueue->head, 1);
  30. // Set_UartRcv(true);
  31. }
  32. void PutDataToUartQueue(UART_HandleTypeDef *huart, uint8_t data)
  33. {
  34. pUARTQUEUE pQueue = &TerminalQueue;
  35. if (pQueue->data >= QUEUE_BUFFER_LENGTH)
  36. GetDataFromUartQueue(huart);
  37. pQueue->Buffer[pQueue->head++] = data;
  38. if (pQueue->head == QUEUE_BUFFER_LENGTH) pQueue->head = 0;
  39. pQueue->data++;
  40. // HAL_UART_Receive_DMA(&hTerminal, pQueue->Buffer + pQueue->head, 10);
  41. }
  42. void GetDataFromUartQueue(UART_HandleTypeDef *huart)
  43. {
  44. UART_HandleTypeDef *dst = (huart->Instance == USART2 ? &hWifi:&hTerminal);
  45. pUARTQUEUE pQueue = &TerminalQueue;
  46. printf("Function : %s : ",__func__);
  47. if (HAL_UART_Transmit(dst, pQueue->Buffer + pQueue->tail, 1, 3000) != HAL_OK)
  48. {
  49. // _Error_Handler(__FILE__, __LINE__);
  50. }
  51. printf("\r\n");
  52. pQueue->tail++;
  53. if (pQueue->tail >= QUEUE_BUFFER_LENGTH) pQueue->tail = 0;
  54. pQueue->data--;
  55. HAL_Delay(1);
  56. }
  57. void Uart1_Data_Send(uint8_t* data,uint8_t size){
  58. HAL_UART_Transmit(&huart1, data,size, 10);
  59. }