van_BSP_ESPUart.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. * uart_rcv.c
  3. *
  4. * Created on: 2022年4月20日
  5. * Author: dell
  6. */
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <stdlib.h>
  10. #include <ctype.h>
  11. #include "onechip_include_header.h"
  12. uint8_t g_wifi_rx_buf[WIFI_RX_BUF_SIZE];
  13. uint32_t g_wifi_rx_last;
  14. uint32_t g_wifi_rx_head;
  15. void esp_receive_Rec_IDLE(UART_HandleTypeDef *huart)
  16. {
  17. // if ((__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) != RESET))
  18. // {
  19. // __HAL_UART_CLEAR_IDLEFLAG(huart);
  20. // g_wifi_rx_len = WIFI_RX_BUF_SIZE - __HAL_DMA_GET_COUNTER(huart->hdmarx);
  21. // HAL_UART_DMAStop(huart);
  22. // HAL_UART_Receive_DMA(huart, g_wifi_rx_buf, WIFI_RX_BUF_SIZE);
  23. // }
  24. // 手动判断并读取
  25. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE)) {
  26. uint8_t data = (uint8_t)(huart->Instance->DR & 0xFF);
  27. __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE);
  28. g_wifi_rx_buf[g_wifi_rx_last++] = data;
  29. if(g_wifi_rx_last == WIFI_RX_BUF_SIZE){
  30. g_wifi_rx_last = 0;
  31. }
  32. // 存缓冲区...
  33. // 清除RXNE标志(读DR后自动清除,这里不需要额外操作)
  34. // 但若要用HAL方式清除可调用:__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE);
  35. }
  36. // 处理错误(如ORE)
  37. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) {
  38. __HAL_UART_CLEAR_OREFLAG(huart);
  39. // 也可读取DR丢弃数据
  40. volatile uint8_t temp = huart->Instance->DR;
  41. (void)temp;
  42. }
  43. }
  44. void wifi_receive_clear(void){
  45. memset(g_wifi_rx_buf,0,WIFI_RX_BUF_SIZE);
  46. g_wifi_rx_last = 0;
  47. g_wifi_rx_head = 0;
  48. }
  49. void esp_receive_Rec_Start(UART_HandleTypeDef *huart){
  50. __HAL_UART_CLEAR_IDLEFLAG(huart);
  51. memset((char *)g_wifi_rx_buf,0,WIFI_RX_BUF_SIZE);
  52. // HAL_UART_Receive_DMA(huart, g_wifi_rx_buf, WIFI_RX_BUF_SIZE);
  53. __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
  54. }