|
发表于 2012-10-17 09:55:22
|
显示全部楼层
zhangyang86 发表于 2012-10-16 21:57
其实怎么说呢,开发板资料本来就是要公开的。
既然公开,那么何必还藏匿呢??藏匿只会让人反感。。。
...
void delay_init()
{
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
u32 reload;
#endif
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8
fac_us=SystemCoreClock/8000000; //为系统时钟的1/8
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
reload=SystemCoreClock/8000000; //每秒钟的计数次数 单位为K
reload*=1000000/OS_TICKS_PER_SEC;//根据OS_TICKS_PER_SEC设定溢出时间
//reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右
fac_ms=1000/OS_TICKS_PER_SEC;//代表ucos可以延时的最少单位
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //开启SYSTICK中断
SysTick->LOAD=reload; //每1/OS_TICKS_PER_SEC秒中断一次
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启SYSTICK
#else
fac_ms=(u16)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数
#endif
}
通过这个函数如何实现系统时钟的配置的呢?
为何我的这么复杂(参考网上的)
void Derive_MCU_Init(void)
{
//--------------------------- CLK INIT, HSE PLL ----------------------------
// 1. Clocking the controller from internal HSI RC (8 MHz)
RCC_HSICmd(ENABLE);
// wait until the HSI is ready
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
// 2. Enable ext. high frequency OSC
RCC_HSEConfig(RCC_HSE_ON);
// wait until the HSE is ready
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
// 3. Init PLL
#if (__SYSCLK72M==1)
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); // 8*9=72MHz
#elif (__SYSCLK48M==1)
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_6); // 8*6=48MHz
#elif (__SYSCLK36M==1)
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_4); // 8*4=32MHz
#elif (__SYSCLK24M==1)
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_3); // 8*3=24MHz
#endif
RCC_PLLCmd(ENABLE);
// wait until the PLL is ready
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
// 4. Set system clock dividers
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
// 5. Clock system from PLL
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);
//----------------------------- CLOSE HSI ---------------------------
RCC_HSICmd(DISABLE);
//---------------------------- INT CONFIG ---------------------------
//2-level interrupt
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
} |
|