}// ⑥ 选择PLL作为系统时钟来源RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;// ⑦ 读取时钟切换状态位,确保PLLCLK被选为系统时钟while((RCC->CFGR&(uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08){ } }else{// 如果HSE启动失败,用户...
& RCC_CR_PLLRDY) == 0) { } /* Select PLL as system clock source */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; /* Wait till PLL is used as system clock source */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) !
在配置系统时钟方面,MM32F0140提供了四个独立的时钟源选项,包括高速内部时钟(HSI)、高速外部时钟(HSE)、锁相环(PLL)和低速内部时钟(LSI)。通过操作RCC_CFGR[SW]寄存器,可以选择合适的时钟源作为系统时钟。同时,通过读取RCC_CFGR[SWS]的值,可以了解当前系统所选择的时钟源。值得注意的是,在启用这些时钟...
通过配置 RCC_CFGR[SW] ,可以选择不同的时钟源作为系统时钟源。通过读取RCC_CFGR[SWS] 的值,可以确定系统时钟源选择。值得注意的是,当使能上述四个时钟源后,需要等待 RCC 寄存器中对应的时钟准备就绪标志被拉高,才能确认时钟源被使能完成。( eg. 配置 RCC_CR[HSION] = 1 也即使能高速内部时钟后, 需要等待 ...
RCC->CFGR &= (uint32_t)0xFF80FFFF; //复位PLLSRC、PLLXTPRE、PLLMUL、 USBPRE/OTGFSPRE,即PLL输入时钟为HSI时钟2分频后的时钟;PLLXTPRE没看懂,留坑;PLLMUL是PLL锁相环倍频系数,这里复位值0000,倍频系数保留;USBPRE/OTGFSPRE没看懂也用不到,留坑。
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; //PLL输出作为系统时钟 /* Wait till PLL is used as system clock source */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)//等待直到PLL成功用作系统时钟源 { }
sw是用户配置系统时钟源,sws是stm32目前的时钟源,修改sw后,等待sws的值与sw相等就怎么切换成功 前者
2、时钟配置寄存器(RCC_CFGR):(复位值为0x0000 0000) 主要功能:系统时钟源切换及状态,AHB、APB1、APB2、ADC、USB预分频,PLL输入时钟源选择及HSE输入PLL分频选择,PLL倍频系数,MCO(PA8)引脚微控制器时钟输出。 3、时钟中断寄存器 (RCC_CIR):(复位值: 0x0000 0000) ...
= RCC->CFGR & RCC_CFGR_SWS;switch (tmp){case 0x00: /* HSI used as system clock */...
那么上面的指令就是干了·这些事:首先加载0x40021004到R0,再从0x40021006处加载一个字节,这个字节相当于RCC_CFGR的[23:16],然后将读取到的原值,将该值与0xD1进行或运算后写回原处。结果就是这几位:PLLMULL[3:0]被置位0111,PLLSRC被置位1。随后,又从0x40021005处加载一个字节,这个字节相当于RCC_CFGR的...