这我的程序,写的应该是延时一秒的,可实际却3秒左右。。。。大家帮忙看看。。到底咋回事啊。。。。。
#include "stm32f10x.h" // 声明结构体 GPIO_InitTypeDef GPIO_InitStructure; //此句话定义了一个名字叫GPIO_InitStructure的结构体
/*void SysTick_Configuration(void){ SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//设置时钟源为HCLK} */ //2.0库设置方法。。。 //void us_delay(u32 n)//{// u32 flag;// SysTick_SetReload(72000*n);// SysTick_CounterCmd(SysTick_Counter_Clear);// SysTick_CounterCmd(SysTick_Counter_Enable);// do// {// flag=SysTick_GetFlagStatus(SysTick_FLAG_COUNT);// }while(flag!=1);// SysTick_CounterCmd(SysTick_Counter_Disable);// }
u8 us; u16 ms;
void delay_init(){ SysTick->CTRL&=0xfffffffb; us=9; ms=(u16)us*1000;}
void delay_us(u32 n){ u32 temp; SysTick->LOAD=n*us; SysTick->VAL=0x00; SysTick->CTRL=0x01;// do// {temp=(SysTick->CTRL)>>16;// }while(temp!=1); do { temp=SysTick->CTRL; } while(temp&0x01&&!(temp&(1<<16)));//等待时间到达 SysTick->CTRL=0x00; SysTick->VAL=0x00;
}
void delay_ms(u16 n){ u32 temp; SysTick->LOAD=(u32)n*ms; SysTick->VAL=0x00; SysTick->CTRL=0x01;// do// {temp=(SysTick->CTRL)>>16;// }while(temp!=1); do { temp=SysTick->CTRL; } while(temp&0x01&&!(temp&(1<<16)));//等待时间到达 SysTick->CTRL=0x00; SysTick->VAL=0x00;
}
void GPIO_Configuration(void)
{
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ; //第二个引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD,&GPIO_InitStructure); }
int main(void){ //使能线上时钟, RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//使能IO口A和D GPIO_Configuration ();//GPIO初始化 delay_init(72); while (1) { GPIO_ResetBits(GPIOD,GPIO_Pin_2); //D2口置位即输出高电平 delay_ms(1000); GPIO_SetBits (GPIOD,GPIO_Pin_2); delay_ms(1000); }}
[ 本帖最后由 wx837078933 于 2011-9-25 00:10 编辑 ]