stm32的delay函数失效

delay函数失效。
按理说这个代码应该2s一个周期使p13针脚高低变换,但我用proteus8.9进行仿真他的周期只有20us,而且无论怎么更改delay的参数周期都是20us。

img

img

代码如下
startup_stm32f10x_md.s

//主函数
#include "stm32f10x.h"                  // Device header

#include "LED.h"

#include "Delay.h"

int main(void)
{
    LED_Init();
    delay_Init();
    while(1)
    {
        LED_Low();
        delay_ms(1000);
        //if(i==100000)
        //{
            LED_High();
            delay_ms(1000);
    //    }
        
    }
}
//delay函数的头文件
#ifndef _DELAY_H
#define _DELAY_H
#include "stm32f10x.h"                  // Device header

void delay_Init(void);
void delay_ms(u16 nms);
extern u32 i;
#endif
/*delay函数*/
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
u32 i=0;
void delay_Init()
{
    ((SysTick_Type*)(0xE000E010))->CTRL &=~(1<<2);
    //i=1;
}

void delay_ms(u16 nms)
{
    u32 temp;
    ((SysTick_Type*)(0xE000E010))->LOAD = (u32)nms*9000;
    ((SysTick_Type*)(0xE000E010))->VAL = 0x00;
    ((SysTick_Type*)(0xE000E010))->CTRL |= 0x01;
    do
    {
        temp = ((SysTick_Type*)(0xE000E010))->CTRL;
    }while((temp&0x01)&&!(temp&(1<<16)));
    
    ((SysTick_Type*)(0xE000E010))->CTRL &=~(1<<0);
    ((SysTick_Type*)(0xE000E010))->VAL = 0x00;
}
//led头文件
#ifndef _LED_H

#define _LED_H


#define GPIO_Pin_Preset                 GPIO_Pin_13
#define GPIO_Preset                                            GPIOC
#define    RCC_APB2Periph_GPIO_Preset            RCC_APB2Periph_GPIOC

void LED_Init(void);
void LED_High(void);
void LED_Low(void);

#endif
//led函数
#include "LED.h"
#include "stm32f10x.h"                  // Device header


void LED_Init(void)
{
    GPIO_InitTypeDef    GPIO_InitStruct;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_Preset, ENABLE);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_Preset;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIO_Preset,&GPIO_InitStruct);
    
}
void LED_High(void)
{
    GPIO_SetBits( GPIO_Preset, GPIO_Pin_Preset);
}
void LED_Low(void)
{
    GPIO_ResetBits( GPIO_Preset, GPIO_Pin_Preset);
}

}while((temp&0x01)&&!(temp&(1<<16)));
逻辑判断这里也许有问题