提交 b941e6c7 编写于 作者: Z zylx

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

上级 c9d88a8e
...@@ -68,11 +68,11 @@ static rt_err_t set_rtc_time_stamp(time_t time_stamp) ...@@ -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.Year = p_tm->tm_year - 100;
RTC_DateStruct.WeekDay = p_tm->tm_wday + 1; 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; 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; return -RT_ERROR;
} }
...@@ -87,9 +87,17 @@ static void rt_rtc_init(void) ...@@ -87,9 +87,17 @@ static void rt_rtc_init(void)
__HAL_RCC_PWR_CLK_ENABLE(); __HAL_RCC_PWR_CLK_ENABLE();
RCC_OscInitTypeDef RCC_OscInitStruct = {0}; 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.OscillatorType = RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.LSIState = RCC_LSI_OFF;
#endif
HAL_RCC_OscConfig(&RCC_OscInitStruct); HAL_RCC_OscConfig(&RCC_OscInitStruct);
} }
...@@ -99,7 +107,11 @@ static rt_err_t rt_rtc_config(struct rt_device *dev) ...@@ -99,7 +107,11 @@ static rt_err_t rt_rtc_config(struct rt_device *dev)
HAL_PWR_EnableBkUpAccess(); HAL_PWR_EnableBkUpAccess();
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
#ifdef BSP_RTC_USING_LSI
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
#else
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
#endif
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
RTC_Handler.Instance = RTC; RTC_Handler.Instance = RTC;
...@@ -110,13 +122,31 @@ static rt_err_t rt_rtc_config(struct rt_device *dev) ...@@ -110,13 +122,31 @@ static rt_err_t rt_rtc_config(struct rt_device *dev)
#if defined(SOC_SERIES_STM32F1) #if defined(SOC_SERIES_STM32F1)
RTC_Handler.Init.OutPut = RTC_OUTPUTSOURCE_NONE; RTC_Handler.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
RTC_Handler.Init.AsynchPrediv = RTC_AUTO_1_SECOND; 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) #elif defined(SOC_SERIES_STM32F0)
RTC_Handler.Init.AsynchPrediv = 0X7F;
#ifndef SOC_SERIES_STM32F0 /* set the frequency division */
RTC_Handler.Init.SynchPrediv = 0XFF; #ifdef BSP_RTC_USING_LSI
RTC_Handler.Init.AsynchPrediv = 0XA0;
RTC_Handler.Init.SynchPrediv = 0xFA;
#else #else
RTC_Handler.Init.AsynchPrediv = 0X7F;
RTC_Handler.Init.SynchPrediv = 0x0130; 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.HourFormat = RTC_HOURFORMAT_24;
RTC_Handler.Init.OutPut = RTC_OUTPUT_DISABLE; RTC_Handler.Init.OutPut = RTC_OUTPUT_DISABLE;
RTC_Handler.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; 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) ...@@ -142,7 +172,7 @@ static rt_err_t rt_rtc_control(rt_device_t dev, int cmd, void *args)
break; break;
case RT_DEVICE_CTRL_RTC_SET_TIME: 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; result = -RT_ERROR;
} }
...@@ -154,7 +184,7 @@ static rt_err_t rt_rtc_control(rt_device_t dev, int cmd, void *args) ...@@ -154,7 +184,7 @@ static rt_err_t rt_rtc_control(rt_device_t dev, int cmd, void *args)
} }
#ifdef RT_USING_DEVICE_OPS #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,
RT_NULL, RT_NULL,
......
...@@ -46,7 +46,7 @@ STM32F091RC-NuCLEO 开发板是 ST 官方推出的一款基于 ARM Cortex-M0 内 ...@@ -46,7 +46,7 @@ STM32F091RC-NuCLEO 开发板是 ST 官方推出的一款基于 ARM Cortex-M0 内
| I2C | 支持 | | | I2C | 支持 | |
| TIMER | 支持 | | | TIMER | 支持 | |
| ADC | 支持 | | | ADC | 支持 | |
| RTC | 支持 | | | RTC | 支持 | 支持外部晶振和内部低速时钟 |
| PWM | 支持 | | | PWM | 支持 | |
| FLASH | 支持 | | | FLASH | 支持 | |
| IWG | 支持 | | | IWG | 支持 | |
......
...@@ -133,11 +133,23 @@ menu "On-chip Peripheral Drivers" ...@@ -133,11 +133,23 @@ menu "On-chip Peripheral Drivers"
bool "Enable on-chip FLASH" bool "Enable on-chip FLASH"
default n default n
config BSP_USING_ONCHIP_RTC menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC" bool "Enable RTC"
select RT_USING_RTC select RT_USING_RTC
select RT_USING_LIBC select RT_USING_LIBC
default n 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 config BSP_USING_WDT
bool "Enable Watchdog Timer" bool "Enable Watchdog Timer"
......
...@@ -46,7 +46,7 @@ ATK-NANO STM32F103 是正点原子推出的一款基于 ARM Cortex-M3 内核的 ...@@ -46,7 +46,7 @@ ATK-NANO STM32F103 是正点原子推出的一款基于 ARM Cortex-M3 内核的
| UART | 支持 | UART1/2/3 | | UART | 支持 | UART1/2/3 |
| SPI | 支持 | SPI1/2 | | SPI | 支持 | SPI1/2 |
| I2C | 支持 | 软件 I2C | | I2C | 支持 | 软件 I2C |
| RTC | 支持 | | | RTC | 支持 | 支持外部晶振和内部低速时钟 |
| WDT | 支持 | | | WDT | 支持 | |
| ADC | 支持 | | | ADC | 支持 | |
| FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) | | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
......
...@@ -178,11 +178,23 @@ menu "On-chip Peripheral Drivers" ...@@ -178,11 +178,23 @@ menu "On-chip Peripheral Drivers"
bool "Enable on-chip FLASH" bool "Enable on-chip FLASH"
default n default n
config BSP_USING_ONCHIP_RTC menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC" bool "Enable RTC"
select RT_USING_RTC select RT_USING_RTC
select RT_USING_LIBC select RT_USING_LIBC
default n 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 config BSP_USING_WDT
bool "Enable Watchdog Timer" bool "Enable Watchdog Timer"
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
| SPI | 支持 | SPI1/2/3 | | SPI | 支持 | SPI1/2/3 |
| I2C | 支持 | 软件 I2C | | I2C | 支持 | 软件 I2C |
| ADC | 支持 | | | ADC | 支持 | |
| RTC | 支持 | | | RTC | 支持 | 支持外部晶振和内部低速时钟 |
| WDT | 支持 | | | WDT | 支持 | |
| FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) | | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
| SDIO | 暂不支持 | 即将支持 | | SDIO | 暂不支持 | 即将支持 |
......
...@@ -250,11 +250,23 @@ menu "On-chip Peripheral Drivers" ...@@ -250,11 +250,23 @@ menu "On-chip Peripheral Drivers"
default n default n
endif endif
config BSP_USING_ONCHIP_RTC menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC" bool "Enable RTC"
select RT_USING_RTC select RT_USING_RTC
select RT_USING_LIBC select RT_USING_LIBC
default n 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 config BSP_USING_WDT
bool "Enable Watchdog Timer" bool "Enable Watchdog Timer"
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
| SPI | 支持 | SPI1/2/3 | | SPI | 支持 | SPI1/2/3 |
| I2C | 支持 | 软件 I2C | | I2C | 支持 | 软件 I2C |
| ADC | 支持 | | | ADC | 支持 | |
| RTC | 支持 | | | RTC | 支持 | 支持外部晶振和内部低速时钟 |
| WDT | 支持 | | | WDT | 支持 | |
| FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) | | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
| PWM | 支持 | | | PWM | 支持 | |
......
...@@ -193,11 +193,23 @@ menu "On-chip Peripheral Drivers" ...@@ -193,11 +193,23 @@ menu "On-chip Peripheral Drivers"
default 25 default 25
endif endif
config BSP_USING_ONCHIP_RTC menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC" bool "Enable RTC"
select RT_USING_RTC select RT_USING_RTC
select RT_USING_LIBC select RT_USING_LIBC
default n 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 config BSP_USING_WDT
bool "Enable Watchdog Timer" bool "Enable Watchdog Timer"
......
...@@ -54,7 +54,7 @@ armfly-v6 STM32F429 是安富莱推出的一款基于 ARM Cortex-M4 内核的开 ...@@ -54,7 +54,7 @@ armfly-v6 STM32F429 是安富莱推出的一款基于 ARM Cortex-M4 内核的开
| SPI | 支持 | SPI1/2/5 | | SPI | 支持 | SPI1/2/5 |
| I2C | 支持 | 软件 I2C | | I2C | 支持 | 软件 I2C |
| ADC | 支持 | | | ADC | 支持 | |
| RTC | 支持 | | | RTC | 支持 | 支持外部晶振和内部低速时钟 |
| WDT | 支持 | | | WDT | 支持 | |
| FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) | | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
| SDIO | 支持 | | | SDIO | 支持 | |
......
...@@ -182,11 +182,23 @@ menu "On-chip Peripheral Drivers" ...@@ -182,11 +182,23 @@ menu "On-chip Peripheral Drivers"
default n default n
endif endif
config BSP_USING_ONCHIP_RTC menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC" bool "Enable RTC"
select RT_USING_RTC select RT_USING_RTC
select RT_USING_LIBC select RT_USING_LIBC
default n 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 config BSP_USING_WDT
bool "Enable Watchdog Timer" bool "Enable Watchdog Timer"
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
| SPI | 支持 | SPI1/2/5 | | SPI | 支持 | SPI1/2/5 |
| I2C | 支持 | 软件 I2C | | I2C | 支持 | 软件 I2C |
| ADC | 支持 | | | ADC | 支持 | |
| RTC | 支持 | | | RTC | 支持 | 支持外部晶振和内部低速时钟 |
| WDT | 支持 | | | WDT | 支持 | |
| FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) | | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
| SDIO | 支持 | | | SDIO | 支持 | |
......
...@@ -219,11 +219,23 @@ menu "On-chip Peripheral Drivers" ...@@ -219,11 +219,23 @@ menu "On-chip Peripheral Drivers"
default n default n
endif endif
config BSP_USING_ONCHIP_RTC menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC" bool "Enable RTC"
select RT_USING_RTC select RT_USING_RTC
select RT_USING_LIBC select RT_USING_LIBC
default n 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 config BSP_USING_WDT
bool "Enable Watchdog Timer" bool "Enable Watchdog Timer"
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
| SPI | 支持 | SPI1/2/5 | | SPI | 支持 | SPI1/2/5 |
| I2C | 支持 | 软件 I2C | | I2C | 支持 | 软件 I2C |
| ADC | 支持 | | | ADC | 支持 | |
| RTC | 支持 | | | RTC | 支持 | 支持外部晶振和内部低速时钟 |
| WDT | 支持 | | | WDT | 支持 | |
| FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) | | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
| SDIO | 暂不支持 | 即将支持 | | SDIO | 暂不支持 | 即将支持 |
......
...@@ -204,11 +204,23 @@ menu "On-chip Peripheral Drivers" ...@@ -204,11 +204,23 @@ menu "On-chip Peripheral Drivers"
default 23 default 23
endif endif
config BSP_USING_ONCHIP_RTC menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC" bool "Enable RTC"
select RT_USING_RTC select RT_USING_RTC
select RT_USING_LIBC select RT_USING_LIBC
default n 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 config BSP_USING_WDT
bool "Enable Watchdog Timer" bool "Enable Watchdog Timer"
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
| SPI | 支持 | | | SPI | 支持 | |
| I2C | 支持 | 软件 I2C | | I2C | 支持 | 软件 I2C |
| ADC | 支持 | | | ADC | 支持 | |
| RTC | 支持 | | | RTC | 支持 | 支持外部晶振和内部低速时钟 |
| WDT | 支持 | | | WDT | 支持 | |
| PWM | 支持 | | | PWM | 支持 | |
| SDIO | 支持 | | | SDIO | 支持 | |
......
...@@ -216,11 +216,23 @@ menu "On-chip Peripheral Drivers" ...@@ -216,11 +216,23 @@ menu "On-chip Peripheral Drivers"
default 117 default 117
endif endif
config BSP_USING_ONCHIP_RTC menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC" bool "Enable RTC"
select RT_USING_RTC select RT_USING_RTC
select RT_USING_LIBC select RT_USING_LIBC
default n 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 config BSP_USING_WDT
bool "Enable Watchdog Timer" bool "Enable Watchdog Timer"
......
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
| SPI | 支持 | SPI1/x/x | | SPI | 支持 | SPI1/x/x |
| I2C | 支持 | 软件 I2C | | I2C | 支持 | 软件 I2C |
| ADC | 支持 | | | ADC | 支持 | |
| RTC | 支持 | | | RTC | 支持 | 支持外部晶振和内部低速时钟 |
| WDT | 支持 | | | WDT | 支持 | |
| FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) | | FLASH | 支持 | 已适配 [FAL](https://github.com/RT-Thread-packages/fal) |
| SDIO | 支持 | | | SDIO | 支持 | |
......
...@@ -188,11 +188,23 @@ menuconfig BSP_USING_SPI ...@@ -188,11 +188,23 @@ menuconfig BSP_USING_SPI
default 23 default 23
endif endif
config BSP_USING_ONCHIP_RTC menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC" bool "Enable RTC"
select RT_USING_RTC select RT_USING_RTC
select RT_USING_LIBC select RT_USING_LIBC
default n 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 config BSP_USING_WDT
bool "Enable Watchdog Timer" bool "Enable Watchdog Timer"
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
| I2C | 支持 | | | I2C | 支持 | |
| TIM | 支持 | | | TIM | 支持 | |
| ADC | 支持 | | | ADC | 支持 | |
| RTC | 支持 | | | RTC | 支持 | 支持外部晶振和内部低速时钟 |
| WDT | 支持 | | | WDT | 支持 | |
| PWM | 支持 | | | PWM | 支持 | |
| USB Device | 暂不支持 | 即将支持 | | USB Device | 暂不支持 | 即将支持 |
......
...@@ -210,11 +210,23 @@ menu "On-chip Peripheral Drivers" ...@@ -210,11 +210,23 @@ menu "On-chip Peripheral Drivers"
default n default n
endif endif
config BSP_USING_ONCHIP_RTC menuconfig BSP_USING_ONCHIP_RTC
bool "Enable RTC" bool "Enable RTC"
select RT_USING_RTC select RT_USING_RTC
select RT_USING_LIBC select RT_USING_LIBC
default n 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 config BSP_USING_WDT
bool "Enable Watchdog Timer" bool "Enable Watchdog Timer"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册