你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

手动修改CNT让定时器溢出是否产生中断?

[复制链接]
miraclexue 提问时间:2018-7-6 15:20 /
本帖最后由 miraclexue 于 2018-7-6 17:56 编辑

假设定时器设置为向上计数模式,设置为10us溢出:
1、关闭计数器CEN=0
2、手动设置CNT=10
以上两步是否会让定时器不断产生溢出中断?
收藏 评论17 发布时间:2018-7-6 15:20

举报

17个回答
随风飘扬 回答时间:2018-7-10 09:40:52
个人感觉应该不会, 捕获.PNG ,当CNT计数到达之后并不会马上溢出,而是在下一个计数来临时,CNT值变为0,同时产生溢出,你经CEN设置为0,已经禁止了CNT的计数,虽然讲CNT设置为溢出值,但下一个计数始终不会到来,因此CNT值不会自动变为0,也就不会溢出了

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

cloudcn 回答时间:2018-7-11 19:21:00
miraclexue 发表于 2018-7-10 16:52
我在计数器溢出中断中,先关闭计数器,后完成一些操作,然后 想重新打开计数器开启计数,为了确保是从0开 ...

如果是周期性的中断 在溢出中断中清除中断标志位即可,其它的操作硬件都帮你做了,不用关计数器,改CNT

注意的是溢出中断的执行可能比CNT的值延后一些(受压栈指令周期,高优先级中断等因素影响),在中断函数完成前CNT的值会大于零 如果你要求多少个计数周期进进入下次中断时 是可以这样操作的,

其实你可以这样理解 计数器以精确的 固定的 时间间隔置中断标记,但是有中断标记不是立即进入中断函数,会有些延迟,并且延迟时间可能不固定

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

miraclexue 回答时间:2018-7-10 16:44:32
wolfgang2015 发表于 2018-7-10 10:17
1、计数器为什么要手动控制中断?指令根本无法相应那么快;
2、看看计数器的用法是否有误解;
3、人为修改 ...

感谢回复,定时器配置成向上计数,我的程序需要不断地在定时器中断中反复运行,已保证优先级,执行如下:
1、手动设置CNT方式
tim中断()
{
cen = 0;//关闭计数器,此时cnt的值不固定
......
cnt = 0;//保证计数器从0开始计数
cen = 1;//打开计数器
}
2、采用定时器单脉冲模式onePulse
tim中断()
{
//计数器自动停止
......
cen = 1;//打开计数器
}

由于对于第二种方式不是太了解,在这请问以上两种方式哪个好呢?
miraclexue 回答时间:2018-7-6 17:55:44
wenyangzeng 回答时间:2018-7-10 09:37:36
定时器溢出中断条件:
1、CEN=1
2、允许定时器溢出中断,且系统总中断允许
3、CNT计数溢出

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

jakecumt 回答时间:2018-7-10 09:41:48
看下手册只要是可写的手动是可以设置,产生中断的,但是寄存器运行时间很快的,没必要人为设置吧?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wolfgang 回答时间:2018-7-10 10:17:27
1、计数器为什么要手动控制中断?指令根本无法相应那么快;
2、看看计数器的用法是否有误解;
3、人为修改计数器值都不时明智的。系统的周期与指令周期两个不同维度的东西,修改后不一定得到你想要的东西。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

xiajintaord 回答时间:2018-7-10 10:20:54
第一次见到有人这样操作计数器,不知道你要实现什么样的需求

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

cloudcn 回答时间:2018-7-10 12:55:14
估计不可能,ARM 的计数器也是数字逻辑电路
从这个理论讲你改了数据 改到 比目标值 小1 再打开CEN应该可以 触发中断
如果改大了感觉应该溢出 再从0计数 达到目标值才能触发中断

总结就是:计数器没你这么用的,你是在给自己挖坑

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

weiwei4 回答时间:2018-7-10 14:32:19
应该是不会的,要打开定时器才行吧,定时器不打开,那些溢出逻辑应该不会动作的

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

miraclexue 回答时间:2018-7-10 16:45:19
wenyangzeng 发表于 2018-7-10 09:37
定时器溢出中断条件:
1、CEN=1
2、允许定时器溢出中断,且系统总中断允许

感谢回复
miraclexue 回答时间:2018-7-10 16:48:30
yu0405jie 发表于 2018-7-10 09:40
个人感觉应该不会,,当CNT计数到达之后并不会马上溢出,而是在下一个计数来临时,CNT值变为0,同时产生溢 ...

感谢回复,那么请教一下定时器单脉冲模式:假设向上计数
cen = 1;
当计数器溢出(同时自动清除cen),请问此时cnt的值是不是变成0了呢
重新打开cen位,计数器是不是从0开始向上计数呢?
miraclexue 回答时间:2018-7-10 16:49:10
jakecumt 发表于 2018-7-10 09:41
看下手册只要是可写的手动是可以设置,产生中断的,但是寄存器运行时间很快的,没必要人为设置吧? ...

cnt计数器是rw属性,应该可以读写
miraclexue 回答时间:2018-7-10 16:52:02
cloudcn 发表于 2018-7-10 12:55
估计不可能,ARM 的计数器也是数字逻辑电路
从这个理论讲你改了数据 改到 比目标值 小1 再打开CEN应该可以  ...

我在计数器溢出中断中,先关闭计数器,后完成一些操作,然后 想重新打开计数器开启计数,为了确保是从0开始计数,我先将cnt赋值0,然后打开计数器,这样做有问题么?
miraclexue 回答时间:2018-7-10 16:52:27
weiwei4 发表于 2018-7-10 14:32
应该是不会的,要打开定时器才行吧,定时器不打开,那些溢出逻辑应该不会动作的 ...

感谢回复  应该是你说的这样子
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版