OpenEdv-开源电子网

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

STM32F7用通用定时器TIM3,

[复制链接]

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-1
在线时间
14 小时
发表于 2017-7-14 21:10:18 | 显示全部楼层 |阅读模式
1金钱
1.    APB1时钟为108MHz
2.    定时器时钟分频因子为4
3.    arr配置为0xFFFF-1,psc配置为0xFFFF-1
4.    那么时间应该是159s,可是在开发板上实验并不是这样,为什么??????????

最佳答案

查看完整内容[请看2#楼]

开发板上试验是什么样子的?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-7-14 21:10:19 | 显示全部楼层
开发板上试验是什么样子的?
回复

使用道具 举报

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-1
在线时间
14 小时
 楼主| 发表于 2017-7-15 09:02:41 | 显示全部楼层
zuozhongkai 发表于 2017-7-15 08:56
开发板上试验是什么样子的?

开发板上试样大约39s
回复

使用道具 举报

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-1
在线时间
14 小时
 楼主| 发表于 2017-7-15 09:28:14 | 显示全部楼层
计算的时间是159s,实验的时间是41s
回复

使用道具 举报

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-1
在线时间
14 小时
 楼主| 发表于 2017-7-15 09:29:27 | 显示全部楼层
    TIM3_Init(0xFFFF-1,0xFFFF-1);


//通用定时器3中断初始化
//arr:自动重装值。
//psc:时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,单位:Mhz
//这里使用的是定时器3!(定时器3挂在APB1上,时钟为HCLK/2)
void TIM3_Init(u16 arr,u16 psc)
{  
    TIM3_Handler.Instance=TIM3;                          //通用定时器3
    TIM3_Handler.Init.Prescaler=psc;                     //分频
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器
    TIM3_Handler.Init.Period=arr;                        //自动装载值
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV4;//时钟分频因子
    HAL_TIM_Base_Init(&TIM3_Handler);
   
    HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE   
}
回复

使用道具 举报

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-1
在线时间
14 小时
 楼主| 发表于 2017-7-15 09:50:56 | 显示全部楼层
本帖最后由 罗马的猫 于 2017-7-15 09:53 编辑

再看看,不急,不急
回复

使用道具 举报

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-1
在线时间
14 小时
 楼主| 发表于 2017-7-15 10:01:44 | 显示全部楼层
时钟频率配置为一分频没问题,只要配置为二分频或者四分频就出问题
捕获.PNG
回复

使用道具 举报

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-1
在线时间
14 小时
 楼主| 发表于 2017-7-15 10:04:34 | 显示全部楼层
我知道了,这个分频系数和定时器的时钟没有关系,哈哈,搞定
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-7-15 10:07:35 | 显示全部楼层
下图中的4分频不是分的定时器的时钟,而是什么数字滤波器的。
}JWAIVV3[SPRVO[R{UFV5I3.png


这个可以看F7的参考手册,设置的什么tDTS是CLKIN的4倍,但是ST官方库注释,什么的都写成”ClockDivision“,导致以为是TIM的时钟分频,见下图

TZ{$KALD78NP`{FA5_J}JMF.png

所以在你的代码中TIM3的分频是108/0xffff。
怎么找问题?
你理解的是159s,实际是39秒。这两者的差距159/39≈4?你的配置中跟4有关的不就是TIM_CLOCKDIVISION_DIV4这个四分频,那么问题肯定是出到这里了。然后去查看参考手册很容易就找出来了

开往春天的手扶拖拉机
回复

使用道具 举报

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2017-6-1
在线时间
14 小时
 楼主| 发表于 2017-7-15 10:12:24 | 显示全部楼层
void TIM3_Init(u16 arr,u16 psc)
{  
    TIM3_Handler.Instance=TIM3;                          //通用定时器3
    TIM3_Handler.Init.Prescaler=psc;                     //分频
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器
    TIM3_Handler.Init.Period=arr;                        //自动装载值
//    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子  其实这一句要不要无所谓,都是以108Mhz计数
    HAL_TIM_Base_Init(&TIM3_Handler);
   
    HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE   
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-18 19:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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