void clk_init(void) { // disable external oscillator so we can use pins PF0 , PF1 RCC_HSEConfig(RCC_HSE_OFF); // this should be enabled already RCC_HSI_Enable(ENABLE); // wait for HSI to stabilize // this is redundant while( !RCC_GetBitState(RCC_FLAG_HSISTB) ); // this should be enabled already RCC_CK_SYSConfig(RCC_SYSCLKSOURCE_HSI); RCC_PLLConfig(RCC_PLLSOURCE_HSI_DIV2 , 18); RCC_PLL_Enable(ENABLE); // wait for pll to stablilize // this is redundant while( !RCC_GetBitState(RCC_FLAG_PLLSTB) ); RCC_CK_SYSConfig(RCC_SYSCLKSOURCE_PLLCLK); // wait for clock to change to pll while ((RCC->GCFGR & (uint32_t)RCC_GCFGR_SCSS) != (uint32_t)RCC_GCFGR_SCSS_PLL); RCC_AHBConfig(RCC_SYSCLK_DIV1); // config ahb clock divider RCC_APB1Config(RCC_APB1AHB_DIV1); RCC_APB2Config(RCC_APB2AHB_DIV1); }
/** * @brief Select the RTC clock source. * @param None * @retval None */ void RTC_PreConfiguration(void) { /* Enable PWR clock */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_PWR, ENABLE); /* Enable the access of the RTC registers */ PWR_BackupAccess_Enable(ENABLE); #if defined (RTC_CLOCK_SOURCE_LSI) RCC_LSI_Enable(ENABLE); while(RCC_GetBitState(RCC_FLAG_LSISTB) == RESET) { } RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); prescaler_s = 0x18F; prescaler_a = 0x63; #elif defined (RTC_CLOCK_SOURCE_LSE) RCC_LSEConfig(RCC_LSE_EN); while(RCC_GetBitState(RCC_FLAG_LSESTB) == RESET) { } RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); prescaler_s = 0xFF; prescaler_a = 0x7F; #else #error RTC Clock source should be defined. #endif /* RTC_CLOCK_SOURCE_LSI */ RCC_RTCCLK_Enable(ENABLE); RTC_WaitRSF_ToSetAgain(); }
/** * @brief Main program. * @param None * @retval None */ int main(void) { /* Initialize four LEDs mounted on GD32107C-EVAL board */ LED_Init(); /* Enable PWR and BKP clock */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_PWR | RCC_APB1PERIPH_BKP, ENABLE); /* Enable write access to the registers in Backup domain */ PWR_BackupAccess_Enable(ENABLE); /* Clear the bit flag of Tamper Event */ BKP_ClearBitState(); /* Check if the POR/PDR reset flag is set */ if(RCC_GetBitState(RCC_FLAG_POPDRST) != RESET) { /* Clear the RCC all reset flags */ RCC_ClearBitState(); /* Turn on LED4 */ GPIO_SetBits(GPIOE, GPIO_PIN_0); /* Check if Backup data registers has been written */ if(CheckBackupReg(0x1226) == 0x00) { /* Backup data registers values are correct */ /* Turn on LED2 */ GPIO_SetBits(GPIOC, GPIO_PIN_0); } else { /* Backup data registers values are not correct or they are not written*/ /* Write data to Backup data registers */ WriteToBackupReg(0x1226); /* Turn on LED3 */ GPIO_SetBits(GPIOC, GPIO_PIN_2); } } /* Turn on LED5 */ GPIO_SetBits(GPIOE, GPIO_PIN_1); while (1) { } }
/** * @brief Configure system clocks. * @param None * @retval None */ void RCC_Configuration(void) { /* GPIOA, GPIOB, GPIOC and GPIOF clocks enable */ RCC_AHBPeriphClock_Enable( RCC_AHBPERIPH_GPIOA | RCC_AHBPERIPH_GPIOB | RCC_AHBPERIPH_GPIOC | RCC_AHBPERIPH_GPIOF , ENABLE); /* PWR clocks enable */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_PWR, ENABLE); /* Enable LSI clocks and select LSI as the clock for LCD */ PWR_BackupAccess_Enable(ENABLE); RCC_LSI_Enable(ENABLE); while(RCC_GetBitState(RCC_FLAG_LSISTB) == RESET) { } RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); }
/** * @brief Main program. * @param None * @retval None */ int main(void) { /* Configure the USART peripheral ----------------------------------------*/ USART_InitStructure.USART_BRR = 115200; USART_InitStructure.USART_WL = USART_WL_8B; USART_InitStructure.USART_STBits = USART_STBITS_1; USART_InitStructure.USART_Parity = USART_PARITY_RESET; USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE ; USART_InitStructure.USART_RxorTx = USART_RXORTX_RX | USART_RXORTX_TX; GD_EVAL_COMInit(&USART_InitStructure); printf("\n\r *********************** RTC Calendar Demo ***********************\n\r"); /* Check if RTC has aready been configured */ if (RTC->BKP0R != BKP_VALUE) { RTC_PreConfiguration(); RTC_Setup(); } else { /* Detect the reset source */ if (RCC_GetBitState(RCC_FLAG_POPDRST) != RESET) { printf("\r\n Power On Reset Occurred....\n\r"); } else if (RCC_GetBitState(RCC_FLAG_EPRST) != RESET) { printf("\r\n External Reset Occurred....\n\r"); } printf("\n\r No Need To Configure RTC....\n\r"); #ifdef RTC_CLOCK_SOURCE_LSI RCC_LSI_Enable(ENABLE); #endif RTC_WaitRSF_ToSetAgain(); RTC_ClearBitState(RTC_STR_AF); EXTI_ClearIntBitState(EXTI_LINE17); RTC_ShowTime(); RTC_ShowAlarm(); } RCC_ClearBitState(); /* LED1 GPIO Initialization */ RCC_AHBPeriphClock_Enable(LED1_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = LED1_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure); LED1_GPIO_PORT->BOR = LED1_PIN; /* LED2 GPIO Initialization */ RCC_AHBPeriphClock_Enable(LED2_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = LED2_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure); LED2_GPIO_PORT->BOR = LED2_PIN; /* RTC ALARM Interrupt Configuration */ EXTI_ClearIntBitState(EXTI_LINE17); EXTI_InitStructure.EXTI_LINE = EXTI_LINE17; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LINEEnable = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQ = RTC_IRQn; NVIC_InitStructure.NVIC_IRQPreemptPriority = 0; NVIC_InitStructure.NVIC_IRQSubPriority = 0; NVIC_InitStructure.NVIC_IRQEnable = ENABLE; NVIC_Init(&NVIC_InitStructure); while (1) { } }