Bladeren bron

[bsp][stm32]添加 RTC 时钟源选择

zylx 6 jaren geleden
bovenliggende
commit
b941e6c730

+ 39 - 9
bsp/stm32/libraries/HAL_Drivers/drv_rtc.c

@@ -68,11 +68,11 @@ static rt_err_t set_rtc_time_stamp(time_t time_stamp)
     RTC_DateStruct.Year    = p_tm->tm_year - 100;
     RTC_DateStruct.WeekDay = p_tm->tm_wday + 1;
 
-    if(HAL_RTC_SetTime(&RTC_Handler, &RTC_TimeStruct, RTC_FORMAT_BIN) != HAL_OK)
+    if (HAL_RTC_SetTime(&RTC_Handler, &RTC_TimeStruct, RTC_FORMAT_BIN) != HAL_OK)
     {
         return -RT_ERROR;
     }
-    if(HAL_RTC_SetDate(&RTC_Handler, &RTC_DateStruct, RTC_FORMAT_BIN) != HAL_OK)
+    if (HAL_RTC_SetDate(&RTC_Handler, &RTC_DateStruct, RTC_FORMAT_BIN) != HAL_OK)
     {
         return -RT_ERROR;
     }
@@ -87,9 +87,17 @@ static void rt_rtc_init(void)
     __HAL_RCC_PWR_CLK_ENABLE();
 
     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+#ifdef BSP_RTC_USING_LSI
+    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;
+    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
+    RCC_OscInitStruct.LSEState = RCC_LSE_OFF;
+    RCC_OscInitStruct.LSIState = RCC_LSI_ON;
+#else
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
     RCC_OscInitStruct.LSEState = RCC_LSE_ON;
+    RCC_OscInitStruct.LSIState = RCC_LSI_OFF;
+#endif
     HAL_RCC_OscConfig(&RCC_OscInitStruct);
 }
 
@@ -99,7 +107,11 @@ static rt_err_t rt_rtc_config(struct rt_device *dev)
 
     HAL_PWR_EnableBkUpAccess();
     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
+#ifdef BSP_RTC_USING_LSI
+    PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
+#else
     PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
+#endif
     HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
 
     RTC_Handler.Instance = RTC;
@@ -110,13 +122,31 @@ static rt_err_t rt_rtc_config(struct rt_device *dev)
 #if defined(SOC_SERIES_STM32F1)
         RTC_Handler.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
         RTC_Handler.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
-#elif defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4)
-        RTC_Handler.Init.AsynchPrediv = 0X7F;
-#ifndef SOC_SERIES_STM32F0
-        RTC_Handler.Init.SynchPrediv = 0XFF;
+#elif defined(SOC_SERIES_STM32F0)
+
+        /* set the frequency division */
+#ifdef BSP_RTC_USING_LSI
+        RTC_Handler.Init.AsynchPrediv = 0XA0;
+        RTC_Handler.Init.SynchPrediv = 0xFA;
 #else
+        RTC_Handler.Init.AsynchPrediv = 0X7F;
         RTC_Handler.Init.SynchPrediv = 0x0130;
-#endif
+#endif /* BSP_RTC_USING_LSI */
+
+        RTC_Handler.Init.HourFormat = RTC_HOURFORMAT_24;
+        RTC_Handler.Init.OutPut = RTC_OUTPUT_DISABLE;
+        RTC_Handler.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
+        RTC_Handler.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
+#elif defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4)
+
+        /* set the frequency division */
+#ifdef BSP_RTC_USING_LSI
+        RTC_Handler.Init.AsynchPrediv = 0X7D;
+#else
+        RTC_Handler.Init.AsynchPrediv = 0X7F;
+#endif /* BSP_RTC_USING_LSI */
+        RTC_Handler.Init.SynchPrediv = 0XFF;
+
         RTC_Handler.Init.HourFormat = RTC_HOURFORMAT_24;
         RTC_Handler.Init.OutPut = RTC_OUTPUT_DISABLE;
         RTC_Handler.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
@@ -142,7 +172,7 @@ static rt_err_t rt_rtc_control(rt_device_t dev, int cmd, void *args)
         break;
 
     case RT_DEVICE_CTRL_RTC_SET_TIME:
-        if(set_rtc_time_stamp(*(rt_uint32_t *)args))
+        if (set_rtc_time_stamp(*(rt_uint32_t *)args))
         {
             result = -RT_ERROR;
         }
@@ -154,7 +184,7 @@ static rt_err_t rt_rtc_control(rt_device_t dev, int cmd, void *args)
 }
 
 #ifdef RT_USING_DEVICE_OPS
