{"id":3151,"date":"2025-01-11T14:26:37","date_gmt":"2025-01-11T14:26:37","guid":{"rendered":"https:\/\/blog.embeddedexpert.io\/?p=3151"},"modified":"2025-01-11T14:26:38","modified_gmt":"2025-01-11T14:26:38","slug":"getting-started-with-stm32h5-arm-cortex-m33-internal-rtc","status":"publish","type":"post","link":"https:\/\/blog.embeddedexpert.io\/?p=3151","title":{"rendered":"Getting Started with STM32H5 ARM Cortex M33: Internal RTC"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/936CAAE7-EEB6-4EFB-922E-2AEEBD7B9349.png\" alt=\"\" class=\"wp-image-3152\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/936CAAE7-EEB6-4EFB-922E-2AEEBD7B9349.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/936CAAE7-EEB6-4EFB-922E-2AEEBD7B9349-300x300.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/936CAAE7-EEB6-4EFB-922E-2AEEBD7B9349-150x150.png 150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/936CAAE7-EEB6-4EFB-922E-2AEEBD7B9349-768x768.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/936CAAE7-EEB6-4EFB-922E-2AEEBD7B9349-750x750.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/936CAAE7-EEB6-4EFB-922E-2AEEBD7B9349-400x400.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/936CAAE7-EEB6-4EFB-922E-2AEEBD7B9349-250x250.png 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>In this guide on RTC (Real-Time Clock), we shall explore the features of the RTC on STM32H5, its functional block diagram, and how to develop a driver using STM32CubeMX.<\/p>\n\n\n\n<p>In this guide, we shall cover the following:<\/p>\n\n\n\n<p>\u2022 What is RTC.<\/p>\n\n\n\n<p>\u2022 STM32CubeIDE Configuration.<\/p>\n\n\n\n<p>\u2022 Firmware development.<\/p>\n\n\n\n<p>\u2022 Results.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. What is RTC:<\/h2>\n\n\n\n<p><strong>Introduction to the STM32H5 Internal RTC<\/strong><\/p>\n\n\n\n<p>The STM32H5 microcontroller features a highly versatile&nbsp;<strong>Real-Time Clock (RTC)<\/strong>&nbsp;designed for applications that require precise timekeeping and date tracking. The internal RTC operates independently of the main system clock, ensuring accurate functionality even during low-power modes. This makes it ideal for devices such as smart meters, data loggers, wearable electronics, and other time-sensitive embedded systems.<\/p>\n\n\n\n<p><strong>Key Features of the Internal RTC:<\/strong><\/p>\n\n\n\n<p>1. <strong>Low-Power Operation<\/strong>:<\/p>\n\n\n\n<p>\u2022 The RTC can remain operational in Standby or Stop modes, consuming minimal power.<\/p>\n\n\n\n<p>2. <strong>Flexible Clock Source<\/strong>:<\/p>\n\n\n\n<p>\u2022 Supports multiple clock sources, including the Low-Speed External oscillator (LSE), Low-Speed Internal oscillator (LSI), and High-Speed External oscillator (HSE).<\/p>\n\n\n\n<p>3. <strong>Calendar Functionality<\/strong>:<\/p>\n\n\n\n<p>\u2022 Tracks year, month, day, hours, minutes, and seconds with leap year compensation.<\/p>\n\n\n\n<p>4. <strong>Programmable Alarms and Wakeup Timer<\/strong>:<\/p>\n\n\n\n<p>\u2022 Features two alarms and a wakeup timer for precise timing events and system wake-ups.<\/p>\n\n\n\n<p>5. <strong>Backup Registers<\/strong>:<\/p>\n\n\n\n<p>\u2022 Includes 20 backup registers to retain user data during power loss or system resets.<\/p>\n\n\n\n<p>6. <strong>Tamper Detection<\/strong>:<\/p>\n\n\n\n<p>\u2022 Monitors tamper events and secures critical data.<\/p>\n\n\n\n<p><strong>Block Diagram Overview<\/strong><\/p>\n\n\n\n<p>The block diagram of the RTC provides a clear representation of its components and connections. It includes the following elements:<\/p>\n\n\n\n<p>\u2022 <strong>Clock Sources<\/strong>:<\/p>\n\n\n\n<p>\u2022 LSE, LSI, and HSE provide the flexibility to select the most appropriate clock source for the application.<\/p>\n\n\n\n<p>\u2022 <strong>Prescaler and Divider<\/strong>:<\/p>\n\n\n\n<p>\u2022 Adjusts the input clock to generate the 1 Hz signal required for the RTC core.<\/p>\n\n\n\n<p>\u2022 <strong>Calendar Unit<\/strong>:<\/p>\n\n\n\n<p>\u2022 Maintains accurate time and date with leap year adjustments.<\/p>\n\n\n\n<p>\u2022 <strong>Alarm and Wakeup Unit<\/strong>:<\/p>\n\n\n\n<p>\u2022 Enables system alerts and wakeup events.<\/p>\n\n\n\n<p>\u2022 <strong>Backup Registers<\/strong>:<\/p>\n\n\n\n<p>\u2022 Stores user data securely during power cycles.<\/p>\n\n\n\n<p>\u2022 <strong>Tamper Detection<\/strong>:<\/p>\n\n\n\n<p>\u2022 Protects sensitive information by detecting external tamper events.<\/p>\n\n\n\n<p>The internal RTC of the STM32H5 is a reliable and flexible solution for managing time-critical operations in embedded systems. The following block diagram illustrates its architecture and connections:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-05-50-800x1024.jpg\" alt=\"\" class=\"wp-image-3153\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-05-50-800x1024.jpg 800w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-05-50-234x300.jpg 234w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-05-50-768x984.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-05-50-1199x1536.jpg 1199w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-05-50-1150x1473.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-05-50-750x960.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-05-50-400x512.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-05-50-250x320.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-05-50.jpg 1518w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. STM32CubeIDE Configuration:<\/h2>\n\n\n\n<p>We start off by creating new project with name of Internal RTC. For how to create project using STM32CubeIDE, please refer to this guide <a href=\"https:\/\/blog.embeddedexpert.io\/?p=2789\" data-type=\"link\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=2789\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p>After creating the project, the STM32CubeMX configuration window will appear.<\/p>\n\n\n\n<p>From System Core from left, select RCC then enable external low speed oscillator as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"850\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-09-55-1024x850.jpg\" alt=\"\" class=\"wp-image-3154\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-09-55-1024x850.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-09-55-300x249.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-09-55-768x638.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-09-55-1536x1276.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-09-55-2048x1701.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-09-55-1150x955.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-09-55-750x623.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-09-55-400x332.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-09-55-250x208.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Next, from timers section, select RTC then activate Clock Sources and Calendar as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1019\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10-1019x1024.jpg\" alt=\"\" class=\"wp-image-3155\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10-1019x1024.jpg 1019w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10-300x300.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10-150x150.jpg 150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10-768x772.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10-1528x1536.jpg 1528w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10-1150x1156.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10-750x754.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10-400x402.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10-250x250.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-13-10.jpg 2016w\" sizes=\"(max-width: 1019px) 100vw, 1019px\" \/><\/figure>\n\n\n\n<p>Also, set the time and date as you wish. Here, the values are random.<\/p>\n\n\n\n<p>Next, go to clock configuration, set the RTC clock source to be LSE (Low Speed External) as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"356\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-15-05-1024x356.jpg\" alt=\"\" class=\"wp-image-3156\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-15-05-1024x356.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-15-05-300x104.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-15-05-768x267.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-15-05-1536x534.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-15-05-2048x713.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-15-05-1150x400.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-15-05-750x261.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-15-05-400x139.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_17-15-05-250x87.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Also, enable the UART to print the RTC value. For how to enable the uart, please refer to this guide <a href=\"https:\/\/blog.embeddedexpert.io\/?p=2844\" data-type=\"link\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=2844\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p>Thats all for the configuration.<\/p>\n\n\n\n<p>Save the project and this will generate the project.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Firmware Development:<\/h2>\n\n\n\n<p>In main.c file.<\/p>\n\n\n\n<p>In user begin includes, include the stdio header file as following:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">\/* USER CODE BEGIN Includes *\/\n#include &quot;stdio.h&quot;\n\/* USER CODE END Includes *\/<\/pre><\/div>\n\n\n\n<p>Next, in user code begin PV, declare the following two data structure for the RTC operation:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">\/* USER CODE BEGIN PV *\/\nRTC_TimeTypeDef gTime = {0};\nRTC_DateTypeDef gDate = {0};\n\/* USER CODE END PV *\/<\/pre><\/div>\n\n\n\n<p>First data structure is to store the time while the second one is to store the date.<\/p>\n\n\n\n<p>In user code begin 0, we shall retarget the printf to user UART as following:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">int __io_putchar(int ch)\n{\n\tHAL_UART_Transmit(&amp;huart2, &amp;ch, 1, 5);\n\n\treturn ch;\n}<\/pre><\/div>\n\n\n\n<p>This will allow us to use terminal to display the results.<\/p>\n\n\n\n<p>In RTC_MX_Init function, at user code begin check_RTC_BKUP:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">  \/* USER CODE BEGIN Check_RTC_BKUP *\/\n  if (HAL_RTCEx_BKUPRead(&amp;hrtc, RTC_BKP_DR1)== 0x4567)\n  {\n\t  return ;\n  }\n  \/* USER CODE END Check_RTC_BKUP *\/<\/pre><\/div>\n\n\n\n<p>This line, will prevent entering new date and time once the MCU is reseted.<\/p>\n\n\n\n<p>At user code begin RTC_Init_2, add this line:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">  \/* USER CODE BEGIN RTC_Init 2 *\/\n  HAL_RTCEx_BKUPWrite(&amp;hrtc, RTC_BKP_DR1, 0x4567);\n\n\n  \/* USER CODE END RTC_Init 2 *\/<\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>By writing any value to the RTC backup register, this will lock the RTC from configuration. During the boot, we shall check this register if it has the same value, then no need to reinitialize the RTC data.<\/p>\n\n\n\n<p>In while 1 loop, user code begin 3:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">\t\tif (HAL_RTC_GetTime(&amp;hrtc, &amp;gTime, RTC_FORMAT_BIN) != HAL_OK)\n\t\t{\n\t\t\tError_Handler();\n\t\t}\n\t\tif(HAL_RTC_GetDate(&amp;hrtc, &amp;gDate, RTC_FORMAT_BIN)!=HAL_OK)\n\t\t{\n\t\t\tError_Handler();\n\t\t}\n\n\t\tprintf(&quot;Time is %d:%d:%d\\r\\n&quot;,gTime.Hours,gTime.Minutes,gTime.Seconds);\n\t\tprintf(&quot;Date is %d\/%d\/%d\\r\\n&quot;,gDate.Date,gDate.Month,gDate.Year);\n\t\tHAL_Delay(500);<\/pre><\/div>\n\n\n\n<p>Thats all for the firmware development.<\/p>\n\n\n\n<p>Save the project, build it and run it on your STM32H563Zi board.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2024\/07\/2024-07-12_15-03-3.jpg\" alt=\"\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Results:<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>After the running the project, open your favourite serial terminal and set the baud rate to 115200 and you should get the RTC values as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"733\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_11-34-53-1024x733.jpg\" alt=\"\" class=\"wp-image-3157\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_11-34-53-1024x733.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_11-34-53-300x215.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_11-34-53-768x550.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_11-34-53-1150x823.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_11-34-53-750x537.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_11-34-53-400x286.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_11-34-53-250x179.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/01\/2025-01-11_11-34-53.jpg 1168w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Happy coding \ud83d\ude09<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this guide on RTC (Real-Time Clock), we shall explore the features of the RTC on STM32H5, its functional block diagram, and how to develop a driver using STM32CubeMX. In this guide, we shall cover the following: \u2022 What is RTC. \u2022 STM32CubeIDE Configuration. \u2022 Firmware development. \u2022 Results. 1. What is RTC: Introduction to [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,11,12],"tags":[],"class_list":["post-3151","post","type-post","status-publish","format-standard","hentry","category-embedded-systems","category-peripheral-drivers","category-stm32"],"_links":{"self":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3151"}],"collection":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3151"}],"version-history":[{"count":1,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3151\/revisions"}],"predecessor-version":[{"id":3158,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/3151\/revisions\/3158"}],"wp:attachment":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}