systick延时不对可能为晶振设置问题:如下 解决问题的方法步骤: 第一:查看自己板子上面的晶振是8M还是25M的第二:查看stm32f4xx.h //如果你板子上的晶振是8M的话,改为 #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ #endif /* HSE_VALUE */ 或者: 在main.h里面加如下: /*8M*/ #if defined (HSE_VALUE) //冲定义HSE_VALUE #undef HSE_VALUE #define HSE_VALUE ((uint32_t)8000000) #endif /* HSE_VALUE */ 第三,system_stm32f4xx.c文件
|
由于systick->VAL 是 24位的 ,所以在HCLK = 168M的时候 ,如果systick设置使用时钟为128M/8(systick->CTRL设置) ,最多能延时 (1/21M)*0xffffff 秒
可编写如下函数
void delay_ms(__IO uint32_t nTime)
{
u32 i ,temp;
u32 load_time = (nTime*21000) >> 24;
SysTick->LOAD=(nTime*21000)&0xffffff - 1;
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->LOAD = 0xffffff ;
for(i = 0 ; i <load_time ; i++)
{
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL =
SysTick_CTRL_ENABLE_Msk;
}
SysTick->CTRL=0x00;
SysTick->VAL =0X00;
}