From 2d498d808b93af7475debe3d636e80c03f441763 Mon Sep 17 00:00:00 2001 From: IOsetting Date: Thu, 16 Feb 2023 22:27:03 +0800 Subject: [PATCH] feat: add hse/hsi init functions to bsp --- .../main.c | 25 +++++---- Libraries/BSP_LL/Inc/py32f0xx_bsp_clock.h | 5 +- Libraries/BSP_LL/Src/py32f0xx_bsp_clock.c | 54 ++++++++++++++++++- 3 files changed, 69 insertions(+), 15 deletions(-) diff --git a/Examples/LL/ADC/ADC_SingleConversion_TriggerTimer_DMA/main.c b/Examples/LL/ADC/ADC_SingleConversion_TriggerTimer_DMA/main.c index 2d844cc..bf6648d 100644 --- a/Examples/LL/ADC/ADC_SingleConversion_TriggerTimer_DMA/main.c +++ b/Examples/LL/ADC/ADC_SingleConversion_TriggerTimer_DMA/main.c @@ -14,7 +14,7 @@ static void APP_DMAConfig(void); int main(void) { - BSP_HSI_48MConfig(); + BSP_HSI_PLL_48MConfig(); BSP_USART_Config(115200); printf("ADC Timer Trigger DMA Demo\r\nClock: %ld\r\n", SystemCoreClock); @@ -29,6 +29,17 @@ int main(void) while (1); } +static void APP_TimerInit(void) +{ + LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_TIM1); + LL_TIM_SetPrescaler(TIM1, (SystemCoreClock / 6000) - 1); + LL_TIM_SetAutoReload(TIM1, 6000 - 1); + /* Triggered by update */ + LL_TIM_SetTriggerOutput(TIM1, LL_TIM_TRGO_UPDATE); + + LL_TIM_EnableCounter(TIM1); +} + static void APP_ADCConfig(void) { __IO uint32_t backup_setting_adc_dma_transfer = 0; @@ -79,18 +90,6 @@ static void APP_ADCConfig(void) LL_ADC_Enable(ADC1); } -static void APP_TimerInit(void) -{ - LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_TIM1); - /* Set period to 48000000 for 48MHz clock */ - LL_TIM_SetPrescaler(TIM1, 6000 - 1); - LL_TIM_SetAutoReload(TIM1, 8000 - 1); - /* Triggered by update */ - LL_TIM_SetTriggerOutput(TIM1, LL_TIM_TRGO_UPDATE); - - LL_TIM_EnableCounter(TIM1); -} - static void APP_DMAConfig(void) { LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1); diff --git a/Libraries/BSP_LL/Inc/py32f0xx_bsp_clock.h b/Libraries/BSP_LL/Inc/py32f0xx_bsp_clock.h index acb35f9..75487bb 100644 --- a/Libraries/BSP_LL/Inc/py32f0xx_bsp_clock.h +++ b/Libraries/BSP_LL/Inc/py32f0xx_bsp_clock.h @@ -24,7 +24,10 @@ extern "C" { #include "py32f0xx_ll_gpio.h" #include "py32f0xx_ll_usart.h" -void BSP_HSI_48MConfig(void); +void BSP_HSI_PLL_48MConfig(void); +void BSP_HSI_24MConfig(void); +void BSP_HSE_PLL_Config(void); +void BSP_HSE_Config(void); #ifdef __cplusplus } diff --git a/Libraries/BSP_LL/Src/py32f0xx_bsp_clock.c b/Libraries/BSP_LL/Src/py32f0xx_bsp_clock.c index 36c828a..fef38da 100644 --- a/Libraries/BSP_LL/Src/py32f0xx_bsp_clock.c +++ b/Libraries/BSP_LL/Src/py32f0xx_bsp_clock.c @@ -1,6 +1,6 @@ #include "py32f0xx_bsp_clock.h" -void BSP_HSI_48MConfig(void) +void BSP_HSI_PLL_48MConfig(void) { LL_UTILS_ClkInitTypeDef UTILS_ClkInitStruct; @@ -17,3 +17,55 @@ void BSP_HSI_48MConfig(void) LL_InitTick(48000000, 1000U); } +void BSP_HSI_24MConfig(void) +{ + LL_RCC_HSI_Enable(); + LL_RCC_HSI_SetCalibFreq(LL_RCC_HSICALIBRATION_24MHz); + while(LL_RCC_HSI_IsReady() != 1); + + LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1); + + LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSISYS); + while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSISYS); + + LL_FLASH_SetLatency(LL_FLASH_LATENCY_0); + + LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1); + /* Update global SystemCoreClock(or through SystemCoreClockUpdate function) */ + LL_SetSystemCoreClock(24000000); + /* Re-init frequency of SysTick source */ + LL_InitTick(24000000, 1000U); +} + +void BSP_HSE_PLL_Config(void) +{ + LL_UTILS_ClkInitTypeDef UTILS_ClkInitStruct; + + LL_RCC_HSE_Enable(); + LL_RCC_HSE_SetFreqRegion(LL_RCC_HSE_16_32MHz); + while(LL_RCC_HSE_IsReady() != 1); + + UTILS_ClkInitStruct.AHBCLKDivider = LL_RCC_SYSCLK_DIV_1; + UTILS_ClkInitStruct.APB1CLKDivider = LL_RCC_APB1_DIV_1; + LL_PLL_ConfigSystemClock_HSE(HSE_VALUE, LL_UTILS_HSEBYPASS_OFF, &UTILS_ClkInitStruct); + /* Re-init frequency of SysTick source */ + LL_InitTick(HSE_VALUE * 2, 1000U); +} + +void BSP_HSE_Config(void) +{ + LL_RCC_HSE_Enable(); + LL_RCC_HSE_SetFreqRegion(LL_RCC_HSE_16_32MHz); + while(LL_RCC_HSE_IsReady() != 1); + + LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1); + + LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSE); + while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSE); + + LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1); + /* Update global SystemCoreClock(or through SystemCoreClockUpdate function) */ + LL_SetSystemCoreClock(HSE_VALUE); + /* Re-init frequency of SysTick source */ + LL_InitTick(HSE_VALUE, 1000U); +} \ No newline at end of file