STM32 HAL RTC配置及优化

STM32内部的RTC实时时钟模块,可以配置实现日历和时间的运转,并在外部备用电池的辅助下,可以在主电源关闭的情况下保持运行,且RTC备份寄存器也可以在电池供电状态保持数据不丢失。
RTC的配置涉及模式初始化,日期和时间的配置,如果想要在主电源恢复或复位产生之后,RTC只配置模式初始化,而不因重置而中断原来的日期和时间的计数运行,则需要做代码调整优化。

这里以STM32L476RGT6开发板和STM32CUBEIDE开发环境,实现RTC配置和优化。

RTC配置

首先建立工程并设置时钟系统,这里采用外部32.768KHz的晶体作为RTC时钟,所以后面配置时会设置32768的分频到1Hz。RTC输入时钟还有其它选项,如HSI RC,其频率为32KHz,相应的后面配置时做32000的分频即可。



配置RTC初始配置,这里只配置用到的时钟和时间功能:

General选项组里配置小时模式,有24小时制和12小时制可选,后面的127和255组合成分频系数,127实际对应128,255实际对应256,所以128×256=32768,正好实现输入32.768KHz时钟分频到1Hz。
Caalendar Time选项组里配置初始化的时间,这里配置为BCD码模式,这里的BCD码即用4位二进制表示0 ~ 9的十进制数据,因为4位二进制可以表示范围为0 ~ 15,所以BCD码里不会用到10 ~ 15的部分。初始时刻的小时,分钟和秒可以相应配置,这里简单设置为0。

Calendar Date的设置,这里将日期设置为2022年4月1日星期五。

然后使能一个UART串口,这里是USART2, 采用115200波特率,用于将时间信息输出:


保存并生成初始工程代码:

RTC代码及优化

自动生成的初始化代码相关部分如下:

  /* 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_RTC_Init();MX_USART2_UART_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 */

其中和RTC配置有关的部分是MX_RTC_Init();:

/*** @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 sDate = {0};/* USER CODE BEGIN RTC_Init 1 *//* USER CODE END RTC_Init 1 *//** Initialize RTC Only*/hrtc.Instance = RTC;hrtc.Init.HourFormat = RTC_HOURFORMAT_24;hrtc.Init.AsynchPrediv = 127;hrtc.Init.SynchPrediv = 255;hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;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 = 0x0;sTime.Minutes = 0x0;sTime.Seconds = 0x0;sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;sTime.StoreOperation = RTC_STOREOPERATION_RESET;if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}sDate.WeekDay = RTC_WEEKDAY_FRIDAY;sDate.Month = RTC_MONTH_APRIL;sDate.Date = 0x1;sDate.Year = 0x22;if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}/* USER CODE BEGIN RTC_Init 2 *//* USER CODE END RTC_Init 2 */}

其中包含RTC模式初始化,时间初始值配置,日期初始值配置,因此,只要发生任何类型的复位,时间和日期会被重置,而不是保持运行,这样就使得备用电池对RTC时间的保持运行失去价值,因此,需要进行代码调整,使得初始配置值只执行一次,在以后的复位时只进行RTC模式初始化,不打扰时间和日期的继续累加。
这里用RTC备用寄存器存储判断标志,实际上,也可以用断电不失型存储单元(包括内外FLASH, EEPROM等)存储判断标识,操作内部FLASH作为用户数据单元可参考:STM32 内部FLASH用作用户数据区Byte操作函数设计 (HAL)
RTC备用寄存器初始值为全0,判断RTC备用寄存器为0,则识别为第一次运行,会进行时间和日期的配置,然后修改RTC备用寄存器值,这样再以后的复位启动后,判断RTC备用寄存器不为0,则不进行时间和日期的配置,从而时间和日期一直保持累加。

