OpenEdv-开源电子网

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

关于定时器初值计算的问题,求助

[复制链接]

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-10-21 15:59:53 | 显示全部楼层 |阅读模式
最近搞一个家伙玩玩,发现用宏定义计算定时器0的初值的时候出现很大的问题,定义之后用printf()函数打印出来得到的数据都不对啊,郁闷啊。请高手帮忙解答一下

代码是这样的:


printf函数代码是:printf("T0MS=%x\r\n",T0MS);
                 printf("T0MS1=%x\r\n",T0MS1);

语句1手动计算的时候的出的是0xdc00,这个公式算出来的和STC官方软件算出来的一样。











现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-10-21 22:27:05 | 显示全部楼层
计算过程中,数据溢出了吧。
不知道是不是这样的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2013-10-22 08:29:31 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
刚开始我也是这么想的,但是unsigned long 这个32位的数据类型的话没有超,回头试下直接用公式来算下。目前暂时直接用0xdc00代替先调试着吧。

但是同一个公式,在12M晶振的系统下这样计算没问题,定时器工作是都是符合设计的,把晶振换到22.1184M的时候就不多,这个公式是通用的,为啥不行呢,这个就想不明白了,是不是走进什么误区了呢?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-10-22 10:53:49 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
你再精简下这个语句吧
TOMS的计算,都超过32位的最大值了。
比如 5000*22118400,就超过2^32次方了。。。
要64位才够用了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2013-10-22 11:09:29 | 显示全部楼层
回复【4楼】正点原子:
--------------------------------
恩,对,回头精简一下,谢原子哥指点
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2013-10-24 16:40:16 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,按你这样的方法精简了一下,还是不行,打印出来变成1了。直接将后面的0给精简掉了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-10-24 23:45:12 | 显示全部楼层
回复【6楼】Badu_Space:
---------------------------------
那就不知道了,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2013-10-25 08:21:08 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
加了强制性类型转换计算就好了,呵呵

#define Time0_VAL 5 //单位为ms
#define MAIN_Fosc 22118400L //定义主时钟
#define T0MS ((u16)((u32)65536 - (u32)(Time0_VAL * MAIN_Fosc / 12000)))
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-10-25 16:31:52 | 显示全部楼层
回复【8楼】Badu_Space:
---------------------------------
学习
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2013-10-25 16:39:23 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
大家这么说,呵呵。。。还得谢谢原子哥指点啊
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 17:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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