初级会员

- 积分
- 161
- 金钱
- 161
- 注册时间
- 2015-1-17
- 在线时间
- 16 小时
|
发表于 2016-7-6 16:13:54
|
显示全部楼层
给你一个STM32F030的内部晶振时钟程序。可以参考下试试051的。
记得把system_stm32f0xx.c中的systemInit中的SetSysClock()注释掉。
[mw_shl_code=c,true]/************************************************************************/
/* 功能:设置根据HSI调整的PLL为主时钟,16Mhz
* 描述:SYSCLK=HCLK=PCLK=16Mhz AHB和APB均未分频
* 形参:
* 返回: */
/************************************************************************/
static void clk_init(void)
{
//我用的是HSI 时钟
__IO uint32_t StartUpCounter = 0, HSIStatus = 0;
RCC->CR |= ((uint32_t)RCC_CR_HSION);
do
{
HSIStatus = RCC->CR & RCC_CR_HSIRDY; //等待HSI稳定,稳定会置1
StartUpCounter++;
} while((HSIStatus == 0) && (StartUpCounter != HSI_STARTUP_TIMEOUT));
if ((RCC->CR & RCC_CR_HSIRDY) != RESET) //如果稳定了,就启动时钟
{
HSIStatus = (uint32_t)0x01;
}
else
{
HSIStatus = (uint32_t)0x00;
}
if (HSIStatus == (uint32_t)0x01) //如果HSI已经启动
{
FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;
/* HCLK = SYSCLK 不分频*/
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
/* PCLK = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;
/* PLL configuration 设置HSI/2=4Mhz为输入 4倍频=PLL时钟16Mhz */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_DIV2 | RCC_CFGR_PLLMULL4);
/* Enable PLL */
RCC->CR |= RCC_CR_PLLON;
/* Wait till PLL is ready */
while((RCC->CR & RCC_CR_PLLRDY) == 0)
{
}
/* 设置PLL为主时钟SYSCLK,即16Mhz,而HCLK,PCLK未分频均即16Mhz */
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) != (uint32_t)RCC_CFGR_SWS_PLL)
{
}
}
//RCC_HSEConfig(RCC_HSE_OFF);
RCC->CR &= ~RCC_CR_HSEON; //关闭HSE
SystemCoreClockUpdate();
}[/mw_shl_code] |
|