例程代码如下:

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2022 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"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* 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 ---------------------------------------------------------*/RTC_HandleTypeDef hrtc;UART_HandleTypeDef huart2;/* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_RTC_Init(void);
static void MX_USART2_UART_Init(void);
/* USER CODE BEGIN PFP */
uint32_t bkdata=0;
void PY_RTC_Init(void)
{/** Initialize RTC Only*/hrtc.Instance = RTC;hrtc.Init.HourFormat = RTC_HOURFORMAT_24;hrtc.Init.AsynchPrediv = 127;hrtc.Init.SynchPrediv = 255;hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;if (HAL_RTC_Init(&hrtc) != HAL_OK){Error_Handler();}HAL_PWR_EnableBkUpAccess();bkdata=HAL_RTCEx_BKUPRead(&hrtc, 0);if(bkdata==0x00000000){HAL_RTC_DeInit(&hrtc);MX_RTC_Init();HAL_PWR_EnableBkUpAccess();HAL_RTCEx_BKUPWrite(&hrtc, 0, 0x5555aaaa);}}
/* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint8_t py_date[4];
uint8_t py_time[3];
/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* 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 */#if 0/* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_RTC_Init();MX_USART2_UART_Init();/* USER CODE BEGIN 2 */
#elseMX_GPIO_Init();PY_RTC_Init();MX_USART2_UART_Init();#endif/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){HAL_UART_Transmit(&huart2, &bkdata, 4, 2720);HAL_Delay(2500);HAL_RTC_GetDate(&hrtc, py_date, RTC_FORMAT_BCD);HAL_UART_Transmit(&huart2, py_date, 4, 2000);HAL_Delay(2500);HAL_RTC_GetTime(&hrtc, py_time, RTC_FORMAT_BCD);HAL_UART_Transmit(&huart2, py_time, 3, 2000);HAL_Delay(5000);/* 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};/** Configure the main internal regulator output voltage*/if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK){Error_Handler();}/** Configure LSE Drive Capability*/HAL_PWR_EnableBkUpAccess();__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSE;RCC_OscInitStruct.LSEState = RCC_LSE_ON;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLM = 1;RCC_OscInitStruct.PLL.PLLN = 10;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;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_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != 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 sDate = {0};/* USER CODE BEGIN RTC_Init 1 *//* USER CODE END RTC_Init 1 *//** Initialize RTC Only*/hrtc.Instance = RTC;hrtc.Init.HourFormat = RTC_HOURFORMAT_24;hrtc.Init.AsynchPrediv = 127;hrtc.Init.SynchPrediv = 255;hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;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 = 0x0;sTime.Minutes = 0x0;sTime.Seconds = 0x0;sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;sTime.StoreOperation = RTC_STOREOPERATION_RESET;if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}sDate.WeekDay = RTC_WEEKDAY_FRIDAY;sDate.Month = RTC_MONTH_APRIL;sDate.Date = 0x1;sDate.Year = 0x22;if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}/* USER CODE BEGIN RTC_Init 2 *//* USER CODE END RTC_Init 2 */}/*** @brief USART2 Initialization Function* @param None* @retval None*/
static void MX_USART2_UART_Init(void)
{/* USER CODE BEGIN USART2_Init 0 *//* USER CODE END USART2_Init 0 *//* USER CODE BEGIN USART2_Init 1 *//* USER CODE END USART2_Init 1 */huart2.Instance = USART2;huart2.Init.BaudRate = 115200;huart2.Init.WordLength = UART_WORDLENGTH_8B;huart2.Init.StopBits = UART_STOPBITS_1;huart2.Init.Parity = UART_PARITY_NONE;huart2.Init.Mode = UART_MODE_TX_RX;huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart2.Init.OverSampling = UART_OVERSAMPLING_16;huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;if (HAL_UART_Init(&huart2) != HAL_OK){Error_Handler();}/* USER CODE BEGIN USART2_Init 2 *//* USER CODE END USART2_Init 2 */}/*** @brief GPIO Initialization Function* @param None* @retval None*/
static void MX_GPIO_Init(void)
{/* GPIO Ports Clock Enable */__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();}/* 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 */

用串口工具设置115200波特率进行数据接收:

程序第一次运行,不断将RTC备用寄存器值00 00 00 00,4个字节的日期,3个字节的时间输出。当按了一次复位按钮,则输出的RTC备用寄存器值变为55 55 aa aa, 且3个字节的时间输出是从之前的值上继续累加的状态,而不是从初始态开始,实现了设计的目标。

其中,py_date数组对应的是结构体RTC_DateTypeDef,其定义如下:

/*** @brief  RTC Date structure definition*/
typedef struct
{uint8_t WeekDay;  /*!< Specifies the RTC Date WeekDay.This parameter can be a value of @ref RTC_WeekDay_Definitions */uint8_t Month;    /*!< Specifies the RTC Date Month (in BCD format).This parameter can be a value of @ref RTC_Month_Date_Definitions */uint8_t Date;     /*!< Specifies the RTC Date.This parameter must be a number between Min_Data = 1 and Max_Data = 31 */uint8_t Year;     /*!< Specifies the RTC Date Year.This parameter must be a number between Min_Data = 0 and Max_Data = 99 */} RTC_DateTypeDef;

