【STM32】HAL庫中的實現(四):RTC (實時時鐘)

🕒HAL庫中的實現:RTC(Real-Time Clock)實時時鐘

RTC 是 STM32 的低功耗實時時鐘模塊,常用于:

  • 實時時間維護(年月日時分秒)
  • 定時喚醒
  • 日志時間戳
  • 鬧鐘功能

RTC(實時時鐘)模塊 提供了 三個中斷源用于在不同時間條件下觸發事件。這些中斷在 低功耗喚醒、定時任務、系統監控等場景下使用。

🕒 RTC 的三個中斷源
中斷類型含義用途HAL支持情況
秒中斷(Second Interrupt)每秒觸發一次定時刷新、節拍事件? HAL 默認未封裝,需裸機配置
鬧鐘中斷(Alarm Interrupt)到指定時間觸發一次定時喚醒、事件提醒? HAL 封裝完整
溢出中斷(Overflow Interrupt)RTC 計數器溢出時觸發長時間周期事件(如每86400秒)? HAL 默認未封裝,需裸機配置

CubeMX配置:
在這里插入圖片描述
在這里插入圖片描述

RTC時鐘秒更新中斷流程:
在這里插入圖片描述

🧾 業務代碼配置( RTC 秒中斷功能)

配置流程:

步驟狀態說明
RTC 初始化?使用 MX_RTC_Init() 初始化
啟用秒中斷?__HAL_RTC_SECOND_ENABLE_IT(&hrtc, RTC_IT_SEC);
中斷向量啟用?RTC_IRQn 已在中斷向量表中啟用
回調函數實現?HAL_RTCEx_RTCEventCallback() 已實現
中斷函數轉發?RTC_IRQHandler() 中調用了 HAL_RTCEx_RTCIRQHandler()
時鐘源配置?使用 LSI,穩定性較好
獲取時間?每秒打印當前時間
+------------------+
| RTC 每秒更新     |
+--------+---------+|v
+-------------------------+
| RTC_IRQn 中斷觸發      |
+-------------------------+|v
+-------------------------+
| HAL_RTCEx_RTCIRQHandler |
+-------------------------+|v
+-----------------------------+
| HAL_RTCEx_RTCEventCallback |
| (打印函數)           |
+-----------------------------+
完整代碼(中斷的方式獲取時間)

📄 stm32f1xx_it.c

