之前一直用正点原子的sys.h里的延时函数封装库,所以当自己弄一个SysTick的延时函数时,却被它给难住了,实在是笑话了。
我之前是参照正点原子PPT里给的函数写的:
static __IO uint32_t TimingDelay;
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
void SysTick_Handler(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
intmain(void)
{ …
if (SysTick_Config(SystemCoreClock / 1000)) //systick时钟为HCLK,中断时间间隔1ms
{
while (1);
}
while(1)
{ Delay(200);//2ms
…
}
}
编译之后发现老是报错,说我void SysTick_Handler(void)重复定义,在main.c和stm32f103_it.c里面都进行了定义,后来在网上查了一下,发现void SysTick_Handler(void)
这个函数应该在stm32f10x_it.h中进行定义(stm32f10x_it.h专门放置中断函数),并在开头加上extern u32 TimingDelay。这里TImingDelay是24位的,所以取值有范围需要注意!
第一次意识到原来stm32f10x_it.h里的内容可以添加啊哈哈哈。。。