OpenEdv-开源电子网

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

阿波罗stm32f429输入捕获实验定时器5向下计数,捕获时间明显不对

[复制链接]

13

主题

66

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-1-9
在线时间
41 小时
发表于 2021-10-11 10:34:34 | 显示全部楼层 |阅读模式
1金钱
在看定时器输入捕获实验,自己敲了一遍代码,我自己配置的是定时器2通道1,定时器计数方式为向下计数,然后下载程序通过串口查看结果,捕获高电平时间一直都很长,4千多秒,后来我把定时器2改为定时器5结果一样,和官方代码对比,找到的唯一区别是定时器计数方式不一样官方是向上的,我把代码改成向上计数后实验结果正常,我又把官方代码改成向下计数,发现捕获到高电平时间也很长,定时器计数方式应该不会影响实验结果为啥两种计数方式实验结果会有天壤之别
f96157b794da9f66d3c353ac97b8818.png

最佳答案

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

多谢,这下让我知道了向上计数和向下计数的区别了,以前一直以为就单单是极性有变化程序不需要改动,太有用了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

66

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-1-9
在线时间
41 小时
 楼主| 发表于 2021-10-11 10:34:35 | 显示全部楼层
A571157242 发表于 2021-10-11 17:19
改三个地方就好了,一个是把向上计数改成向下计数,一个是把TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);改 ...

多谢,这下让我知道了向上计数和向下计数的区别了,以前一直以为就单单是极性有变化程序不需要改动,太有用了
回复

使用道具 举报

13

主题

66

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-1-9
在线时间
41 小时
 楼主| 发表于 2021-10-11 10:38:30 | 显示全部楼层
定时器改成向上计数,仿真后按下按键挺长时间都不会进入溢出中断,改成向下计数仿真,只要一按下按键立马进入溢出中断
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4309
金钱
4309
注册时间
2019-9-4
在线时间
896 小时
发表于 2021-10-11 10:41:22 | 显示全部楼层
你可能没理解输入捕获实验的原理…… 你再去看看定时器的中断服务函数,他是获取了定时器的计数器值的,你向上计数是0~最大,向下计数是最大~0,你只改了技术方式,不对应更改中断服务函数,你觉得现象有可能正常吗
回复

使用道具 举报

13

主题

66

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-1-9
在线时间
41 小时
 楼主| 发表于 2021-10-11 10:54:22 | 显示全部楼层
A571157242 发表于 2021-10-11 10:41
你可能没理解输入捕获实验的原理…… 你再去看看定时器的中断服务函数,他是获取了定时器的计数器值的,你 ...

定时器中断开了两个一个是溢出中断,一个是捕获中断,获取计数值是在捕获中断中进行的,溢出中断不需要修改
回复

使用道具 举报

13

主题

66

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-1-9
在线时间
41 小时
 楼主| 发表于 2021-10-11 11:07:58 | 显示全部楼层
A571157242 发表于 2021-10-11 10:41
你可能没理解输入捕获实验的原理…… 你再去看看定时器的中断服务函数,他是获取了定时器的计数器值的,你 ...

就是要修改,而我没修改,溢出中断也不应该一按按键就立马进入
回复

使用道具 举报

13

主题

66

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-1-9
在线时间
41 小时
 楼主| 发表于 2021-10-11 15:16:01 来自手机 | 显示全部楼层
顶一顶
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4309
金钱
4309
注册时间
2019-9-4
在线时间
896 小时
发表于 2021-10-11 17:19:20 | 显示全部楼层
改三个地方就好了,一个是把向上计数改成向下计数,一个是把TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);改成TIM5CH1_CAPTURE_VAL=0XFFFFFFFF-TIM_GetCapture1(TIM5);   【0XFFFFFFFF值不是固定的,看定时器是多少位的,32位的定时器是这个】,最后一个是把TIM_SetCounter(TIM5,0); 改成TIM_SetCounter(TIM5,0XFFFFFFFF);  其他不用改,这样就正常了
回复

使用道具 举报

13

主题

66

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-1-9
在线时间
41 小时
 楼主| 发表于 2021-10-11 19:34:32 | 显示全部楼层
A571157242 发表于 2021-10-11 17:19
改三个地方就好了,一个是把向上计数改成向下计数,一个是把TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);改 ...

还有个问题,就是按照你说的改好后,捕获时间是对的,但是为啥按一下还进溢出中断呢?不应该进中断呀,从0xffffffff~0时间挺长的
回复

使用道具 举报

13

主题

66

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-1-9
在线时间
41 小时
 楼主| 发表于 2021-10-13 23:06:49 | 显示全部楼层
ah669741 发表于 2021-10-11 19:34
还有个问题,就是按照你说的改好后,捕获时间是对的,但是为啥按一下还进溢出中断呢?不应该进中断呀,从 ...

知道了,计数值设置错了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 19:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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