而py_time数组对应的是结构体RTC_TimeTypeDef,其定义如下:

/*** @brief  RTC Time structure definition*/
typedef struct
{uint8_t Hours;            /*!< Specifies the RTC Time Hour.This parameter must be a number between Min_Data = 0 and Max_Data = 12 if the RTC_HourFormat_12 is selected.This parameter must be a number between Min_Data = 0 and Max_Data = 23 if the RTC_HourFormat_24 is selected */uint8_t Minutes;          /*!< Specifies the RTC Time Minutes.This parameter must be a number between Min_Data = 0 and Max_Data = 59 */uint8_t Seconds;          /*!< Specifies the RTC Time Seconds.This parameter must be a number between Min_Data = 0 and Max_Data = 59 */uint8_t TimeFormat;       /*!< Specifies the RTC AM/PM Time.This parameter can be a value of @ref RTC_AM_PM_Definitions */#if defined (STM32L4P5xx) || defined (STM32L4Q5xx)uint32_t SubSeconds;      /*!< Specifies the RTC_SSR RTC Sub Second register content.This field is not used by HAL_RTC_SetTime.If the free running 32 bit counter is not activated (mode binary none)- This parameter corresponds to a time unit range between [0-1] Second with [1 Sec / SecondFraction +1] granularityelse- This parameter corresponds to the free running 32 bit counter. */
#elseuint32_t SubSeconds;      /*!< Specifies the RTC_SSR RTC Sub Second register content.This parameter corresponds to a time unit range between [0-1] Secondwith [1 Sec / SecondFraction +1] granularity */
#endifuint32_t SecondFraction;  /*!< Specifies the range or granularity of Sub Second register contentcorresponding to Synchronous pre-scaler factor value (PREDIV_S)This parameter corresponds to a time unit range between [0-1] Secondwith [1 Sec / SecondFraction +1] granularity.This field will be used only by HAL_RTC_GetTime function */uint32_t DayLightSaving;  /*!< This interface is deprecated. To manage Daylight Saving Time, please use HAL_RTC_DST_xxx functions */uint32_t StoreOperation;  /*!< This interface is deprecated. To manage Daylight Saving Time, please use HAL_RTC_DST_xxx functions */
} RTC_TimeTypeDef;

RTC日期和时间的实时配置

实际上,通常需要通过一些来自外部的方式进行日期和时间的实时配置,如通过串口获得日期和时间数据,并更新RTC当前的日期和时间。
在这样的情况下,用HAL_RTC_SetDate()和HAL_RTC_SetTime()函数即可在RTC运行阶段实时更新当前的日期和时间,此操作不需要停止RTC及重启RTC,随时调用随时改。

HAL_RTC_SetDate()的函数说明如下:

/*** @brief  Set RTC current date.* @param  hrtc RTC handle* @param  sDate Pointer to date structure* @param  Format specifies the format of the entered parameters.*          This parameter can be one of the following values:*            @arg RTC_FORMAT_BIN: Binary data format*            @arg RTC_FORMAT_BCD: BCD data format* @retval HAL status*/
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)

HAL_RTC_SetTime()的函数说明如下:

/*** @brief  Set RTC current time.* @param  hrtc RTC handle* @param  sTime Pointer to Time structure* @param  Format Specifies the format of the entered parameters.*          This parameter can be one of the following values:*            @arg RTC_FORMAT_BIN: Binary data format*            @arg RTC_FORMAT_BCD: BCD data format* @retval HAL status*/
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)

–End–

