深圳网站设计公司让您放心省心,无锡网站定制公司,校园生活网页设计图片模板,网站建设昆明包装设计一.基本定时器简介 STM32F1 系列共有 8 个定时器#xff0c;分别为#xff1a;基本定时器、通用定时器、高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器#xff0c;只能定时#xff0c;没有外部IO。
二.基本定时器功能 上图为基本定时器的功能框…一.基本定时器简介 STM32F1 系列共有 8 个定时器分别为基本定时器、通用定时器、高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器只能定时没有外部IO。
二.基本定时器功能 上图为基本定时器的功能框图。 时钟源定时器时钟TIMxCLK即内部时钟CK_INT。 计数器时钟定时器时钟经过PSC预分频器后即CK_CNT用于驱动计数器计数 。 计数器时钟计算方式CK_CNTTIMxCLK/(PSC1)。 计数器CNT是一个16位的计数器最大计数值是65535。当计数达到自动重载寄存器的时候产生更新事件并清零重头开始计数。 自动重装载寄存器自动重装载寄存器 ARR 是一个 16 位的寄存器这里面装着计数器能计数的最大数值。当计数到这个值的时候如果使能了中断的话定时器就产生溢出中断。 定时时间的计算定时时间计数器的中断周期*中断的次数 1/CK_CNT * (ARR1)。
三.定时器初始化结构体
typedef struct {uint16_t TIM_Prescaler; // 预分频器uint16_t TIM_CounterMode; // 计数模式基本定时器只能使用向上计数uint32_t TIM_Period; // 定时器周期uint16_t TIM_ClockDivision; // 时钟分频基本定时器不用设置uint8_t TIM_RepetitionCounter; // 重复计算器基本定时器不用设置
} TIM_TimeBaseInitTypeDef;TIM_Prescaler:定时器预分频器设置时钟源经过预分频器后才是定时器时钟。TIM_CounterMode:定时器计数方式包含向上计数、向下计数、中心对齐模式。基本定时器只能是向上计数从0开始递增。TIM_Period:定时器周期设定自动重载寄存器的值。
四.源代码
1.定时器初始化设置和中断初始化设置
//baseTimer.c
#include baseTimer.h
void INIT_NVIC_CONFIG(void)
{NVIC_InitTypeDef NVIC_InitStructure;//设置中断分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel TIM6_IRQn;//设置中断源 基本定时器 67NVIC_InitStructure.NVIC_IRQChannelSubPriority 1;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 1;NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE;NVIC_Init(NVIC_InitStructure);
}void INIT_BASETimer_CONFIG(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//开启定时器时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);TIM_TimeBaseInitStructure.TIM_Prescaler 71;//分频因子 CLK/(pre1) 72MHZ/72 1MHZ 10^6HZ 周期是1usTIM_TimeBaseInitStructure.TIM_Period 1000-1;//定时1ms中断 (per1)*计数周期//初始化定时器TIM_TimeBaseInit(TIM6,TIM_TimeBaseInitStructure);//清除计数器中断标志位TIM_ClearFlag(TIM6,TIM_FLAG_Update);//开启计数器中断TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);//使能计数器TIM_Cmd(TIM6,ENABLE);
}2.中断处理函数
//stm32f10x_it.h
void TIM6_IRQHandler(void)
{if(TIM_GetITStatus(TIM6,TIM_IT_Update) SET){Time_Count;TIM_ClearITPendingBit(TIM6,TIM_FLAG_Update);if(Time_Count 1000){Time_Count 0;if(FLAG 0){FLAG 1;}else if(FLAG 1){FLAG 0;}}}
}3.主函数
//main.c
#include stm32f10x.h
#include bsp_colorled.h
#include baseTimer.huint8_t FLAG0;int main(void)
{INIT_LED_CONFIG();CLOSE_LED();INIT_NVIC_CONFIG();INIT_BASETimer_CONFIG();while(1){if(FLAG 0){OPEN_GREEN();}else{CLOSE_LED();}}
}五.实验现象
每隔1s RGB灯绿色交替显示和熄灭工程下载链接STM32-基本定时器