OpenEdv-开源电子网

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

【Timer1 单次定时模式求助】想用stm32f103的Timer1做一个超时计时,每次调用只运行一次,不知怎么弄?

[复制链接]

26

主题

186

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2014-5-30
在线时间
93 小时
发表于 2015-7-29 09:27:07 | 显示全部楼层 |阅读模式
5金钱
如题,最近做一个通信协议,要求超时后重传或放弃通信。

使用的是stm32f103,以前都是用Timer1做循环定时,没有问题,这次把循环想改为:调用一次超时,时间到后定时器自动停止并进入中断,下一次在调用定时函数,再定时一次。

[mw_shl_code=c,true]//定时器1初始化函数 void Timer1_Init(uint16_t u16Time_ms) { RCC->APB2ENR|=BIT11; //TIM1时钟使能 TIM1->ARR=u16Time_ms*10; //设定计数器自动重装值, 如5000×0.1msx10=5000ms中断一次,这里放大了10倍 TIM1->SC=7199; //预分频器7200,得到10KHz[100us=0.1ms]的时钟 TIM1->CR1 |=BIT0; //使能定时器 TIM1->DIER|=BIT0; //允许更新中断,即溢出中断 } //定时器1中断服务程序 void TIM1_UP_IRQHandler(void) { static uint8_t only=0;//--------------------这里定义了一个变量来解决定时器初始化后就进一次中断问题 if(TIM1->SR&BIT0)//溢出中断 { if(only) { only=0; //下面做其他处理 TIM1->CR1 &=~BIT0;//关闭定时器 } only++; } TIM1->SR &=~BIT0;//清除中断标志位 }[/mw_shl_code]



每次调用 如下形式即可。 [mw_shl_code=c,true]Timer1_Init(3000);//超时设置为3秒[/mw_shl_code]
遇到到问题:
1、现在定时器每调用(初始化)一次,调用完后就进入中断一次[好像不止一次],导致定时不准确,怎么不让他初始化后就进去呢?
2、我看手册,timer有单次触发模式,这个模式能否解决我的问题或者实现我的功能呢?
3、是不是每次都得初始化一次定时器,能否只重载某个寄存器即可实现再次定时呢?



最佳答案

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

回复【7楼】正点原子: --------------------------------- 1、为什么会这样呢? 2、初始化后中断只进去一次吗【定时时间未到前】? 如果只进一次的话到可以处理一下,但是多次的话就不好弄了 我测试发现,好像进去不止一次
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

26

主题

186

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2014-5-30
在线时间
93 小时
 楼主| 发表于 2015-7-29 09:27:08 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
1、为什么会这样呢?
2、初始化后中断只进去一次吗【定时时间未到前】?

如果只进一次的话到可以处理一下,但是多次的话就不好弄了

我测试发现,好像进去不止一次
回复

使用道具 举报

26

主题

186

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2014-5-30
在线时间
93 小时
 楼主| 发表于 2015-7-29 11:37:16 | 显示全部楼层
高手没有遇到过???
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-7-29 18:17:34 | 显示全部楼层
开启定时器之前清一次标志位    不用了你把它关了   再次使用你把它打开就好了
回复

使用道具 举报

26

主题

186

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2014-5-30
在线时间
93 小时
 楼主| 发表于 2015-7-29 22:18:06 | 显示全部楼层
回复【3楼】lycreturn:
---------------------------------
不好使啊,我先开启定时器,再清标识【此时标识已经置位】,标识确实清了,但是再开更新中断时

标识又置位了,就进中断了。。
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2015-7-29 23:02:33 | 显示全部楼层
不用了关闭就行啊。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

26

主题

186

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2014-5-30
在线时间
93 小时
 楼主| 发表于 2015-7-30 08:31:06 | 显示全部楼层
回复【5楼】Admin:
---------------------------------

关键是每初始化一次,他马上就中断一次
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-30 21:25:29 | 显示全部楼层
回复【6楼】天山狐狸:
---------------------------------
这个没法避免。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-31 11:26:43 | 显示全部楼层
回复【8楼】天山狐狸:
---------------------------------
1,我也不知道,事实如此而已。
2,是的,只会进入一次,后续就都正常了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 06:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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