一块STM32F407VG板子,使用外部8M晶振正常,使用407的16M HSI做锁相环的输入,锁相环输出只能最大输出48M,大于48M时调式进不去main()函数。手册中没有见到用HSI总线频率不能超过48M啊,哪位大侠用过HSI,请指点下。谢谢。部分代码如下:
system_stm32f4xx.c中,修改了下面这个函数,使用了HSI。
static void SetSysClock(void)
{
__IO uint32_t StartUpCounter = 0, HSIStatus = 0;
/* Wait till HSE is ready and if Time out is reached exit */
do
{
HSIStatus = RCC->CR & RCC_CR_HSIRDY;
StartUpCounter++;
} while((HSIStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
if ((RCC->CR & RCC_CR_HSIRDY) != RESET)
{
HSIStatus = (uint32_t)0x01;//我的代码下面没判断这个HSIStatus的值
}
else
{
HSIStatus = (uint32_t)0x00;
}
RCC->APB1ENR |= RCC_APB1ENR_PWREN;
PWR->CR |= PWR_CR_VOS;//这个不知道干吗用,去掉我的程序也能运行
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择系统时钟源为PLL
RCC_HCLKConfig(RCC_SYSCLK_Div1);//选择HCLK时钟源
RCC_PCLK1Config(RCC_HCLK_Div4);//选择AHB1总线时钟源
RCC_PCLK2Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSI,8,192,8,8);//主要是这个函数配置,PLLM=8,PLLN=192,PLLP=8,这样算出的PLL输出是16M*192/(8*8)=48M,把PLLP设置成6,4,2的话程序不能运行到main函数中去
RCC_PLLCmd(ENABLE);
while(((RCC->CR )& (RCC_CR_PLLRDY)) == 0)
{
}
/* Configure Flash prefetch, Instruction cache, Data cache and wait state */
FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
/* Select the main PLL as system clock source */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= RCC_CFGR_SW_PLL;
/* Wait till the main PLL is used as system clock source */
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
{
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>