STM32F0系列照datasheet上的说法,最高频率可达到48MHZ,但我实际测了一下,无论我怎么提高系统时钟的分频数,速度总是提不上去,整体的时钟频率都保持在16MHZ的范围。就这么说把,我用示波器测了一下。在分频数为2,系统时钟的为16MHZ的情况下,while(1)内代码的执行周期大概为800ns左右,这种情况算是正常;但是在分配数为3、4、5、6,即是系统时钟为24MHZ、32MHZ、40MHZ、48MHZ的情况下,while(1)内代码的执行周期也是为800ns左右,就是感觉16MHZ是个瓶颈,提不上去,这是怎么回事,是我的设置错了吗?我弄的是cortex m0系列的,不知道cortex m3系列的有没有这种情况,望大侠们指教。
以下是部分代码:
int main()
{
GPIO_InitTypeDef GPIO_InitStructure;
SystemClockInit();
/*使能GPIOB时钟*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
/* 配置PB11为输出模式*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
while(1)
{
/* 置位PB11 */ GPIOB->BSRR = 0x800;
/* 复位PB11 */
GPIOB->BRR = 0x800;
}
}
void SystemClockInit(void)
{
/*使能外部晶振*/
RCC->CR |= RCC_CR_HSEON;
while(!(RCC->CR & RCC_CR_HSERDY));
/*PLL时钟分频,分频数为2*/
RCC->CFGR &= ~RCC_CFGR_PLLMULL;
RCC->CFGR |= RCC_CFGR_PLLMULL2;
RCC->CFGR &= RCC_CFGR_PLLSRC;
RCC->CFGR |= RCC_CFGR_PLLSRC_PREDIV1;
RCC->CR |= RCC_CR_PLLON;
while(!(RCC->CR & RCC_CR_PLLRDY));
#if 0
/*现在时钟才 8*2 = 16MHZ
*flash的预存取周期最高为24MHZ
*所以现在不用flash延时*/
/*flash 延时一个周期*/
FLASH->ACR |= FLASH_ACR_PRFTBE ;
FLASH->ACR |= FLASH_ACR_PRFTBS ;
FLASH->ACR |= FLASH_ACR_LATENCY ;
#endif
/*选用PLL时钟为系统时钟*/
RCC->CFGR &= ~RCC_CFGR_SW;
RCC->CFGR |= RCC_CFGR_SW_PLL;
while((RCC->CFGR & RCC_CFGR_SW)!= RCC_CFGR_SW_PLL);
}
|