OpenEdv-开源电子网

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

关于超声波测距的定时器配置问题

[复制链接]

19

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
466
金钱
466
注册时间
2018-6-8
在线时间
114 小时
发表于 2018-6-29 09:48:20 | 显示全部楼层 |阅读模式
1金钱
我现在用的超声波模块最大距离大约在15-20米使用原子哥的历程后发现定时器配置时,TIM2_Init(u16 per,u16 psc)
per值类型为u16,也就是说最大值在65536,
但是我根据公式得出15米时,需要的计数值为1500*58=87000
那么我的per值不能小于87000,否则无法检测15米左右的距离
如果per为100000-1,那么psc为719
请问:
1.per=100000-1,psc=720-1,这样配置正确吗?
2.如果定时器配置无法改变,是不是可以通过定时器溢出计数来计算距离?

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

使用道具 举报

9

主题

87

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1435
金钱
1435
注册时间
2015-5-19
在线时间
132 小时
发表于 2018-6-29 10:34:29 | 显示全部楼层
可以设置标志位吧,如果说你需要的计数值是87000,而定时器的最大值是65535,你可以在定时器中断函数里面设置一个变量i=0,假如说per设置的是3000,那么需要87000/3000=29次计数,那定时器每次到3000后,产生中断,把中断函数里面的i=i+1,然后判断i是否等于28;当i=28时,跳出定时器就可以了吧。不知道这样是否能解决你的问题。
回复

使用道具 举报

19

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
466
金钱
466
注册时间
2018-6-8
在线时间
114 小时
 楼主| 发表于 2018-6-29 11:00:37 | 显示全部楼层
胖子阳 发表于 2018-6-29 10:34
可以设置标志位吧,如果说你需要的计数值是87000,而定时器的最大值是65535,你可以在定时器中断函数里面设 ...

感谢,程序刚写完,大体思路跟你说的一样,在中断里面设置标志位,等待下降沿信号的同时判断标志位的值。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-28 01:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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