中级会员
 
- 积分
- 294
- 金钱
- 294
- 注册时间
- 2018-5-3
- 在线时间
- 69 小时
|
1金钱
设置出来的delay_ms设置为1秒,但是LED灯闪烁频率很快,定义1S的时间变成200ms了
void RCC_Configuration()
{
// SYSCLK(系统时钟) = 48 MHz
//AHB 总线时钟(HCLK=SYSCLK) = 48 MHz
//APB1 总线时钟(PCLK1=SYSCLK) = 48 MHz
//APB2 总线时钟(PCLK2=SYSCLK) = 48 MHz
//PLL 主时钟 =8/2*12=48 MHz
uint8_t clocksrc ;
RCC_DeInit(); //将外设RCC寄存器重设为缺省值
RCC_HSICmd(ENABLE);//使能内部高速晶振(HSI)
while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET){;}//等待HSI使能成功
RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB(HCLK)时钟=SYSCLK
RCC_PCLKConfig(RCC_HCLK_Div1); //配置APB(PCLK)钟=AHB时钟
/* 选择锁相环(PLL)时钟源为HSI 2分频,倍频数为12,则PLL输出频率为 4MHz * 12 = 48MHz */
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
// 使能PLL
RCC_PLLCmd(ENABLE);
//等待PLL输出稳定
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET){;}
//选择PLL作为系统时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
clocksrc=(uint8_t)(RCC->CFGR & RCC_CFGR_SWS);
while (clocksrc!=0X08){
clocksrc=(uint8_t)(RCC->CFGR & RCC_CFGR_SWS_1);
}
}
void delay_init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//选择外部时钟 HCLK/8
//SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
//fac_us=SystemCoreClock/9600000; //为系统时钟的1/8
fac_us=SystemCoreClock/8000000;
fac_ms=(int16_t)fac_us*1000;//每个ms需要的systick时钟数
}
void delay_ms(int16_t nms)
{
int32_t temp;
SysTick->LOAD=(int32_t)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
//SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
SysTick->CTRL = 0x01;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
//SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->CTRL = 0x00;
SysTick->VAL =0X00; //清空计数器
}
|
|