stm32能不能在一个程序里面用多个stm32定时器程序

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
& TIM_TimeBaseStructure.TIM_Period = 1; & & & & & & & & //自动装载& TIM_TimeBaseStructure.TIM_Prescaler = 7200; & & & //72M分频率到10KHz& TIM_TimeBaseStructure.TIM_ClockDivision = 0; &&& TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_D &//向下计数& TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);&void Delay(vu32 nCount){& u16 TIMCounter = nC& TIM_Cmd(TIM2, ENABLE);& TIM_SetCounter(TIM2, TIMCounter);& while (TIMCounter&1)& {& & TIMCounter = TIM_GetCounter(TIM2);& }& TIM_Cmd(TIM2, DISABLE);}当 nCount =10000时候,精确延时1秒。void cdz_tim5_init(){& TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure_// &TIM_TimeBaseStructure_delay.TIM_Period = 1;// &TIM_TimeBaseStructure_delay.TIM_Prescaler = 7199;// &TIM_TimeBaseStructure_delay.TIM_ClockDivision = 0;// &TIM_TimeBaseStructure_delay.TIM_CounterMode = TIM_CounterMode_D//// &TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure_delay);// & &RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);// &&// & &TIM_TimeBaseStructure_delay.TIM_Period = 1; & & & & & & & & //自动装载// & &TIM_TimeBaseStructure_delay.TIM_Prescaler = 7200; & & & //72M分频率到10KHz// & &TIM_TimeBaseStructure_delay.TIM_ClockDivision = 0; &// & &TIM_TimeBaseStructure_delay.TIM_CounterMode = TIM_CounterMode_D &//向下计数// & &TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure_delay);& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);& && & TIM_TimeBaseStructure_delay.TIM_Period = 1; & & & & & & & & //自动装载& & TIM_TimeBaseStructure_delay.TIM_Prescaler = 7200; & & & //72M分频率到10KHz& & TIM_TimeBaseStructure_delay.TIM_ClockDivision = 0; && & TIM_TimeBaseStructure_delay.TIM_CounterMode = TIM_CounterMode_D &//向下计数& & TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure_delay);& &}void cdz_delay_ms(u16 nCount){// & &u16 TIMC// & &TIMCounter=nC// & &TIM_Cmd(TIM5,ENABLE);// & &TIM_SetCounter(TIM5,TIMCounter);// & &while(TIMCounter&1)// & &{// & & & &TIMCounter=TIM_GetCounter(TIM5); &&// & &}// & &TIM_Cmd(TIM5,DISABLE);& & & &// & &u16 TIMCounter = nC// & &TIM_Cmd(TIM2, ENABLE);// & &TIM_SetCounter(TIM2, TIMCounter);// & &while (TIMCounter&1)// & &{// & &TIMCounter = TIM_GetCounter(TIM2);// & &}// & &TIM_Cmd(TIM2, DISABLE);& & u16 TIMCounter = nC& & TIM_Cmd(TIM1, ENABLE);& & TIM_SetCounter(TIM1, TIMCounter);& & while (TIMCounter&1)& & {& & TIMCounter = TIM_GetCounter(TIM1);& & }& & TIM_Cmd(TIM1, DISABLE);}用TIM1234没有问题 用TIM567有问题 不延时,原因未明
阅读(6111)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'stm32 通用定时器 精确延时程序',
blogAbstract:'RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);& TIM_TimeBaseStructure.TIM_Period = 1; & & & & & & & & //自动装载& TIM_TimeBaseStructure.TIM_Prescaler = 7200; & & & //72M分频率到10KHz& TIM_TimeBaseStructure.TIM_ClockDivision = 0; &&',
blogTag:'定时器,stm32',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:7,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:1,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}stm32用一个定时器定时两个不同时间? - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
stm32用一个定时器定时两个不同时间?
<div class=""
stm32用一个定时器定时两个不同时间该怎么实现?假设我配置定时时间是一秒,在中断中设置一个变量t,进一次中断t+1,若t=10,清零,证明10s到了;如果再在想要个3s的时间该怎么办?希望给点思路。
已退回3积分
16:00:04  
该类别下有 128 个回答。
该类别下有 19 个回答。
该类别下有 17 个回答。
该类别下有 15 个回答。
该类别下有 14 个回答。
该类别下有 13 个回答。
该类别下有 12 个回答。
该类别下有 12 个回答。
该类别下有 11 个回答。
该类别下有 11 个回答。
该类别下有 10 个回答。
该类别下有 10 个回答。
该类别下有 10 个回答。
该类别下有 9 个回答,其中被选为最佳答案 1 次。
该类别下有 9 个回答。
该类别下有 9 个回答。
该类别下有 8 个回答。
该类别下有 8 个回答。
该类别下有 8 个回答。
该类别下有 8 个回答。
一个定时器中断可以输出多个定时时间,只要把各个时间的公约数作为定时器中断周期即可。例如:定时器中断周期10ms,每次中断A+1,B+1,A=300时输出3s标志,A清0,B=1000时输出10s标志,B清0,周而复始。
一个定时器中断可以输出多个定时时间,只要把各个时间的公约数作为定时器中断周期即可。例如:定时器中断周期10ms,每次中断A+1,B+1,A=300时输出3s标志,A清0,B=1000时输出10s标志,B清0,周而复始。
哦哦哦,居然忘了可以多设几个变量。。。。茅塞顿开啊,O(∩_∩)O谢谢
给你一个STM32的软件定时器代码,研究一下,用一个硬件定时器实现多个软件定时器
下载积分: 积分 -1 分
314.78 KB, 下载次数: 62, 下载积分: 积分 -1 分
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司单片机、电路板
连接器、接插件
其他元器件
STM32定时器的小问题总结
STM32定时器的小问题总结
stm32的定时器用的时候是根据原子开发版的程序直接应用的,用的时候也没有具体的考量,但是在用的时候出现了一个问题,就是定时器的中断在设置之后,并没有打开定时器但是程序执行到这里就会进入中断,如果中断中有其他一些硬件功能,例如在定时器中发送一些数据,而这个时候串口并没有初始化时,就是出现程序死在这里的问题。通过网上查找资料发现是定时器中断标志未清除的问题,调用TIM_ClearFlag函数之后就
stm32的定时器用的时候是根据原子开发版的程序直接应用的,用的时候也没有具体的考量,但是在用的时候出现了一个问题,就是定时器的中断在设置之后,并没有打开定时器但是程序执行到这里就会进入中断,如果中断中有其他一些硬件功能,例如在定时器中发送一些数据,而这个时候串口并没有初始化时,就是出现程序死在这里的问题。通过网上查找资料发现是定时器中断标志未清除的问题,调用TIM_ClearFlag函数之后就不会发生以上问题了。看来在硬件配置时一定要注意这个问题,不管是其他外围设备的初始化都需要注意。之前看到SPI、USART等初始化的时候会经常加上XXX_DeInit()函数,看来也并非多余,对于硬件初始化是很有必要的,纪尽管在手册上看到这些值的初始值都是0,但是在应用中还是出现这种问题,因此今后在应用中一定的多加注意。具体初始化程序如下:void TIM2_Init(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseSNVIC_InitTypeDef NVIC_InitSRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能TIM_DeInit(TIM2);//定时器TIM2初始化TIM_TimeBaseStructure.TIM_Period = 7199; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =9; //设置用来作为TIMx时钟频率除数的预分频值 输出周期为T=(Prescaler+1)(Period+1)/72MTIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位// TIM_ITConfig(TIM2,TIM_IT_UpdateTIM_IT_Trigger,ENABLE ); //使能指定的TIM2中断,允许更新中断TIM_ClearFlag(TIM2 , TIM_FLAG_Update); //清除中断标志TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能指定的TIM2中断,允许更新中断//中断优先级NVIC设置NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级3级 优先级设置最低NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器}这是定时器的更新中断,还有定时捕获模式等,这些可以更加灵活的用于一些需要定时器的问题中,
上一篇:已经是第一篇
型号/产品名
祝博士教育
祝博士教育
祝博士教育我们平时使用定时器的时候多数都是处于开启状态,平时的定时中断书写格式一般是:
void TIM3_IRQHandler(void)
{ if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET){TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//要处理的事件内容。。。。
但是,项目的实验过程中,我使用的定时器处理事件稍微有点特殊,即,定时器不是一直处于开启状态, 而且关闭时候也是在中断里关闭。大概形式这样:
void TIM3_IRQHandler(void)
{ if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET){TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//要处理的事件内容。。。。
TIM_Cmd(TIM3, DISABLE);
//失能(函数外使能)
看似没错,而且也看似正常。但是,处理的事件内容出现了很多未知错误(由于我的这个处理事件有很强的时序性,开始和结束都比较严格),无法正常执行。通过后来的调试中发现(把处理时间改为点灯或者打印输出方式),发现是:TIM_Cmd(TIM3, DISABLE);
扰乱了时序关系。当失能后,其实中断并没有真正失能,还会再进入一次中断,因此事件又被执行了一次,对于时序比较严格的事件,就产生了问题!
找到了原因,因此,我猜测虽然定时器失能并且关闭了定时器,但是可能中断标志位并没真正清除,虽然中断开始已经清除过一次,但估计因为失能使得标志位又被置位了,因此,我在失能前面加了句清除中断更新标志位,如下:
void TIM3_IRQHandler(void)
{ if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET){TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//要处理的事件内容。。。。
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//再清除标志位
TIM_Cmd(TIM3, DISABLE);
//失能(函数外使能)
果然,程序可以正常的时序运行。
比较纳闷关定时器前又得清下标志位,因此引起了另一个好奇心,是不是在其他地方关闭定时器(如主函数),也得这样做才可以。所以对这个好奇心进行了下测试。发现:如果把关闭定时器放到了主函数后,不用再清中断标志位。能正常把定时器关闭,并不会进入中断。
通过这次的问题,浪费了很多时间解决,不过也吸取到了点经验,但对于内在真正原因:在中断里失能和中断外失能效果为什么不一样,暂时还没搞清楚。。。但这个可以作为以后的前车之鉴,以及大家的前车之鉴,少走弯路。
stm32中定时器中断的套路
关于STM32 定时器PWM输出,关闭PWM时,输出引脚电平控制。
STM32F103的11个定时器详解
STM32定时器中断关于何时清除中断的总结
stm32中断学习篇(1)——以定时器为例
STM32 普通定时器(TIM3)中断 实现流水灯实验
STM32F1x系列——定时器中断
STM32_TIM定时-中断
没有更多推荐了,21ic官方微信-->
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
大家用STM32时候一般用什么来定时
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
比如程序1MS或者20MS处理一次的程序,这里时间的基准是用什么定时的?
1,SYSTICK,这个中断优先级是最低的。
2,定时器中断,如果用定时器一般用定时器几?设置的中断优先级应该是最低的吧?
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
KEIL5仿真只支持TIM1234,不支持TIM6,逻辑分析仪不出翻转的电平,害我找了好久原因。也是醉了
资深技术员, 积分 483, 距离下一级还需 17 积分
资深技术员, 积分 483, 距离下一级还需 17 积分
资深技术员, 积分 483, 距离下一级还需 17 积分
资深技术员, 积分 483, 距离下一级还需 17 积分
SysTick就可以了 足以满足要求
技术总监, 积分 41812, 距离下一级还需 8188 积分
技术总监, 积分 41812, 距离下一级还需 8188 积分
技术总监, 积分 41812, 距离下一级还需 8188 积分
技术总监, 积分 41812, 距离下一级还需 8188 积分
这里定时器6能走,就是BASEPRI默认0开启任何中断起的作用吧?
是的,这个是总中断(可屏蔽),每个中断源还有自己独立的中断控制位
高级技术员, 积分 603, 距离下一级还需 397 积分
高级技术员, 积分 603, 距离下一级还需 397 积分
高级技术员, 积分 603, 距离下一级还需 397 积分
高级技术员, 积分 603, 距离下一级还需 397 积分
为了不浪费资源&&在满足前提的条件下当然用系统时钟
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
本帖最后由 qhtflsw 于
11:26 编辑
ARM这种芯片有NMI功能,所以复位后总中断是开启的
这里定时器6能走,就是全部都默认0开启所有中断,那明白了
技术总监, 积分 41812, 距离下一级还需 8188 积分
技术总监, 积分 41812, 距离下一级还需 8188 积分
技术总监, 积分 41812, 距离下一级还需 8188 积分
技术总监, 积分 41812, 距离下一级还需 8188 积分
本帖最后由 ayb_ice 于
11:03 编辑
找了半天手册,没找到哪里有说明是自动开的全局中断,定义好了就自动开咯??
像51核,默认寄存器就是关 ...
ARM这种芯片有NMI功能,所以复位后总中断是开启的
本帖子中包含更多资源
才可以下载或查看,没有帐号?
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
资深技术员, 积分 444, 距离下一级还需 56 积分
全局中断复位后是使能的
找了半天手册,没找到哪里有说明是自动开的全局中断,定义好了就自动开咯??
像51核,默认寄存器就是关全局中断的。
STM32在哪找看的开的全局中断?
技术总监, 积分 41812, 距离下一级还需 8188 积分
技术总监, 积分 41812, 距离下一级还需 8188 积分
技术总监, 积分 41812, 距离下一级还需 8188 积分
技术总监, 积分 41812, 距离下一级还需 8188 积分
为什么STM32不开全局中断也能走定时器6的中断??
全局中断复位后是使能的
都是用定时器吧,32这么多定时器去边拿来用
助理工程师, 积分 1767, 距离下一级还需 233 积分
助理工程师, 积分 1767, 距离下一级还需 233 积分
助理工程师, 积分 1767, 距离下一级还需 233 积分
助理工程师, 积分 1767, 距离下一级还需 233 积分
时间的基准不都是时钟吗?
助理工程师, 积分 1954, 距离下一级还需 46 积分
助理工程师, 积分 1954, 距离下一级还需 46 积分
助理工程师, 积分 1954, 距离下一级还需 46 积分
助理工程师, 积分 1954, 距离下一级还需 46 积分
使用定时器1吧。
助理工程师, 积分 1729, 距离下一级还需 271 积分
助理工程师, 积分 1729, 距离下一级还需 271 积分
助理工程师, 积分 1729, 距离下一级还需 271 积分
助理工程师, 积分 1729, 距离下一级还需 271 积分
把定时器设置为优先级
初级工程师, 积分 2007, 距离下一级还需 993 积分
初级工程师, 积分 2007, 距离下一级还需 993 积分
初级工程师, 积分 2007, 距离下一级还需 993 积分
初级工程师, 积分 2007, 距离下一级还需 993 积分
都可以的,看楼主要使用什么
初级工程师, 积分 2319, 距离下一级还需 681 积分
初级工程师, 积分 2319, 距离下一级还需 681 积分
初级工程师, 积分 2319, 距离下一级还需 681 积分
初级工程师, 积分 2319, 距离下一级还需 681 积分
系统滴答定时器很简单。
初级工程师, 积分 2772, 距离下一级还需 228 积分
初级工程师, 积分 2772, 距离下一级还需 228 积分
初级工程师, 积分 2772, 距离下一级还需 228 积分
初级工程师, 积分 2772, 距离下一级还需 228 积分
一般都是使用timer1
中级工程师, 积分 3163, 距离下一级还需 1837 积分
中级工程师, 积分 3163, 距离下一级还需 1837 积分
中级工程师, 积分 3163, 距离下一级还需 1837 积分
中级工程师, 积分 3163, 距离下一级还需 1837 积分
系统时钟节拍(SysTick)可以
中级工程师, 积分 3012, 距离下一级还需 1988 积分
中级工程师, 积分 3012, 距离下一级还需 1988 积分
中级工程师, 积分 3012, 距离下一级还需 1988 积分
中级工程师, 积分 3012, 距离下一级还需 1988 积分
你要用什么定时器呢
中级工程师, 积分 3225, 距离下一级还需 1775 积分
中级工程师, 积分 3225, 距离下一级还需 1775 积分
中级工程师, 积分 3225, 距离下一级还需 1775 积分
中级工程师, 积分 3225, 距离下一级还需 1775 积分
其他的定时器也可以的。
中级工程师, 积分 3353, 距离下一级还需 1647 积分
中级工程师, 积分 3353, 距离下一级还需 1647 积分
中级工程师, 积分 3353, 距离下一级还需 1647 积分
中级工程师, 积分 3353, 距离下一级还需 1647 积分
SysTick定时器
中级技术员, 积分 219, 距离下一级还需 81 积分
中级技术员, 积分 219, 距离下一级还需 81 积分
中级技术员, 积分 219, 距离下一级还需 81 积分
中级技术员, 积分 219, 距离下一级还需 81 积分
系统时钟就够用 一般情况下
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖
技术高手奖章
人才类勋章
时间类勋章
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
您需要登录后才可以回帖

我要回帖

更多关于 stm32定时器中断 的文章

 

随机推荐