-const static struct rt_device_ops rtc_ops = 
+const static struct rt_device_ops rtc_ops =
 {
     RT_NULL,
     RT_NULL,

+ 1 - 1
bsp/stm32/stm32f091-st-nucleo/README.md

@@ -46,7 +46,7 @@ STM32F091RC-NuCLEO 开发板是 ST 官方推出的一款基于 ARM Cortex-M0 内
 | I2C | 支持 |  |
 | TIMER     |     支持     |                               |
 | ADC | 支持 |  |
-| RTC               |   支持   |                               |
+| RTC               |   支持   | 支持外部晶振和内部低速时钟 |
 | PWM               |   支持   |                               |
 | FLASH | 支持 |  |
 | IWG               |   支持   |                               |

+ 13 - 1
bsp/stm32/stm32f091-st-nucleo/board/Kconfig

@@ -133,11 +133,23 @@ menu "On-chip Peripheral Drivers"
         bool "Enable on-chip FLASH"
         default n 
 
-    config BSP_USING_ONCHIP_RTC
+    menuconfig BSP_USING_ONCHIP_RTC
         bool "Enable RTC"
         select RT_USING_RTC
         select RT_USING_LIBC
         default n
+        if BSP_USING_ONCHIP_RTC
+            choice
+                prompt "Select clock source"
+                default BSP_RTC_USING_LSE
+
+                config BSP_RTC_USING_LSE
+                    bool "RTC USING LSE"
+
+                config BSP_RTC_USING_LSI
+                    bool "RTC USING LSI"
+            endchoice
+        endif
 
     config BSP_USING_WDT
         bool "Enable Watchdog Timer"

+ 1 - 1
bsp/stm32/stm32f103-atk-nano/README.md

@@ -46,7 +46,7 @@ ATK-NANO STM32F103 是正点原子推出的一款基于 ARM Cortex-M3 内核的
 | UART              |     支持     | UART1/2/3                             |
 | SPI               |     支持     | SPI1/2                              |
 | I2C               |     支持     | 软件 I2C                              |
-| RTC               |     支持     |                                       |
+| RTC               |     支持     | 支持外部晶振和内部低速时钟 |
 | WDT               |     支持     |                                       |
 | ADC               |     支持     |                                       |
 | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |

+ 13 - 1
bsp/stm32/stm32f103-atk-nano/board/Kconfig

@@ -178,11 +178,23 @@ menu "On-chip Peripheral Drivers"
         bool "Enable on-chip FLASH"
         default n 
 
-    config BSP_USING_ONCHIP_RTC
+    menuconfig BSP_USING_ONCHIP_RTC
         bool "Enable RTC"
         select RT_USING_RTC
         select RT_USING_LIBC
         default n
+        if BSP_USING_ONCHIP_RTC
+            choice
+                prompt "Select clock source"
+                default BSP_RTC_USING_LSE
+
+                config BSP_RTC_USING_LSE
+                    bool "RTC USING LSE"
+
+                config BSP_RTC_USING_LSI
+                    bool "RTC USING LSI"
+            endchoice
+        endif
 
     config BSP_USING_WDT
         bool "Enable Watchdog Timer"

+ 1 - 1
bsp/stm32/stm32f103-fire-arbitrary/README.md

@@ -54,7 +54,7 @@
 | SPI          |     支持     | SPI1/2/3                              |
 | I2C          |     支持     | 软件 I2C                              |
 | ADC          |     支持     |                                      |
-| RTC          |     支持     |                                      |
+| RTC          |     支持     | 支持外部晶振和内部低速时钟 |
 | WDT          |     支持     |                                       |
 | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
 | SDIO         |   暂不支持   | 即将支持                              |

+ 13 - 1
bsp/stm32/stm32f103-fire-arbitrary/board/Kconfig

@@ -250,11 +250,23 @@ menu "On-chip Peripheral Drivers"
                 default n
         endif
 
-    config BSP_USING_ONCHIP_RTC
+    menuconfig BSP_USING_ONCHIP_RTC
         bool "Enable RTC"
         select RT_USING_RTC
         select RT_USING_LIBC
         default n
+        if BSP_USING_ONCHIP_RTC
+            choice
+                prompt "Select clock source"
+                default BSP_RTC_USING_LSE
+
+                config BSP_RTC_USING_LSE
+                    bool "RTC USING LSE"
+
+                config BSP_RTC_USING_LSI
+                    bool "RTC USING LSI"
+            endchoice
+        endif
 
     config BSP_USING_WDT
         bool "Enable Watchdog Timer"

+ 1 - 1
bsp/stm32/stm32f407-atk-explorer/README.md

@@ -53,7 +53,7 @@
 | SPI          |     支持     |               SPI1/2/3                |
 | I2C          |     支持     |               软件 I2C                |
 | ADC          |     支持     |                                       |
-| RTC          |     支持     |                                       |
+| RTC          |     支持     | 支持外部晶振和内部低速时钟 |
 | WDT          |     支持     |                                       |
 | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
 | PWM          |   支持   |                               |

+ 13 - 1
bsp/stm32/stm32f407-atk-explorer/board/Kconfig

@@ -193,11 +193,23 @@ menu "On-chip Peripheral Drivers"
                 default 25
         endif
 
-    config BSP_USING_ONCHIP_RTC
+    menuconfig BSP_USING_ONCHIP_RTC
         bool "Enable RTC"
         select RT_USING_RTC
         select RT_USING_LIBC
         default n
+        if BSP_USING_ONCHIP_RTC
+            choice
+                prompt "Select clock source"
+                default BSP_RTC_USING_LSE
+
+                config BSP_RTC_USING_LSE
+                    bool "RTC USING LSE"
+
+                config BSP_RTC_USING_LSI
+                    bool "RTC USING LSI"
+            endchoice
+        endif
 
     config BSP_USING_WDT
         bool "Enable Watchdog Timer"

+ 1 - 1
bsp/stm32/stm32f429-armfly-v6/README.md

@@ -54,7 +54,7 @@ armfly-v6 STM32F429 是安富莱推出的一款基于 ARM Cortex-M4 内核的开
 | SPI               |     支持     | SPI1/2/5                              |
 | I2C               |     支持     | 软件 I2C                              |
 | ADC               |     支持     |                                     |
-| RTC               |     支持     |                                      |
+| RTC               |     支持     | 支持外部晶振和内部低速时钟 |
 | WDT               |     支持     |                                       |
 | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
 | SDIO              |   支持   |                               |

+ 13 - 1
bsp/stm32/stm32f429-armfly-v6/board/Kconfig

@@ -182,11 +182,23 @@ menu "On-chip Peripheral Drivers"
                 default n
         endif
 
-    config BSP_USING_ONCHIP_RTC
+    menuconfig BSP_USING_ONCHIP_RTC
         bool "Enable RTC"
         select RT_USING_RTC
         select RT_USING_LIBC
         default n
+        if BSP_USING_ONCHIP_RTC
+            choice
+                prompt "Select clock source"
+                default BSP_RTC_USING_LSE
+
+                config BSP_RTC_USING_LSE
+                    bool "RTC USING LSE"
+
+                config BSP_RTC_USING_LSI
+                    bool "RTC USING LSI"
+            endchoice
+        endif
 
     config BSP_USING_WDT
         bool "Enable Watchdog Timer"

+ 1 - 1
bsp/stm32/stm32f429-atk-apollo/README.md

@@ -54,7 +54,7 @@
 | SPI               |     支持     | SPI1/2/5                              |
 | I2C               |     支持     | 软件 I2C                              |
 | ADC               |     支持     |                                     |
-| RTC               |     支持     |                                      |
+| RTC               |     支持     | 支持外部晶振和内部低速时钟 |
 | WDT               |     支持     |                                       |
 | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
 | SDIO              |   支持   |                               |

+ 13 - 1
bsp/stm32/stm32f429-atk-apollo/board/Kconfig

@@ -219,11 +219,23 @@ menu "On-chip Peripheral Drivers"
                 default n
         endif
 
-    config BSP_USING_ONCHIP_RTC
+    menuconfig BSP_USING_ONCHIP_RTC
         bool "Enable RTC"
         select RT_USING_RTC
         select RT_USING_LIBC
         default n
+        if BSP_USING_ONCHIP_RTC
+            choice
+                prompt "Select clock source"
+                default BSP_RTC_USING_LSE
+
+                config BSP_RTC_USING_LSE
+                    bool "RTC USING LSE"
+
+                config BSP_RTC_USING_LSI
+                    bool "RTC USING LSI"
+            endchoice
+        endif
 
     config BSP_USING_WDT
         bool "Enable Watchdog Timer"

+ 1 - 1
bsp/stm32/stm32f429-fire-challenger/README.md

@@ -55,7 +55,7 @@
 | SPI               |     支持     | SPI1/2/5                              |
 | I2C               |     支持     | 软件 I2C                              |
 | ADC               |     支持     |                                     |
-| RTC               |     支持     |                                      |
+| RTC               |     支持     | 支持外部晶振和内部低速时钟 |
 | WDT               |     支持     |                                       |
 | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
 | SDIO              |   暂不支持   | 即将支持                              |

+ 13 - 1
bsp/stm32/stm32f429-fire-challenger/board/Kconfig

@@ -204,11 +204,23 @@ menu "On-chip Peripheral Drivers"
                 default 23
         endif
 
-    config BSP_USING_ONCHIP_RTC
+    menuconfig BSP_USING_ONCHIP_RTC
         bool "Enable RTC"
         select RT_USING_RTC
         select RT_USING_LIBC
         default n
+        if BSP_USING_ONCHIP_RTC
+            choice
+                prompt "Select clock source"
+                default BSP_RTC_USING_LSE
+
+                config BSP_RTC_USING_LSE
+                    bool "RTC USING LSE"
+
+                config BSP_RTC_USING_LSI
+                    bool "RTC USING LSI"
+            endchoice
+        endif
 
     config BSP_USING_WDT
         bool "Enable Watchdog Timer"

+ 1 - 1
bsp/stm32/stm32f767-atk-apollo/README.md

@@ -55,7 +55,7 @@
 | SPI               |     支持     |                                       |
 | I2C               |     支持     | 软件 I2C                              |
 | ADC               |    支持     |                                     |
-| RTC               |     支持     |                                      |
+| RTC               |     支持     | 支持外部晶振和内部低速时钟 |
 | WDT               |     支持     |                                       |
 | PWM               |     支持     |                                       |
 | SDIO              |     支持     |                                       |

+ 13 - 1
bsp/stm32/stm32f767-atk-apollo/board/Kconfig

@@ -216,11 +216,23 @@ menu "On-chip Peripheral Drivers"
                 default 117
         endif
 
-    config BSP_USING_ONCHIP_RTC
+    menuconfig BSP_USING_ONCHIP_RTC
         bool "Enable RTC"
         select RT_USING_RTC
         select RT_USING_LIBC
         default n
+        if BSP_USING_ONCHIP_RTC
+            choice
+                prompt "Select clock source"
+                default BSP_RTC_USING_LSE
+
+                config BSP_RTC_USING_LSE
+                    bool "RTC USING LSE"
+
+                config BSP_RTC_USING_LSI
+                    bool "RTC USING LSI"
+            endchoice
+        endif
 
     config BSP_USING_WDT
         bool "Enable Watchdog Timer"

+ 1 - 1
bsp/stm32/stm32f767-fire-challenger/README.md

@@ -56,7 +56,7 @@
 | SPI               |     支持     | SPI1/x/x                                                |
 | I2C               |     支持     | 软件 I2C                                                |
 | ADC               |     支持     |                                                         |
-| RTC               |     支持     |                                                         |
+| RTC               |     支持     | 支持外部晶振和内部低速时钟                              |
 | WDT               |     支持     |                                                         |
 | FLASH             |     支持     | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
 | SDIO              |     支持     |                                                         |

+ 13 - 1
bsp/stm32/stm32f767-fire-challenger/board/Kconfig

@@ -188,11 +188,23 @@ menuconfig BSP_USING_SPI
                 default 23
         endif
 
-    config BSP_USING_ONCHIP_RTC
+    menuconfig BSP_USING_ONCHIP_RTC
         bool "Enable RTC"
         select RT_USING_RTC
         select RT_USING_LIBC
         default n
+        if BSP_USING_ONCHIP_RTC
+            choice
+                prompt "Select clock source"
+                default BSP_RTC_USING_LSE
+
+                config BSP_RTC_USING_LSE
+                    bool "RTC USING LSE"
+
+                config BSP_RTC_USING_LSI
+                    bool "RTC USING LSI"
+            endchoice
+        endif
 
     config BSP_USING_WDT
         bool "Enable Watchdog Timer"

+ 1 - 1
bsp/stm32/stm32l475-atk-pandora/README.md

@@ -65,7 +65,7 @@
 | I2C               |     支持     |                                      |
 | TIM               |     支持     |                                      |
 | ADC               |     支持     |                                      |
-| RTC               |     支持     |                                      |
+| RTC               |     支持     | 支持外部晶振和内部低速时钟 |
 | WDT               |     支持     |                                      |
 | PWM               |     支持     |                                      |
 | USB Device        |   暂不支持   | 即将支持                              |

+ 13 - 1
bsp/stm32/stm32l475-atk-pandora/board/Kconfig

@@ -210,11 +210,23 @@ menu "On-chip Peripheral Drivers"
                 default n
         endif
 
-    config BSP_USING_ONCHIP_RTC
+    menuconfig BSP_USING_ONCHIP_RTC
         bool "Enable RTC"
         select RT_USING_RTC
         select RT_USING_LIBC
         default n
+        if BSP_USING_ONCHIP_RTC
+            choice
+                prompt "Select clock source"
+                default BSP_RTC_USING_LSE
+
+                config BSP_RTC_USING_LSE
+                    bool "RTC USING LSE"
+
+                config BSP_RTC_USING_LSI
+                    bool "RTC USING LSI"
+            endchoice
+        endif
 
     config BSP_USING_WDT
         bool "Enable Watchdog Timer"