delay_init(72); //延时初始化
这是原子哥例程里的,那他这里为什么设置这么大?
void delay_init(u8 SYSCLK)
{
SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 HCLK/8
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;
}
按照原子哥的例程,如果设置这么大,那么fac_us就为9,
delay_ms(300);
那这里就延时9×1000×300=2700000个SysTick时钟周期了,根据设置,为外部时钟源,时钟为8M,根据SysTick为时钟源的1/8,也就是,外部时钟8个周期SysTick才反映一次,也就是说8M外部晶振能使SysTick每减一精确到us,这里设置了2700000个SysTick周期,换算一下就是2700000/1000/1000=2.7s
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
LED0=0;
LED1=1;
delay_ms(300);
LED0=1;
LED1=0;
delay_ms(300);
}
}
根据例程1,每2.7秒灯变动一次,实际上测试灯闪动得相当快,所以按照道理来说,SysTick选择外部时钟是指内核时钟外面的时钟,也就是很系统时钟,但我有一点迷糊,所以上来发问。
delay_init(72); //延时初始化
这是原子哥例程里的,那他这里为什么设置这么大?
void delay_init(u8 SYSCLK)
{
SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 HCLK/8
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;
}
按照原子哥的例程,如果设置这么大,那么fac_us就为9,
delay_ms(300);
那这里就延时9×1000×300=2700000个SysTick时钟周期了,根据设置,为外部时钟源,时钟为8M,根据SysTick为时钟源的1/8,也就是,外部时钟8个周期SysTick才反映一次,也就是说8M外部晶振能使SysTick每减一精确到us,这里设置了2700000个SysTick周期,换算一下就是2700000/1000/1000=2.7s
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
LED0=0;
LED1=1;
delay_ms(300);
LED0=1;
LED1=0;
delay_ms(300);
}
}
根据例程1,每2.7秒灯变动一次,实际上测试灯闪动得相当快,所以按照道理来说,SysTick选择外部时钟是指内核时钟外面的时钟,也就是很系统时钟,但我有一点迷糊,所以上来发问。
举报