Quellcode durchsuchen

Merge branch '蓝牙接收测试_temp'

# Conflicts:
#	Core/Src/main.c
xuxinyi vor 2 Monaten
Ursprung
Commit
fe2ca9c24b
2 geänderte Dateien mit 44 neuen und 132 gelöschten Zeilen
  1. 40 124
      Core/Src/main.c
  2. 4 8
      Core/Src/stm32f1xx_it.c

+ 40 - 124
Core/Src/main.c

@@ -18,6 +18,9 @@
 /* USER CODE END Header */
 /* Includes ------------------------------------------------------------------*/
 #include "main.h"
+
+#include <time.h>
+
 #include "string.h"
 /* Private includes ----------------------------------------------------------*/
 /* USER CODE BEGIN Includes */
@@ -40,8 +43,6 @@
 /* USER CODE END PM */
 
 /* Private variables ---------------------------------------------------------*/
-RTC_HandleTypeDef hrtc;
-
 UART_HandleTypeDef huart1;
 UART_HandleTypeDef huart2;
 UART_HandleTypeDef huart3;
@@ -51,11 +52,7 @@ DMA_HandleTypeDef hdma_usart3_rx;
 uint8_t rx_buf[100] = {0};
 uint8_t totalData[30][100] = {0};
 uint8_t uart2_rx_byte[10] = {0};
-uint8_t workMode = 0;  // 0: 接收蓝牙数据 1: 使用lora发生数据。
-RTC_TimeTypeDef myTime = {0};
-uint8_t hour = 0;
-uint8_t minute = 0;
-uint8_t second = 0;
+uint8_t workMode = 0;  // 0: 接收蓝牙数据 1: 使用lora发生数据 2:等待间隔时间
 /* USER CODE END PV */
 
 /* Private function prototypes -----------------------------------------------*/
@@ -65,7 +62,6 @@ static void MX_DMA_Init(void);
 static void MX_USART1_UART_Init(void);
 static void MX_USART2_UART_Init(void);
 static void MX_USART3_UART_Init(void);
-static void MX_RTC_Init(void);
 /* USER CODE BEGIN PFP */
 
 /* USER CODE END PFP */
@@ -94,6 +90,11 @@ int __io_putchar(int ch)
   HAL_UART_Transmit(&huart1, &c, 1, HAL_MAX_DELAY);
   return ch;
 }
+
+void sentLoraData(uint8_t  sendDataNum) {
+  HAL_UART_Transmit(&huart2, totalData[sendDataNum], 8, HAL_MAX_DELAY);
+  memset(totalData[sendDataNum], 0, sizeof(totalData[sendDataNum]));
+}
 /* USER CODE END 0 */
 
 /**
@@ -129,13 +130,12 @@ int main(void)
   MX_USART1_UART_Init();
   MX_USART2_UART_Init();
   MX_USART3_UART_Init();
-  MX_RTC_Init();
   /* USER CODE BEGIN 2 */
   // 启动 USART2 DMA 接收
   HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
-  HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
+  // HAL_UART_Receive_IT(&huart2, uart2_rx_byte, 7);
   // 使能 USART2 空闲中断
-  // __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
+  __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
 
   printf("USART3 DMA + IDLE 中断接收已启动\r\n");
   // 发送一个字符串到UART2
@@ -152,15 +152,8 @@ int main(void)
   const char *lora_msg = "AT+OPTION=3,0";
   HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg, strlen(lora_msg), HAL_MAX_DELAY);
 
-
-
-
-  RTC_AlarmTypeDef test = {0};
-  test.Alarm = RTC_ALARM_A;
-  myTime.Minutes = myTime.Minutes + 1;
-  test.AlarmTime.Minutes = myTime.Minutes;
-  // 首次启用闹钟A(若CubeMX未自动启用)
-  HAL_RTC_SetAlarm_IT(&hrtc, &test, RTC_FORMAT_BIN);
+  int i = 0;
+  uint32_t timer = 0;
   // uint8_t i = 0xaa;
   /* USER CODE END 2 */
 
