van_BSP_ESPUart.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. uint32_t g_wifi_rx_last_tick = 0; /* 最近一次收到ESP数据的时间戳(10ms单位,0=未收到) */
  16. void esp_receive_Rec_IDLE(UART_HandleTypeDef *huart)
  17. {
  18. // if ((__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) != RESET))
  19. // {
  20. // __HAL_UART_CLEAR_IDLEFLAG(huart);
  21. // g_wifi_rx_len = WIFI_RX_BUF_SIZE - __HAL_DMA_GET_COUNTER(huart->hdmarx);
  22. // HAL_UART_DMAStop(huart);
  23. // HAL_UART_Receive_DMA(huart, g_wifi_rx_buf, WIFI_RX_BUF_SIZE);
  24. // }
  25. // 手动判断并读取
  26. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE)) {
  27. uint8_t data = (uint8_t)(huart->Instance->DR & 0xFF);
  28. __HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE);
  29. g_wifi_rx_buf[g_wifi_rx_last++] = data;
  30. if(g_wifi_rx_last == WIFI_RX_BUF_SIZE){
  31. g_wifi_rx_last = 0;
  32. }
  33. g_wifi_rx_last_tick = sysinf.conter10ms; /* 记录最近接收时间戳 */
  34. // 存缓冲区...
  35. // 清除RXNE标志(读DR后自动清除,这里不需要额外操作)
  36. // 但若要用HAL方式清除可调用:__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE);
  37. }
  38. // 处理错误(如ORE)
  39. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE)) {
  40. __HAL_UART_CLEAR_OREFLAG(huart);
  41. // 也可读取DR丢弃数据
  42. volatile uint8_t temp = huart->Instance->DR;
  43. (void)temp;
  44. }
  45. }
  46. void wifi_receive_clear(void){
  47. memset(g_wifi_rx_buf,0,WIFI_RX_BUF_SIZE);
  48. g_wifi_rx_last = 0;
  49. g_wifi_rx_head = 0;
  50. }
  51. void esp_receive_Rec_Start(UART_HandleTypeDef *huart){
  52. __HAL_UART_CLEAR_IDLEFLAG(huart);
  53. memset((char *)g_wifi_rx_buf,0,WIFI_RX_BUF_SIZE);
  54. // HAL_UART_Receive_DMA(huart, g_wifi_rx_buf, WIFI_RX_BUF_SIZE);
  55. __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
  56. }