/* USER CODE BEGIN Header */
/********************************************************************************* @file    stm32f1xx_it.c* @brief   Interrupt Service Routines.******************************************************************************* @attention** Copyright (c) 2025 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header *//* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f1xx_it.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "usart.h"
#include "iwdg.h"
#include "rtc.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN TD *//* USER CODE END TD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//* External variables --------------------------------------------------------*/
extern RTC_HandleTypeDef hrtc;
extern TIM_HandleTypeDef htim3;
extern UART_HandleTypeDef huart1;
/* USER CODE BEGIN EV *//* USER CODE END EV *//******************************************************************************/
/*           Cortex-M3 Processor Interruption and Exception Handlers          */
/******************************************************************************/
/*** @brief This function handles Non maskable interrupt.*/
void NMI_Handler(void)
{/* USER CODE BEGIN NonMaskableInt_IRQn 0 *//* USER CODE END NonMaskableInt_IRQn 0 *//* USER CODE BEGIN NonMaskableInt_IRQn 1 */while (1){}/* USER CODE END NonMaskableInt_IRQn 1 */
}/*** @brief This function handles Hard fault interrupt.*/
void HardFault_Handler(void)
{/* USER CODE BEGIN HardFault_IRQn 0 *//* USER CODE END HardFault_IRQn 0 */while (1){/* USER CODE BEGIN W1_HardFault_IRQn 0 *//* USER CODE END W1_HardFault_IRQn 0 */}
}/*** @brief This function handles Memory management fault.*/
void MemManage_Handler(void)
{/* USER CODE BEGIN MemoryManagement_IRQn 0 *//* USER CODE END MemoryManagement_IRQn 0 */while (1){/* USER CODE BEGIN W1_MemoryManagement_IRQn 0 *//* USER CODE END W1_MemoryManagement_IRQn 0 */}
}/*** @brief This function handles Prefetch fault, memory access fault.*/
void BusFault_Handler(void)
{/* USER CODE BEGIN BusFault_IRQn 0 *//* USER CODE END BusFault_IRQn 0 */while (1){/* USER CODE BEGIN W1_BusFault_IRQn 0 *//* USER CODE END W1_BusFault_IRQn 0 */}
}/*** @brief This function handles Undefined instruction or illegal state.*/
void UsageFault_Handler(void)
{/* USER CODE BEGIN UsageFault_IRQn 0 *//* USER CODE END UsageFault_IRQn 0 */while (1){/* USER CODE BEGIN W1_UsageFault_IRQn 0 *//* USER CODE END W1_UsageFault_IRQn 0 */}
}/*** @brief This function handles System service call via SWI instruction.*/
void SVC_Handler(void)
{/* USER CODE BEGIN SVCall_IRQn 0 *//* USER CODE END SVCall_IRQn 0 *//* USER CODE BEGIN SVCall_IRQn 1 *//* USER CODE END SVCall_IRQn 1 */
}/*** @brief This function handles Debug monitor.*/
void DebugMon_Handler(void)
{/* USER CODE BEGIN DebugMonitor_IRQn 0 *//* USER CODE END DebugMonitor_IRQn 0 *//* USER CODE BEGIN DebugMonitor_IRQn 1 *//* USER CODE END DebugMonitor_IRQn 1 */
}/*** @brief This function handles Pendable request for system service.*/
void PendSV_Handler(void)
{/* USER CODE BEGIN PendSV_IRQn 0 *//* USER CODE END PendSV_IRQn 0 *//* USER CODE BEGIN PendSV_IRQn 1 *//* USER CODE END PendSV_IRQn 1 */
}/*** @brief This function handles System tick timer.*/
void SysTick_Handler(void)
{/* USER CODE BEGIN SysTick_IRQn 0 *//* USER CODE END SysTick_IRQn 0 */HAL_IncTick();/* USER CODE BEGIN SysTick_IRQn 1 *//* USER CODE END SysTick_IRQn 1 */
}/******************************************************************************/
/* STM32F1xx Peripheral Interrupt Handlers                                    */
/* Add here the Interrupt Handlers for the used peripherals.                  */
/* For the available peripheral interrupt handler names,                      */
/* please refer to the startup file (startup_stm32f1xx.s).                    */
/******************************************************************************//*** @brief This function handles RTC global interrupt.*/
void RTC_IRQHandler(void)
{/* USER CODE BEGIN RTC_IRQn 0 *//* USER CODE END RTC_IRQn 0 */HAL_RTCEx_RTCIRQHandler(&hrtc);/* USER CODE BEGIN RTC_IRQn 1 *//* USER CODE END RTC_IRQn 1 */
}/*** @brief This function handles EXTI line0 interrupt.*/
void EXTI0_IRQHandler(void)
{/* USER CODE BEGIN EXTI0_IRQn 0 *//* USER CODE END EXTI0_IRQn 0 */HAL_GPIO_EXTI_IRQHandler(PA0_Key_Pin);/* USER CODE BEGIN EXTI0_IRQn 1 *//* USER CODE END EXTI0_IRQn 1 */
}/*** @brief This function handles TIM3 global interrupt.*/
void TIM3_IRQHandler(void)
{/* USER CODE BEGIN TIM3_IRQn 0 *//* USER CODE END TIM3_IRQn 0 */HAL_TIM_IRQHandler(&htim3);/* USER CODE BEGIN TIM3_IRQn 1 *//* USER CODE END TIM3_IRQn 1 */
}/*** @brief This function handles USART1 global interrupt.*/
void USART1_IRQHandler(void)
{/* USER CODE BEGIN USART1_IRQn 0 *//* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 *//* USER CODE END USART1_IRQn 1 */
}/* USER CODE BEGIN 1 */void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == PA0_Key_Pin){if( HAL_GPIO_ReadPin(PA0_Key_GPIO_Port, PA0_Key_Pin) == GPIO_PIN_RESET){HAL_GPIO_TogglePin(GPIOC, LED_G_Pin);	//紅燈的狀態翻轉
//			HAL_IWDG_Refresh(&hiwdg);		//進行喂狗
//			printf("Iwdg Count = %d \r\n", Count++);}}
}void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{U1RxLen = Size;HAL_UARTEx_ReceiveToIdle_IT(&huart1, U1RxData, U1RxDataSize);	//啟動串口空閑中斷的接收U1RxFlag = 1;
}//TIM的中斷回調函數 控制LED燈的閃爍
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//	static uint32_t Count = 0;if(htim->Instance == TIM3)	//判斷產生中斷的哪一個中斷回調函數{HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin);	//綠燈的狀態翻轉HAL_IWDG_Refresh(&hiwdg);		//進行喂狗
//		printf("Iwdg Count = %d \r\n", Count++);}
}RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc)
{HAL_RTC_GetTime(hrtc, &sTime, RTC_FORMAT_BCD);HAL_RTC_GetDate(hrtc, &sDate, RTC_FORMAT_BCD);printf("TimeDate -> %d:%d:%d[%d] | %d:%d:%d	\r\n", sDate.Year,sDate.Month,sDate.Date,sDate.WeekDay,sTime.Hours,sTime.Minutes,sTime.Seconds);HAL_Delay(100);
}/* USER CODE END 1 */