@@ -170,43 +163,32 @@ int main(void)
   while (1)
   {
     /* USER CODE END WHILE */
-    // 用 printf 输出(printf 已经重定向到 USART2)
-    // printf("hello world task 2\r\n");
-
-
-
-    // printf("Received data: %s\r\n", rx_buf);
-    // memset(rx_buf, '\0', 500);
-    // printf("%02X\r\n",i++);
-    // printf("%d\r\n",strlen(msg));
-    // HAL_UART_Transmit(&huart1, &i, 1, 100);
-    // HAL_UART_Transmit(&huart1, rx_buf, strlen(rx_buf), 100);
-    // i++;
-
-    // const char *lora_data = "hello world\r\n";  // 建议加上回车换行
-    // HAL_UART_Transmit(&huart2, (uint8_t *)lora_data, strlen(lora_data), HAL_MAX_DELAY);
-    // if (workMode == 1)
-    // {
-    //   if (i < 30)
-    //   {
-    //     // 启动 USART2 DMA 接收
-    //     HAL_UART_Transmit(&huart2, totalData[i], 8, HAL_MAX_DELAY);
-    //     i++;
-    //   }else {
-    //     i = 0;
-    //   }
-    // }
-    HAL_RTC_GetTime(&hrtc, &myTime, RTC_FORMAT_BIN);
-    hour = myTime.Hours;
-    minute = myTime.Minutes;
-    second = myTime.Seconds;
-    printf("time: %02d:%02d:%02d\r\n", hour, minute, second);
-    RTC_TimeTypeDef sCurrTime;
-    HAL_RTC_GetTime(&hrtc, &sCurrTime, RTC_FORMAT_BIN);
-    printf("1分钟提醒触发!当前时间:%02d:%02d:%02d\r\n",
-           sCurrTime.Hours, sCurrTime.Minutes, sCurrTime.Seconds);
-    // printf("main task\r\n");
-    HAL_Delay(2000);
+    if (workMode == 0) {  // 接收蓝牙数据
+      printf("接收中\r\n");
+    }else if (workMode == 1) { // 发送数据给Lora
+      printf("发送中\r\n");
+      if (i < 10)
+      {
+        // 启动 USART2 DMA 接收
+        sentLoraData(i);
+        i++;
+      }else {
+        workMode = 2;
+        i = 0;
+      }
+    }else if (workMode == 2) {
+      // 等待间隔时间
+      printf("等待中\r\n");
+      if (timer > 10) {
+        HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
+        __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
+        workMode = 0;
+        timer = 0;
+      }else {
+        timer++;
+      }
+    }
+    HAL_Delay(1000);
     /* USER CODE BEGIN 3 */
   }
   /* USER CODE END 3 */
@@ -221,16 +203,14 @@ void SystemClock_Config(void)
 {
   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
-  RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
 
   /** Initializes the RCC Oscillators according to the specified parameters
   * in the RCC_OscInitTypeDef structure.
   */
-  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
+  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
-  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
@@ -252,70 +232,6 @@ void SystemClock_Config(void)
   {
     Error_Handler();
   }
-  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
-  PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
-  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
-  {
-    Error_Handler();
-  }
-}
-
-/**
-  * @brief RTC Initialization Function
-  * @param None
-  * @retval None
-  */
-static void MX_RTC_Init(void)
-{
-
-  /* USER CODE BEGIN RTC_Init 0 */
-
-  /* USER CODE END RTC_Init 0 */
-
-  RTC_TimeTypeDef sTime = {0};
-  RTC_DateTypeDef DateToUpdate = {0};
-
-  /* USER CODE BEGIN RTC_Init 1 */
-
-  /* USER CODE END RTC_Init 1 */
-
-  /** Initialize RTC Only
-  */
-  hrtc.Instance = RTC;
-  hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
-  hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM;
-  if (HAL_RTC_Init(&hrtc) != HAL_OK)
-  {
-    Error_Handler();
-  }
-
-  /* USER CODE BEGIN Check_RTC_BKUP */
-
-  /* USER CODE END Check_RTC_BKUP */
-
-  /** Initialize RTC and set the Time and Date
-  */
-  sTime.Hours = 0x20;
-  sTime.Minutes = 0x10;
-  sTime.Seconds = 0x30;
-
-  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
-  {
-    Error_Handler();
-  }
-  DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;
-  DateToUpdate.Month = RTC_MONTH_JANUARY;
-  DateToUpdate.Date = 0x7;
-  DateToUpdate.Year = 0x0;
-
-  if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
-  {
-    Error_Handler();
-  }
-  /* USER CODE BEGIN RTC_Init 2 */
-
-  /* USER CODE END RTC_Init 2 */
-
 }
 
 /**

+ 4 - 8
Core/Src/stm32f1xx_it.c

@@ -279,22 +279,18 @@ void USART3_IRQHandler(void)
     HAL_UART_DMAStop(&huart3);
 
     uint32_t received_len = sizeof(rx_buf) - __HAL_DMA_GET_COUNTER(huart3.hdmarx);
-    // HAL_UART_Transmit(&huart1, rx_buf, received_len, 100);
-    if (receiveBlDataCount < 20)
+    if (receiveBlDataCount < 10)
     {
-      receiveBlDataCount++;
       memcpy(totalData[receiveBlDataCount], rx_buf, received_len);
+      receiveBlDataCount++;
       memset(rx_buf, 0, received_len);
       HAL_UART_Receive_DMA(&huart3, rx_buf, received_len); // 重新启动
     }else {
       printf("数据接收完毕");
+      __HAL_UART_DISABLE_IT(&huart3, UART_IT_IDLE);
+      receiveBlDataCount = 0;
       workMode = 1;
     }
-    // HAL_UART_Transmit(&huart2, rx_buf, 8, HAL_MAX_DELAY);
-    // memset(rx_buf, 0, sizeof(rx_buf));
-    // const char *lora_data = "hello world\r\n";  // 建议加上回车换行
-    // HAL_UART_Transmit(&huart2, (uint8_t *)lora_data, strlen(lora_data), HAL_MAX_DELAY);
-    // HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf)); // 重新启动
   }
   /* USER CODE END USART3_IRQn 1 */
 }