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 */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C2_Init();
MX_RTC_Init();
/* USER CODE BEGIN 2 */
OLED_Init();//OLED初始化
OLED_CLS();
// HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,100);//写BKP
uint32_t Ret= HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1);//断电后靠VBAT供电。读BKP
OLED_ShowNum(0, 0, Ret, 4, 12);//显示数值
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
2.RTC实时时钟
CubeMX配置:
2.1打开RTC并设置时间
2.2打开外部低速时钟
配置RTC时钟源为LSE外部低速时钟
2.3代码实现:
cpp复制代码
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 */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_RTC_Init();
MX_I2C2_Init();
/* USER CODE BEGIN 2 */
RTC_TimeTypeDef RTC_Time ;//时分秒
RTC_DateTypeDef RTC_Date; //年月日
OLED_Init();
OLED_CLS();
OLED_ShowStr(0, 0, "Data:20 - -", 2);
OLED_ShowStr(0, 2, "Time:", 2);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_RTC_GetDate(&hrtc, &RTC_Date, RTC_FORMAT_BIN);
HAL_RTC_GetTime(&hrtc,&RTC_Time, RTC_FORMAT_BIN);
OLED_ShowNum(57, 0, RTC_Date.Year, 2, 16);
OLED_ShowNum(78, 0, RTC_Date.Month, 2, 16);
OLED_ShowNum(100, 0, RTC_Date.Date, 2, 16);
OLED_ShowNum(57, 2, RTC_Time.Hours , 2, 16);
OLED_ShowNum(78, 2, RTC_Time.Minutes, 2, 16);
OLED_ShowNum(100, 2, RTC_Time.Seconds, 2, 16);
}
/* USER CODE END 3 */
}