单片机:野火的stm32f103系列
目标:掌握定时器的使用
1、简介:
stm32定时器包括基本定时器、通用定时器、高级定时器。
2、基本配置步骤
使能时钟
// 开启定时器时钟,即内部时钟CK_INT=72M
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
初始化参数
TIM_Prescaler--预分频
// 时钟预分频数
TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM_Prescaler;
TIM_CounterMode--计数模式
// 计数器计数模式,设置为向上计数
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_Period--重装载值
TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM_Period;
TIM_ClockDivision--分频因子
// 时钟分频因子 ,没用到不用管
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_RepetitionCounter--重复计数器,高级定时器才用到
// 重复计数器的值,没用到不用管
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
设置中断优先级并使能
// 中断优先级配置
static void GENERAL_TIM_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
// 设置中断组为0
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
// 设置中断来源
NVIC_InitStructure.NVIC_IRQChannel = GENERAL_TIM_IRQ ;
// 设置主优先级为 0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
// 设置抢占优先级为3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
清楚中断标志位
// 清除计数器中断标志位
TIM_ClearFlag(GENERAL_TIM, TIM_FLAG_Update);
总结:
使用stm32的定时器功能,首先,需要配置TIM定时器初始化和NVIC中断优先级,配置好后,使用定时器的功能,即计数到一定值,做什么功能。文章来源:https://www.toymoban.com/news/detail-515635.html
一、定时器时钟来自内部时钟72MHz,预分频系数Prescaler的值对72MHz进行缩小,以得到合适的时钟频率,若Prescaler=71时,得到72/(71+1)=1MHz=10^6Hz,则一个周期时间为1/10^6s,自动重装载寄存器的值Period=999时,则定时时间为:(999+1)* (1/10^6)=0.001s。文章来源地址https://www.toymoban.com/news/detail-515635.html
代码
static void GENERAL_TIM_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// 开启定时器时钟,即内部时钟CK_INT=72M
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
//GENERAL_TIM_APBxClock_FUN(GENERAL_TIM_CLK, ENABLE);
// 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM_Period;
// 时钟预分频数
TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM_Prescaler;
// 时钟分频因子 ,没用到不用管
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
// 计数器计数模式,设置为向上计数
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
// 重复计数器的值,没用到不用管
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
// 初始化定时器
TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);
// 清除计数器中断标志位
TIM_ClearFlag(GENERAL_TIM, TIM_FLAG_Update);
// 开启计数器中断
TIM_ITConfig(GENERAL_TIM,TIM_IT_Update,ENABLE);
// 使能计数器
TIM_Cmd(GENERAL_TIM, ENABLE);
}
到了这里,关于stm32之定时器配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!