STM32定时器溢出模式计时设置

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

STM32定时器溢出模式设置


本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.


环境:

主机:WIN7

开发环境:MDK4.23

MCU:STM32F103CBT6


源代码1:

说明:定时器采用TIM2,时钟源为内部8M晶振,向上溢出模式.此定时器用在延时函数,最小可以延时1us,故没有采用中断形式定时.

初始化代码:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//重新将Timer设置为缺省值TIM_DeInit(TIM2);//采用内部时钟给TIM2提供时钟源TIM_InternalClockConfig(TIM2);timInitStruct.TIM_ClockDivision = TIM_CKD_DIV2;      //定时器基准频率8MHztimInitStruct.TIM_Prescaler = 8 - 1;               //计数频率为1us跳转1次timInitStruct.TIM_CounterMode = TIM_CounterMode_Up;   //向上计数timInitStruct.TIM_RepetitionCounter = 0;timInitStruct.TIM_Period = 0;         //这个值实际上就是TIMX->ARR,延时开始时重新设定即可TIM_TimeBaseInit(TIM2, &timInitStruct);TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);      //计数溢出时触发中断TIM_Cmd(TIM2, ENABLE);           //开启计数器


延时函数代码:

//延时1us//最大65536usvoid _delay_us(uint16_t t){ TIM_SetCounter(TIM2,0); TIM_SetAutoreload(TIM2,t - 1); //等待时间到 while (TIM_GetITStatus(TIM2,TIM_FLAG_Update) == 0); //停止计数 TIM_SetAutoreload(TIM2,0); //清中断标志 TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);}//延迟1ms//最大65msvoid _delay_ms(uint8_t t){  if (t > 65) {   t = 65; } _delay_us(t * 1000);}

源代码2:

说明:定时器采用TIM3,时钟源为内部8M晶振,向上溢出模式.此定时器用在长时间计时,最小计时间隔为100us,故采用中断形式定时.

初始化代码:

//中断NVIC设置:允许中断,设置优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;       //更新事件NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   //抢占优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;          //响应优先级1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             //允许中断NVIC_Init(&NVIC_InitStructure);                             //写入设置RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//重新将Timer设置为缺省值TIM_DeInit(TIM3);//采用内部时钟给TIM3提供时钟源TIM_InternalClockConfig(TIM3);timInitStruct.TIM_ClockDivision = TIM_CKD_DIV2;      //定时器基准频率8MHztimInitStruct.TIM_Prescaler = 800 - 1;              //计数频率为100us跳转1次timInitStruct.TIM_CounterMode = TIM_CounterMode_Up;   //向上计数timInitStruct.TIM_RepetitionCounter = 0;timInitStruct.TIM_Period = 0;         //这个值实际上就是TIMX->ARR,延时开始时重新设定即可TIM_TimeBaseInit(TIM3, &timInitStruct);//清溢出中断标志TIM_ClearFlag(TIM3, TIM_FLAG_Update);//禁止ARR预装载缓冲器TIM_ARRPreloadConfig(TIM3, DISABLE);//开启中断TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);     TIM_Cmd(TIM3, ENABLE);           //开启计数器

中断函数代码:

//TIM3中断void TIM3_IRQHandler(void)if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)    {  TIM3->ARR = 0;        //清中断溢出标志   TIM_ClearITPendingBit(TIM3,TIM_FLAG_Update);   //发送信号  Sig_Table.stop_require = 1;    }}

           
<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值