delay函数失效。
按理说这个代码应该2s一个周期使p13针脚高低变换,但我用proteus8.9进行仿真他的周期只有20us,而且无论怎么更改delay的参数周期都是20us。
代码如下
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)));
逻辑判断这里也许有问题