在核心板正常,在proteus仿真就用不了,proteus时钟8MHz,72MHz都不行
int main(void){
Delay_Init();
LED_Init_GPIOC();
while(1){
LED_Flicker();
}
}
void LED_Flicker(void){
Delay_ms(1000);
LED_GPIO_High();
Delay_ms(1000);
LED_GPIO_Low();
}
static u8 fac_us = 0;
static u16 fac_ms = 0;
void Delay_Init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//在misc.c中,选择外部时钟源 HCLK/8
fac_us = SystemCoreClock / 8000000;
fac_ms = (u16)fac_us*1000;
}
void Delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //时间加载
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
void Delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms; //时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
|