|
@@ -18,6 +18,9 @@
|
|
|
/* USER CODE END Header */
|
|
/* USER CODE END Header */
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
/* Includes ------------------------------------------------------------------*/
|
|
|
#include "main.h"
|
|
#include "main.h"
|
|
|
|
|
+
|
|
|
|
|
+#include <time.h>
|
|
|
|
|
+
|
|
|
#include "string.h"
|
|
#include "string.h"
|
|
|
/* Private includes ----------------------------------------------------------*/
|
|
/* Private includes ----------------------------------------------------------*/
|
|
|
/* USER CODE BEGIN Includes */
|
|
/* USER CODE BEGIN Includes */
|
|
@@ -40,8 +43,6 @@
|
|
|
/* USER CODE END PM */
|
|
/* USER CODE END PM */
|
|
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
|
-RTC_HandleTypeDef hrtc;
|
|
|
|
|
-
|
|
|
|
|
UART_HandleTypeDef huart1;
|
|
UART_HandleTypeDef huart1;
|
|
|
UART_HandleTypeDef huart2;
|
|
UART_HandleTypeDef huart2;
|
|
|
UART_HandleTypeDef huart3;
|
|
UART_HandleTypeDef huart3;
|
|
@@ -51,11 +52,7 @@ DMA_HandleTypeDef hdma_usart3_rx;
|
|
|
uint8_t rx_buf[100] = {0};
|
|
uint8_t rx_buf[100] = {0};
|
|
|
uint8_t totalData[30][100] = {0};
|
|
uint8_t totalData[30][100] = {0};
|
|
|
uint8_t uart2_rx_byte[10] = {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 */
|
|
/* USER CODE END PV */
|
|
|
|
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
@@ -65,7 +62,6 @@ static void MX_DMA_Init(void);
|
|
|
static void MX_USART1_UART_Init(void);
|
|
static void MX_USART1_UART_Init(void);
|
|
|
static void MX_USART2_UART_Init(void);
|
|
static void MX_USART2_UART_Init(void);
|
|
|
static void MX_USART3_UART_Init(void);
|
|
static void MX_USART3_UART_Init(void);
|
|
|
-static void MX_RTC_Init(void);
|
|
|
|
|
/* USER CODE BEGIN PFP */
|
|
/* USER CODE BEGIN PFP */
|
|
|
|
|
|
|
|
/* USER CODE END PFP */
|
|
/* USER CODE END PFP */
|
|
@@ -94,6 +90,11 @@ int __io_putchar(int ch)
|
|
|
HAL_UART_Transmit(&huart1, &c, 1, HAL_MAX_DELAY);
|
|
HAL_UART_Transmit(&huart1, &c, 1, HAL_MAX_DELAY);
|
|
|
return ch;
|
|
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 */
|
|
/* USER CODE END 0 */
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -129,13 +130,12 @@ int main(void)
|
|
|
MX_USART1_UART_Init();
|
|
MX_USART1_UART_Init();
|
|
|
MX_USART2_UART_Init();
|
|
MX_USART2_UART_Init();
|
|
|
MX_USART3_UART_Init();
|
|
MX_USART3_UART_Init();
|
|
|
- MX_RTC_Init();
|
|
|
|
|
/* USER CODE BEGIN 2 */
|
|
/* USER CODE BEGIN 2 */
|
|
|
// 启动 USART2 DMA 接收
|
|
// 启动 USART2 DMA 接收
|
|
|
HAL_UART_Receive_DMA(&huart3, rx_buf, sizeof(rx_buf));
|
|
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 空闲中断
|
|
// 使能 USART2 空闲中断
|
|
|
- // __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
|
|
|
|
|
|
|
+ __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
|
|
|
|
|
|
|
|
printf("USART3 DMA + IDLE 中断接收已启动\r\n");
|
|
printf("USART3 DMA + IDLE 中断接收已启动\r\n");
|
|
|
// 发送一个字符串到UART2
|
|
// 发送一个字符串到UART2
|
|
@@ -152,15 +152,8 @@ int main(void)
|
|
|
const char *lora_msg = "AT+OPTION=3,0";
|
|
const char *lora_msg = "AT+OPTION=3,0";
|
|
|
HAL_UART_Transmit(&huart2, (uint8_t *)lora_msg, strlen(lora_msg), HAL_MAX_DELAY);
|
|
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;
|
|
// uint8_t i = 0xaa;
|
|
|
/* USER CODE END 2 */
|
|
/* USER CODE END 2 */
|
|
|
|
|
|
|
@@ -170,43 +163,32 @@ int main(void)
|
|
|
while (1)
|
|
while (1)
|
|
|
{
|
|
{
|
|
|
/* USER CODE END WHILE */
|
|
/* 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 BEGIN 3 */
|
|
|
}
|
|
}
|
|
|
/* USER CODE END 3 */
|
|
/* USER CODE END 3 */
|
|
@@ -221,16 +203,14 @@ void SystemClock_Config(void)
|
|
|
{
|
|
{
|
|
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
|
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
|
|
- RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
|
|
|
|
|
|
|
|
|
/** Initializes the RCC Oscillators according to the specified parameters
|
|
/** Initializes the RCC Oscillators according to the specified parameters
|
|
|
* in the RCC_OscInitTypeDef structure.
|
|
* 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.HSEState = RCC_HSE_ON;
|
|
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
|
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
|
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
|
|
|
- RCC_OscInitStruct.LSIState = RCC_LSI_ON;
|
|
|
|
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
|
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
|
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
|
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
|
|
@@ -252,70 +232,6 @@ void SystemClock_Config(void)
|
|
|
{
|
|
{
|
|
|
Error_Handler();
|
|
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 */
|
|
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|