2019-03-23 20:17发布
这我的程序,写的应该是延时一秒的,可实际却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); }}
最多设置5个标签!
这我的程序,写的应该是延时一秒的,可实际却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)
[ 本帖最后由 wx837078933 于 2011-9-25 00:10 编辑 ]{
//使能线上时钟,
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);
}
}
一周热门 更多>