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;
}
}
分享到:
相关推荐
TIM2是STM32F内建的定时器之一,具备16位或32位计数器,可以设置不同的工作模式来满足不同需求。 首先,我们需要配置TIM2的基本参数。这包括选择工作模式(如向上计数、向上/向下计数等)、预分频器(用于设定系统...
STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用于各种嵌入式系统中,其强大的定时器功能是其重要特性之一。本教程将详细讲解STM32的通用定时器(General Purpose Timers,GPT)编程,涵盖比较输出、PWM(脉宽...
1. 减小预分频因子,以提高定时器的分辨率,但可能会增加定时器溢出的频率,需要权衡。 2. 调整输入滤波器参数,以适应不同的噪声环境。 3. 优化中断处理代码,减少中断响应时间和处理时间。 4. 如果可能,采用更...
当定时器溢出(即达到自动重载值)时,会产生中断。我们需要定义中断处理函数TIM2_IRQHandler(),并在其中处理倒计时逻辑,如递减计数变量、更新显示屏内容,并重新装载定时器的自动重载值。 为了将倒计时结果显示...
在主从模式设置中,选择一个高级定时器作为主定时器(如TIM1),通用定时器作为从定时器(如TIM2)。最后,通过设置特定的寄存器位来选择主模式和从模式,并启动定时器。 级联技术使得在设计中,可以使用相对简单且...
// 定时器溢出中断处理 } } ``` 在实际项目中,开发者还需要注意中断服务函数的编写,确保在定时器中断发生时执行恰当的操作,例如更新状态、发送数据或执行其他任务。 总之,STM32F103C8T6的Timer功能强大且...
STM32通用定时器基本定时功能 STM32微控制器具有11个定时器,包括2个高级控制定时器、4个普通定时器、2个基本定时器、2个看门狗定时器和1个系统嘀嗒定时器。今天,我们将学习STM32通用定时器的基本定时功能,以TIM2...
在STM32中,系统定时器(SysTick)是处理器核心自带的一种通用定时器,适用于实时操作系统(RTOS)的调度、周期性任务的执行以及简单的计时功能。本例程主要探讨如何利用系统定时器实现中断方式的LED灯闪烁,以下将...
4. **自动装载值**:设置定时器的重载值,决定了定时器溢出的时间周期。 5. **中断和DMA配置**:根据需要启用或禁用定时器中断和DMA请求。 **中断处理** 在STM32F103中,每个定时器都有一套完整的中断标志,例如...
3. **自动重载值设置**:通过TIMx_ARR寄存器设置定时器的自动重载值,这个值决定了定时器溢出的时间,即定时器的周期。例如,如果预分频为1000,ARR设置为100,则定时器周期为1ms。 4. **捕获/比较通道**:每个...
【基于定时器的计时器】是一个典型的嵌入式系统应用,主要涉及到STM32微控制器的使用。STM32是意法半导体公司推出的基于ARM Cortex-M内核的微控制器系列,广泛应用于各种嵌入式设计,包括实时操作系统、硬件驱动、...
在中断和事件配置中,勾选TIM3的更新事件(Update Event),这样每当定时器溢出时,都会触发中断。接着,STM32CubeMX会自动生成中断服务函数`HAL_TIM_PeriodElapsedCallback()`,在此函数中添加LED的翻转逻辑。 ...
Timer2是STM32中的一种通用定时器,适用于多种计时和脉冲处理任务。在本例程中,我们将探讨如何在使用KEIL开发环境的情况下,对STM32F207的Timer2进行配置和编程。 Timer2是STM32中的16位定时器,它可以工作在不同...
STM32系列芯片提供了多种类型的计时器,包括基本定时器(TIM15-TIM17)、通用定时器(TIM2-TIM5)和高级定时器(TIM6-TIM7)。其中,通用定时器功能最为全面,支持定时、脉宽调制(PWM)、捕获和比较等多种模式,...
1. **STM32定时器**: STM32F103内含多个定时器,如TIM1、TIM2、TIM3等,它们可以被配置为不同模式,如自由运行、向上计数、向下计数、捕获/比较等。在这个实验中,我们使用了定时器3(TIM3),它是一个16位的定时器...
当特定的RTC事件发生,如定时器溢出或外部事件触发,MCU可以从STOP模式中被唤醒,从而执行相应的处理程序。 首先,为了实现RTC唤醒功能,我们需要配置RTC。这包括设置RTC时钟源、预分频因子、闹钟值等。RTC时钟源...
- TIMx_ARR寄存器的ARR[15:0]位用于设置自动重装载值,决定了定时器溢出周期。 3. 输入捕获滤波器设置: - TIMx_CR1寄存器的CKD[1:0]位设置时钟分频因子,影响滤波效果。 - TIMx_CCMR1寄存器的ICIF[7:4]位设置...
在这个项目中,开发者利用STM32的硬件定时器功能实现了一个简单的倒计时功能,并通过串行通信接口(UART)与串口调试助手进行交互,同时控制LED的状态。 1. **STM32硬件定时器**:STM32系列MCU内置了多种类型的...