`
ydbc
  • 浏览: 738009 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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;   			//定时器基准频率8MHz
timInitStruct.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
//最大65536us
void _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
//最大65ms
void _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;   //抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;          //响应优先级1
NVIC_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;   			//定时器基准频率8MHz
timInitStruct.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;
    }
}

分享到:
评论

相关推荐

    STM32F单纯的TIM2定时器溢出中断试验程序

    TIM2是STM32F内建的定时器之一,具备16位或32位计数器,可以设置不同的工作模式来满足不同需求。 首先,我们需要配置TIM2的基本参数。这包括选择工作模式(如向上计数、向上/向下计数等)、预分频器(用于设定系统...

    stm32 定时器程序

    STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用于各种嵌入式系统中,其强大的定时器功能是其重要特性之一。本教程将详细讲解STM32的通用定时器(General Purpose Timers,GPT)编程,涵盖比较输出、PWM(脉宽...

    项目36-stm32定时器测频率.zip

    1. 减小预分频因子,以提高定时器的分辨率,但可能会增加定时器溢出的频率,需要权衡。 2. 调整输入滤波器参数,以适应不同的噪声环境。 3. 优化中断处理代码,减少中断响应时间和处理时间。 4. 如果可能,采用更...

    60s倒计时_STM32倒计时_STM32倒计时_倒计时_complex1wz

    当定时器溢出(即达到自动重载值)时,会产生中断。我们需要定义中断处理函数TIM2_IRQHandler(),并在其中处理倒计时逻辑,如递减计数变量、更新显示屏内容,并重新装载定时器的自动重载值。 为了将倒计时结果显示...

    电子-STM32定时器级联.pdf

    在主从模式设置中,选择一个高级定时器作为主定时器(如TIM1),通用定时器作为从定时器(如TIM2)。最后,通过设置特定的寄存器位来选择主模式和从模式,并启动定时器。 级联技术使得在设计中,可以使用相对简单且...

    STM32F103C8T6 Timer定时器用例

    // 定时器溢出中断处理 } } ``` 在实际项目中,开发者还需要注意中断服务函数的编写,确保在定时器中断发生时执行恰当的操作,例如更新状态、发送数据或执行其他任务。 总之,STM32F103C8T6的Timer功能强大且...

    STM32-通用定时器基本定时功能

    STM32通用定时器基本定时功能 STM32微控制器具有11个定时器,包括2个高级控制定时器、4个普通定时器、2个基本定时器、2个看门狗定时器和1个系统嘀嗒定时器。今天,我们将学习STM32通用定时器的基本定时功能,以TIM2...

    STM32 系统定时器中断方式例程

    在STM32中,系统定时器(SysTick)是处理器核心自带的一种通用定时器,适用于实时操作系统(RTOS)的调度、周期性任务的执行以及简单的计时功能。本例程主要探讨如何利用系统定时器实现中断方式的LED灯闪烁,以下将...

    STM32F103定时器1-5实验

    4. **自动装载值**:设置定时器的重载值,决定了定时器溢出的时间周期。 5. **中断和DMA配置**:根据需要启用或禁用定时器中断和DMA请求。 **中断处理** 在STM32F103中,每个定时器都有一套完整的中断标志,例如...

    stm32通用定时器延时程序

    3. **自动重载值设置**:通过TIMx_ARR寄存器设置定时器的自动重载值,这个值决定了定时器溢出的时间,即定时器的周期。例如,如果预分频为1000,ARR设置为100,则定时器周期为1ms。 4. **捕获/比较通道**:每个...

    基于定时器的计时器

    【基于定时器的计时器】是一个典型的嵌入式系统应用,主要涉及到STM32微控制器的使用。STM32是意法半导体公司推出的基于ARM Cortex-M内核的微控制器系列,广泛应用于各种嵌入式设计,包括实时操作系统、硬件驱动、...

    cubemx-stm32F103ZETx HAL库-定时器1s灯闪烁

    在中断和事件配置中,勾选TIM3的更新事件(Update Event),这样每当定时器溢出时,都会触发中断。接着,STM32CubeMX会自动生成中断服务函数`HAL_TIM_PeriodElapsedCallback()`,在此函数中添加LED的翻转逻辑。 ...

    STM32F207 Timer2例程 KEIL

    Timer2是STM32中的一种通用定时器,适用于多种计时和脉冲处理任务。在本例程中,我们将探讨如何在使用KEIL开发环境的情况下,对STM32F207的Timer2进行配置和编程。 Timer2是STM32中的16位定时器,它可以工作在不同...

    基于stm32的计时器的代码

    STM32系列芯片提供了多种类型的计时器,包括基本定时器(TIM15-TIM17)、通用定时器(TIM2-TIM5)和高级定时器(TIM6-TIM7)。其中,通用定时器功能最为全面,支持定时、脉宽调制(PWM)、捕获和比较等多种模式,...

    实验4 定时器计时实验.zip

    1. **STM32定时器**: STM32F103内含多个定时器,如TIM1、TIM2、TIM3等,它们可以被配置为不同模式,如自由运行、向上计数、向下计数、捕获/比较等。在这个实验中,我们使用了定时器3(TIM3),它是一个16位的定时器...

    STM32L051低功耗STOP模式下RTC唤醒

    当特定的RTC事件发生,如定时器溢出或外部事件触发,MCU可以从STOP模式中被唤醒,从而执行相应的处理程序。 首先,为了实现RTC唤醒功能,我们需要配置RTC。这包括设置RTC时钟源、预分频因子、闹钟值等。RTC时钟源...

    STM32F10X系列 通用定时器输入捕获及寄存器记录.docx

    - TIMx_ARR寄存器的ARR[15:0]位用于设置自动重装载值,决定了定时器溢出周期。 3. 输入捕获滤波器设置: - TIMx_CR1寄存器的CKD[1:0]位设置时钟分频因子,影响滤波效果。 - TIMx_CCMR1寄存器的ICIF[7:4]位设置...

    计时器+控制灯.rar_STM32倒计时_someone5wd_startxoh_stm32板倒计时_stm32计时

    在这个项目中,开发者利用STM32的硬件定时器功能实现了一个简单的倒计时功能,并通过串行通信接口(UART)与串口调试助手进行交互,同时控制LED的状态。 1. **STM32硬件定时器**:STM32系列MCU内置了多种类型的...

Global site tag (gtag.js) - Google Analytics