📄 main.c

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2025 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "iwdg.h"
#include "rtc.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "string.h"/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
uint8_t U1SendData[] = {"hello world!"};
/* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 */uint16_t pwmVal = 0;	//占空比/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_IWDG_Init();MX_TIM3_Init();MX_RTC_Init();/* USER CODE BEGIN 2 */HAL_UARTEx_ReceiveToIdle_IT(&huart1, U1RxData, U1RxDataSize);	//使能空閑中斷HAL_TIM_Base_Start_IT(&htim3);// 啟動定時器HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);	//PWM初始化完畢之后,找到對應PWM的啟動函數__HAL_RTC_SECOND_ENABLE_IT(&hrtc, RTC_IT_SEC);	//開啟秒更新中斷/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */HAL_UART_Transmit(&huart1, U1SendData, sizeof(U1SendData), 0xff);	//啟動串口空閑中斷的發送while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
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.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;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

🧩 代碼中的核心細節說明
  1. __HAL_RTC_SECOND_ENABLE_IT() 說明

這個宏開啟了 秒中斷(SECIE)

#define __HAL_RTC_SECOND_ENABLE_IT(__HANDLE__, __INTERRUPT__) \((__HANDLE__)->Instance->CRH |= (__INTERRUPT__))

配合:

#define RTC_IT_SEC ((uint32_t)RTC_CRH_SECIE)

它控制的是 RTC->CRH.SECIE 位,每秒觸發一次 SECF 標志位,由 HAL 庫內部清除。

  1. HAL_RTCEx_RTCEventCallback() 是 HAL 提供的專用 RTC 秒中斷回調函數:
void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc)
{// 每秒觸發
}

它在 HAL_RTCEx_RTCIRQHandler() 中被調用:

if(__HAL_RTC_GET_IT(hrtc, RTC_IT_SEC) != RESET)
{__HAL_RTC_CLEAR_FLAG(hrtc, RTC_FLAG_SEC);HAL_RTCEx_RTCEventCallback(hrtc);
}

打印時鐘:

HAL_RTC_GetTime(hrtc, &sTime, RTC_FORMAT_BCD);
HAL_RTC_GetDate(hrtc, &sDate, RTC_FORMAT_BCD);
printf("TimeDate -> %d:%d:%d[%d] | %d:%d:%d\r\n",sDate.Year, sDate.Month, sDate.Date, sDate.WeekDay,sTime.Hours, sTime.Minutes, sTime.Seconds);

每秒中斷觸發后,會打印一次當前時間,非常適合作為 RTC 秒事件驗證。

另外,代碼中可以去除 HAL_Delay(100):這是因為在中斷中使用 HAL_Delay() 不太安全,可能引發系統異常或丟中斷。也可以替代為:

// 替代 HAL_Delay(100) 或者不加延時,使用定時器節奏控制打印頻率。
for (volatile uint32_t i = 0; i < 100000; ++i);

還有,使用 RTC_FORMAT_BIN 更直觀,這是因為BCD 格式讀取后要自己解碼,而使用 BIN 格式更便于直接打印和邏輯判斷。

HAL_RTC_GetTime(hrtc, &sTime, RTC_FORMAT_BIN);
HAL_RTC_GetDate(hrtc, &sDate, RTC_FORMAT_BIN);

最后,RTC 時鐘源也可以用 LSE(32.768kHz),目前這里使用的是:

PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;

LSI 精度較低(±10%,溫漂大),建議若有外部 32.768kHz 晶振,則改為:

PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;

打印中也可以添加LED閃爍:

HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 每秒閃爍一次LED

串口輸出驗證:(使用串口工具(如 SSCOM、PuTTY)查看打印內容是否每秒刷新。如圖所示,是我打印出來的時鐘:)

在這里插入圖片描述

以上。 這便是 STM32 HAL庫 + RTC 每秒中斷功能 的實現。

