|
|
@@ -40,6 +40,8 @@
|
|
|
/* USER CODE END PM */
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
|
+RTC_HandleTypeDef hrtc;
|
|
|
+
|
|
|
UART_HandleTypeDef huart1;
|
|
|
UART_HandleTypeDef huart2;
|
|
|
UART_HandleTypeDef huart3;
|
|
|
@@ -50,6 +52,10 @@ 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;
|
|
|
/* USER CODE END PV */
|
|
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
|
@@ -59,6 +65,7 @@ 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 */
|
|
|
@@ -122,12 +129,13 @@ 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);
|
|
|
// 使能 USART2 空闲中断
|
|
|
- __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
|
|
|
+ // __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
|
|
|
|
|
|
printf("USART3 DMA + IDLE 中断接收已启动\r\n");
|
|
|
// 发送一个字符串到UART2
|
|
|
@@ -169,18 +177,24 @@ int main(void)
|
|
|
|
|
|
// 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_Delay(500);
|
|
|
+ // 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);
|
|
|
+ // printf("main task\r\n");
|
|
|
+ HAL_Delay(2000);
|
|
|
/* USER CODE BEGIN 3 */
|
|
|
}
|
|
|
/* USER CODE END 3 */
|
|
|
@@ -195,14 +209,16 @@ 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_HSE;
|
|
|
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|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;
|
|
|
@@ -224,6 +240,70 @@ 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 */
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|