OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 22778|回复: 5

关于STM32F103定时器设置1MS时间不准的问题。

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2011-10-29
在线时间
0 小时
发表于 2013-4-9 15:40:35 | 显示全部楼层 |阅读模式
我通过以下程序设置循环读取当前计数值,比较差值来确定定时的时间。当时现在通过示波器观察设置1ms时,波形上面显示是1.48貌似。STM32系统是72MHz。相关程序如下:

void Time3_Drv_Init(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_TimeBaseStructure.TIM_Period =0xFFFF;                                    //自动重装载寄存器周期的值(定时时间)             1ms
    TIM_TimeBaseStructure.TIM_Prescaler = (36000-1);                            //时钟预分频数,时钟频率=72/(时钟预分频+1)        72*1000-1产生1us周期时钟    
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;                                   // 时间分割值         
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;     //定时器模式  向上计数 
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    TIM_ClearFlag(TIM3,TIM_FLAG_Update);
    TIM_ARRPreloadConfig(TIM3,DISABLE);
    TIM_ITConfig(TIM3, TIM_IT_Update , ENABLE);
    TIM_Cmd(TIM3, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
}

void G1msTimerRes(G1msTimer *Timer)
{
    Timer->StartTime=GetSysTime();
}

uint8_t G1msTimerOver(G1msTimer *Timer,uint16_t CmpTime)
{
    CmpTime *= 0x02; 
return ((uint16_t)(GetSysTime()-Timer->StartTime))>CmpTime?TRUE:FALSE;
}

void Delay_Ms(uint16_t nms)
{
G1msTimer TimerDelay;
G1msTimerRes(&TimerDelay);                              //复位,取当前计数值
    while(1)
{
if(G1msTimerOver(&TimerDelay,nms))
{
break;
}
}                 
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-4-9
在线时间
0 小时
发表于 2013-4-9 20:15:44 | 显示全部楼层
apb1外设的最高频率是36MHz,在增强型模块框图找到信息!
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-9 15:51:29 | 显示全部楼层
回复【楼主位】小爱迪生:
---------------------------------
1,有没考虑定时器计数器溢出的情况?
2,你的定时器配置,计数频率是72Mhz,是不是你统计方法有问题了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2011-10-29
在线时间
0 小时
 楼主| 发表于 2013-4-9 17:06:24 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥
不懂你第二个的意思。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-9 19:41:36 | 显示全部楼层
你的定时器没有分频,计数频率为72Mhz,不是你说的1Mhz
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-4-9
在线时间
0 小时
发表于 2013-4-9 20:14:08 | 显示全部楼层
TIM3不是最多36MHz吗?
你用TIM1试试,TIM1是你这样理解方式对的,72MHz
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-21 16:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表