以上,歡迎有從事同行業的電子信息工程、互聯網通信、嵌入式開發的朋友共同探討與提問,我可以提供實戰演示或模板庫。希望內容能夠對你產生幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94453.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94453.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94453.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Pauli 矩陣指數函數展開為顯式矩陣 e^A -> B

要展開表達式 為普通矩陣&#xff0c;其中 是 Pauli 矩陣&#xff0c; 是單位向量&#xff0c; 是實數。以下是詳細推導步驟&#xff1a;1. Pauli 矩陣的性質Pauli 矩陣定義為&#xff1a;它們滿足以下關系&#xff1a;?其中 是 Kronecker delta&#xff0c;? 是 Levi-…

【Algorithm | 0x03 搜索與圖論】DFS

DFS基礎知識典型例題例1&#xff1a;n皇后問題例2&#xff1a;拍照例3&#xff1a;理發基礎知識 核心原理&#xff1a;一條路走到黑 示意圖&#xff1a;其含義表示&#xff0c;在這個圖中頂層是第0層&#xff0c;也就是后面dfs的入口&#xff0c;一般從dfs(0)開始操作。 模版&a…

Redis的數據過期策略有哪些?

Redis內部通過兩種主要策略來處理過期的Key&#xff1a; 惰性刪除 惰性刪除&#xff1a;顧明思議并不是在TTL到期后就立刻刪除&#xff0c;而是在訪問一個key的時候&#xff0c;Redis會先檢查這個鍵是否過期。如果過期&#xff0c;就刪除它&#xff0c;然后返回nil。 這種方式非…

水庫雨水情測報和大壩安全監測系統解決方案

一、方案背景 在全球氣候變化和極端天氣頻發的背景下&#xff0c;水庫作為重要的水利設施&#xff0c;承擔著防洪、供水、灌溉、發電等多重功能。然而&#xff0c;由于水庫蓄水量巨大&#xff0c;一旦發生潰壩或運行異常&#xff0c;將對下游地區造成不可估量的生命財產損失。因…

BFS 和 DFS 編程思想、框架、技巧及經典例題總結

BFS 和 DFS 編程思想、框架、技巧及經典例題總結 一、核心編程思想 BFS&#xff08;廣度優先搜索&#xff09; 核心思想&#xff1a;以「層次遍歷」為核心&#xff0c;從起點出發&#xff0c;優先探索距離起點最近的節點&#xff0c;逐層擴散遍歷。本質&#xff1a;通過「隊列」…

【面試場景題】日志去重與統計系統設計

文章目錄題目場景描述要求問題考察點解答思考一、核心解決方案&#xff08;基礎版&#xff0c;單節點32GB內存、10臺節點&#xff09;1. 整體架構選型2. 關鍵步驟詳解&#xff08;1&#xff09;數據分片&#xff1a;解決“數據量大&#xff0c;單節點處理不了”的問題&#xff…

【Day 16】Linux-性能查看

目錄 一、Stress系統壓力測試工具 二、性能查看 &#xff08;一&#xff09;查看CPU # nproc # lscpu # top # uptime # mpstat 數字1 數字2 &#xff08;二&#xff09;查看內存 # dmidecode -t memory | less # free -h # …

【ICCV2017】Deformable Convolutional Networks

一、摘要盡管卷積神經網絡&#xff08;CNN&#xff09;在視覺識別任務上取得巨大成功&#xff0c;但其固有的固定幾何結構&#xff08;固定卷積采樣網格、固定池化窗口、固定 RoI 劃分&#xff09;嚴重限制了對未知幾何變換&#xff08;尺度、姿態、形變、視角變化&#xff09;…

echarts在前后端分離項目中的實踐與應用

目錄 一、ECharts簡介 二、后端數據接口設計 三、數據結構設計 1. 柱狀圖數據結構 2. 餅圖數據結構 四、后端實現要點 五、前端ECharts配置解析 1. 柱狀圖配置 2. 餅圖配置 六、最佳實踐建議 七、總結 一、ECharts簡介 ECharts是百度開源的一個基于JavaScript的可視…

SQL 四大語言分類詳解:DDL、DML、DCL、DQL

SQL&#xff08;結構化查詢語言&#xff09;通常被分為四種主要類型&#xff0c;每種類型負責不同的數據庫操作。下面我將詳細介紹這四類SQL語言的語法和用途。一、DDL (Data Definition Language) 數據定義語言功能&#xff1a;定義和管理數據庫對象結構&#xff08;表、視圖、…

ESP-idf框架下的HTTP服務器\HTML 485溫濕度采集并長傳

