初级会员
- 积分
- 87
- 金钱
- 87
- 注册时间
- 2013-3-24
- 在线时间
- 8 小时
|
发表于 2016-8-30 10:20:50
|
显示全部楼层
你开定时器来进行精确定时才行,你这时间也不对比如
/*******************************************************************************
**函数名称:void TIM2_Delayus(unsigned int us)
**功能描述:定时器2参进行精确延时,最小为1微秒,最大65535
**入口参数:unsigned int ms 1=< us <= 65535
**输出:无
*******************************************************************************/
void Delay_us(unsigned int us)
{
TIM2_CR1 = 0x81; //启动定时器2开始计数
while(us--)
{
while( !(TIM2_SR1 & 0x01)); //等待计数是否达到1微秒
TIM2_SR1 &= ~(0x01); //计数完成1毫秒,清除相应的标志
}
TIM2_CR1 = 0x00; //延时全部结束,关闭定时器2
}
/*******************************************************************************
**函数名称:void TIM2_DelayMs(unsigned int ms)
**功能描述:定时器2参进行精确延时,
**入口参数:unsigned int ms
**输出:无
*******************************************************************************/
void Delay_ms(unsigned int ms)
{
uint x = 0 ;
while (ms != x)
{
Delay_us(935);
x += 1;
}
}
/*******************************************************************************
**函数名称:void TIM2_Init()
**功能描述:定时器2参数初始化
**入口参数:无
**输出:无
*******************************************************************************/
void TIM2_Init()
{
TIM2_PSCR = 0x00; //定时器2预分频数为 1 分频,即定时器时钟 = 系统时钟 = 16MHz
TIM2_ARRH = 0x00; //设置1微秒时间自动重载 16000 / 1000 = 0x3e80 / 1000 = 16
TIM2_ARRL = 16; //
TIM2_CNTRH = 0x00; //清除计数寄存器
TIM2_CNTRL = 0x00; //
TIM2_SR1 = 0x00; //清除所有的中断标志
} |
|