样例1 pokt-f0140 开发板初始化 48MHz 系统时钟
在 SDK 中已有支持的 pokt-f0140 开发板上,在任一样例工程中的 clock_init.c 中,通过 CLOCK_BootToHSE48MHz() 实现 48MHz 系统时钟和总线时钟。其中,HSE的输出时钟频率为12MHz。
主要代码如下:
void CLOCK_BootToHSE48MHz(void){ /* enable HSE.使能HSE时钟。 */ RCC->CR |= RCC_CR_HSEON_MASK; /* check HSE ready mask.时钟准备就绪。 */ while ( RCC_CR_HSERDY_MASK != (RCC->CR & RCC_CR_HSERDY_MASK) ) { } /* F_clko = F_refin * N/(M*P), F_refin = 12M. HSE输出频率为12MHz,倍频系数为8,分频系数为 1*2 = 2,PLL时钟频率为 12*8/2 = 48MHz。 */ RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC(1) /* (pllsrc == 1) ? HSE : HSI. */ | RCC_PLLCFGR_PLLDN(7) /* N = DN+1. */ | RCC_PLLCFGR_PLLDM(1) /* M = DM+1. */ | RCC_PLLCFGR_PLLDP(0) /* P = DP+1. */ | RCC_PLLCFGR_PLLLDS(1) | RCC_PLLCFGR_PLLICTRL(3) /* 10uA. */ ; /* Enable PLL. 使能PLL时钟并等待时钟准备就绪。*/ RCC->CR |= RCC_CR_PLLON_MASK; while((RCC->CR & RCC_CR_PLLRDY_MASK) == 0) { } /* Enable the FLASH prefetch. */ RCC->AHB1ENR |= RCC_AHB1ENR_FLITFEN_MASK; /* enable the access to FLASH. */ FLASH->ACR = FLASH_ACR_LATENCY(1u) /* setup divider: 1 for 48Mhz, 2 for 72MHz.. */ | FLASH_ACR_PRFTBE_MASK /* enable flash prefetch. */ ; /* Setup the dividers for each bus. 为各总线设置分频系数。 */ RCC->CFGR = RCC_CFGR_HPRE(0) /* div=1 for AHB freq. */ | RCC_CFGR_PPRE1(0x0) /* div=1 for APB1 freq. */ | RCC_CFGR_PPRE2(0x0) /* div=1 for APB2 freq. */ | RCC_CFGR_MCO(7) /* use PLL/2 as output. */ ; /* Switch the system clock source to PLL. 选择系统时钟源为PLL。*/ RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW_MASK) | RCC_CFGR_SW(2); /* use PLL as SYSCLK */ /* Wait till PLL is used as system clock source.检查SWS标志,确认系统时钟源设置。 */ while ( (RCC->CFGR & RCC_CFGR_SWS_MASK) != RCC_CFGR_SWS(2) ) { }}样例2 pokt-f0140 开发板使能 GPIOA 模块时钟
在 SDK 中已有支持的 pokt-f0140 开发板上,可以通过以下代码使能 GPIOA 模块时钟。
RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOA, true);样例3 pokt-f0140 开发板复位 GPIOA 模块寄存器
在 SDK 中已有支持的 pokt-f0140 开发板上,可以通过以下代码复位 GPIOA 模块寄存器。
RCC_ResetAHB1Periphs(RCC_AHB1_PERIPH_GPIOA);
|