項目描述:本項目采用485采集溫濕度以及電壓電流等,485模塊分別為下圖,串口轉485模塊采用自動收發模塊,ESP32工作在AP熱點模式,通過手機連接esp32的熱點來和esp進行數據通訊,使用esp32作為HTTP服務器缺陷:項目的最終HTML頁面代碼可發給AI讓其寫注釋#include "freertos/Free…

雅江工程解鎖墨脫秘境:基礎條件全展示(區位、地震、景點、天氣)

目錄 前言 一、區位信息 1、空間位置 2、區位介紹 二、地震信息 1、歷史地震信息 2、5.0級以上大地震 三、景點信息 1、景點列表分布 2、4A級以上景點 四、天氣信息 1、天氣實況 2、天氣應對挑戰 五、總結 前言 相信最近大家對雅江電站的超級大工程項目應該有所耳…

??機器學習貝葉斯算法

??一、引言??在當今機器學習領域&#xff0c;貝葉斯算法猶如一顆璀璨的明星。你是否想過&#xff0c;垃圾郵件過濾系統是如何準確判斷一封郵件是否為垃圾郵件的呢&#xff1f;這背后可能就有貝葉斯算法的功勞。今天&#xff0c;我們就一同走進貝葉斯算法的世界&#xff0c;…

Chisel芯片開發入門系列 -- 18. CPU芯片開發和解釋8(流水線架構的代碼級理解)

以【5 Stage pipeline CPU】搜索圖片&#xff0c;選取5幅有代表性的圖列舉如下&#xff0c;并結合Chisel代碼進行理解和點評。 圖1&#xff1a;原文鏈接如下 https://acsweb.ucsd.edu/~dol031/posts/update/2023/04/10/5stage-cpu-pipeline.html 點評&#xff1a;黑色的部分…

Docker容器中文PDF生成解決方案

在Docker容器中生成包含中文內容的PDF文件時&#xff0c;經常遇到中文字符顯示為方塊或亂碼的問題。本文將詳細介紹如何在Docker環境中配置中文字體支持&#xff0c;實現完美的中文PDF生成。 問題現象 當使用wkhtmltopdf、Puppeteer或其他PDF生成工具時&#xff1a; 中文字符…

2.java集合,線程面試題(已實踐,目前已找到工作)

1線程的創建方式 繼承Thread類實現Runnable接口實現Callable接口 2.這三種方式在項目中的使用有哪些&#xff0c;一般都是怎么用的 繼承thread類實現線程的方式通過實現run方法來實現線程&#xff0c;通過run進行線程的啟用實現runnable方法實現run方法&#xff0c;然后通過thr…

站在前端的角度,看鴻蒙頁面布局

從Web前端轉向鴻蒙&#xff08;HarmonyOS&#xff09;開發時&#xff0c;理解其頁面布局的相似與差異是快速上手的核心。鴻蒙的ArkUI框架在布局理念上與Web前端有諸多相通之處&#xff0c;但也存在關鍵區別。以下從五個維度系統分析&#xff1a; &#x1f4e6; 一、盒子模型&a…

JavaWeb遺傳算法、TSP、模擬退火、ACO算法等實戰應用

Java Web中實現遺傳算法的應用 以下是關于Java Web中實現遺傳算法的應用場景和實例的整理,涵蓋不同領域的解決方案和實現方法: 遺傳算法基礎結構 在Java Web中實現遺傳算法通常需要以下核心組件: 種群初始化:隨機生成初始解集。 適應度函數:評估個體優劣。 選擇操作:輪…

【圖像算法 - 09】基于深度學習的煙霧檢測:從算法原理到工程實現,完整實戰指南

一、項目背景與需求 視頻介紹 【圖像算法 - 09】基于深度學習的煙霧檢測&#xff1a;從算法原理到工程實現&#xff0c;完整實戰指南今天我們使用深度學習來訓練一個煙霧明火檢測系統。這次我們使用了大概一萬五千張圖片的數據集訓練了這次的基于深度學習的煙霧明火檢測模型&a…

間接制冷技術概念及特征

1、基本概念 (1)間接制冷技術即二次制冷技術。常規做法:二次冷卻液儲液罐增加放置于制冷系統管路,促使冷量再快捷的傳遞給載冷劑,繼而載冷劑冷量促使冷庫達到制冷效果。間接制冷技術:通過常壓的二次冷卻介質進行大循環傳送冷量,在直接制冷劑不易應用的位置或者不可運用直…