STM32F103 TIM4定时器
通用定时器(TIM)通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。
它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和
PWM)。
使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个
毫秒间调整。
每个定时器都是完全独立的,没有互相共享任何资源。
通用定时器框图
配置流程
1 、开定时器4的时钟
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4,ENABLE); //开系统时钟
定时器4初始化
函数TIM_TimeBaseInit :
参数介绍:
TIM_TimeBaseInitTypeDef structure TIM_TimeBaseInitTypeDef
定义于文件“stm32f10x_tim.h”:
typedef struct { u16 TIM_Period; u16
TIM_Prescaler; u8 TIM_ClockDivision;
u16 TIM_CounterMode;
}TIM_TimeBaseInitTypeDef; TIM_Period TIM_Period 设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在 0x0000 和0xFFFF 之间。 TIM_Prescaler TIM_Prescaler 设置了用来作为 TIMx时钟频率除数的预分频值。它的取值必须在 0x0000 和 0xFFFF 之间。 TIM_ClockDivision TIM_ClockDivision 设置了时钟分割。该参数取值见下表
TIM_TimeBaseInitTypeDef
TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 7200-1;
TIM_TimeBaseStructure.TIM_Prescaler = 10000; TIM_TimeBaseInitTypeDef.TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 7200-1; //设置psc
TIM_TimeBaseStructure.TIM_Prescaler = 10000;//设置ARR = 1000
//7200/72MHZ*10000=1s 即1s钟中断一次
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分频英子位为1
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM4, & TIM_TimeBaseStructure); //调用初始化函数
//使能接收中断
打开更新中断(NVIC开关和定时器外设的中断源开关)
TIM_ITConfig(TIM4,TIM_IT_Update, ENABLE);
NVIC_SetPriority(TIM4_IRQn, NVIC_EncodePriority (7-2, 1, 2)); //将合成的优先级设置给USART1中断源
NVIC_EnableIRQ(TIM4_IRQn); //使能NVIC控制器中断开关,这一步必须要
失能定时器4
TIM_Cmd(TIM4,DISABLE); //先失能
编写中断服务函数
void TIM4_IRQHandler()
{
if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{ //这里写中断结束后需要执行的程序
// printf("aaaaaaaaaa\r\n");
}
TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update);
}
页:
[1]