STM32 HAL RTC配置及优化相关推荐

  1. STM32 RTC时钟掉电日期不更新 STM32 HAL库RTC时钟配置

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 STM32 RTC时钟掉电日期不更新 & STM32 HAL库RTC时钟配置 一.STM32CubeMX RTC配置 二.RT ...

  2. STM32 HAL库 CUBEMX配置 ADC采集

    文章目录 STM32 HAL库 CUBEMX配置 ADC采集 软硬件型号 1.单通道不定时任意时刻采集信号 CUBEMX配置 代码添加 2.单通道ADC采集+DMA传输 CUBEMX添加配置 代码添加 ...

  3. STM32 HAL 硬件IIC+DMA+简单图形库控制OLED

    目录 前言 一.建立工程 二.编写和移植 前期准备 驱动部分修改 三.使用和验证 结论 (2022年1月22日重制)本文主要是移植带简单图形库的程序,如果只是实现DMA控制,建议看[0.96寸 OLE ...

  4. 【STM32】RTC实时时钟,步骤超细详解,一文看懂RTC

    什么是RTC RTC (Real Time Clock):实时时钟 RTC是个独立的定时器.RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能.修改计数器的值可以重新设置当 ...

  5. STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机

    STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机(HAL库) 1 电路图 2 TB6612简介 TB6612是双驱动,可同时驱动两个电机 STBY:接单片机的 ...

  6. STM32F1系列HAL库配置系统时钟

    STM32F1系列HAL库配置系统时钟 其实一开始对于时钟我也是知之甚少,在MSP432中我就一直忽视时钟配置,其实也是在STM32学习时落下的病根,现在趁有空补一下. 时钟简单讲解 对于时钟系统,在 ...

  7. STM32读取RTC时钟

    STM32读取RTC时钟 一.RTC 1. 简介 2. 特征 3. 组成 二.项目创建 三.代码修改 四.总结 参考 一.RTC 1. 简介 RTC-real time clock,实时时钟,主要包含 ...

  8. STM32 HAL库PID控制电机 第三章 PID控制双电机

    STM32 HAL库PID控制电机 第三章 PID控制双电机 注:本文含全部PID控制代码,保证可以运行,如不能运行可以留言回复 1 基础配置 1.1 编码器电路图及配置 引脚 定时器通道 PA0 T ...

  9. STM32 HAL库

    STM32 HAL库 第三章 MDK5 软件入门 bug解决 关键文件介绍 程序仿真 User Keywords 语法提示 代码编辑/查看技巧 第四章 STM32F1 基础知识入门 MDK 下 C 语 ...

最新文章

  1. java获取apk启动activity_[RK3399] android7.1 设置开机启动apk
  2. 透过三翼鸟,看品牌背后的“有效创新”
  3. 发生生成错误是否继续并运行上次的成功生成_JavaScript 是如何运行的?
  4. 防止用户重复提交表单数据,session方式,js方式
  5. 轻量级RTSP服务存在的意义
  6. html ui 下拉列表,Atitit.ui控件-下拉菜单选择控件的实现select html_html/css_WEB-ITnose...
  7. TensorFlow、PyTorch 之后,“国产”AI 框架还有没有机会?
  8. 海量数据挖掘MMDS week2: Association Rules关联规则与频繁项集挖掘
  9. 需求定律的3大挑战——《可以量化的经济学》
  10. 树木分形迭代图 matlab,园林设计中分形理论的引入
  11. VMware Workstation虚拟机无法运行
  12. 网页端哔哩哔哩4倍速播放视频
  13. win10 远程桌面由于以下原因之一无法连接到远程计算机
  14. 苹果计算机怎么显示汉字,苹果的safari浏览器怎样设定成中文显示
  15. 三大重组股上涨最具爆发力!
  16. 如何学习网络安全?(网络安全学习笔记)
  17. 计算机专业技能考核方案,计算机专业技能课教学目标考核方案.doc
  18. acm会议什么档次_国际顶级会议期刊级别介绍
  19. Signal to Noise Ratio——信噪比
  20. 疫情下的远程办公,充满了崩溃与机遇

热门文章

  1. 利用http://forshare.me/qq/访问陌生人的QQ空间_三木_新浪博客
  2. 2021-03-07
  3. 图解通信原理与案例分析-35:以太网MAC层的通信原理--MAC帧格式与调度策略:载波侦听与冲突检测CSMA/CD、载波侦听与冲突避免(信道空闲保证)CSMA/CA、流控
  4. 介绍chrome的一些不为人知的功能
  5. 微信小程序3(WXSS模板样式和全局局部配置)
  6. OO Unit 2 电梯调度
  7. 金立否认裁定破产清算;罗永浩力挽锤子科技负债危局;ofo称现场退押金与线上无异丨雷锋早报...
  8. java 最烧脑的继承题_最烧脑的10道智力题!答对5道就是天才!
  9. 锂离子电池离线参数辨识(基于二阶RC电池模型)
  10. 如何加载 那个大图片