是你的乱码 发表于 2022-12-31 23:49

STM32F103 TIM4定时器

通用定时器(TIM)
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。
它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和
PWM)。
使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个
毫秒间调整。
每个定时器都是完全独立的,没有互相共享任何资源。
通用定时器框图


是你的乱码 发表于 2022-12-31 23:51

配置流程
1 、开定时器4的时钟
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4,ENABLE);        //开系统时钟

是你的乱码 发表于 2022-12-31 23:52

定时器4初始化
函数TIM_TimeBaseInit :

是你的乱码 发表于 2022-12-31 23:53

参数介绍:

TIM_TimeBaseInitTypeDef structure TIM_TimeBaseInitTypeDef
定义于文件“stm32f10x_tim.h”:
typedef struct { u16 TIM_Period; u16
TIM_Prescaler; u8 TIM_ClockDivision;
u16 TIM_CounterMode;
}TIM_TimeBaseInitTypeDef;

是你的乱码 发表于 2022-12-31 23:53

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;

是你的乱码 发表于 2022-12-31 23:54

是你的乱码 发表于 2022-12-31 23:55

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);   //调用初始化函数
                        //使能接收中断

是你的乱码 发表于 2022-12-31 23:56

打开更新中断(NVIC开关和定时器外设的中断源开关)

TIM_ITConfig(TIM4,TIM_IT_Update, ENABLE);       
NVIC_SetPriority(TIM4_IRQn, NVIC_EncodePriority (7-2, 1, 2)); //将合成的优先级设置给USART1中断源
NVIC_EnableIRQ(TIM4_IRQn);                                        //使能NVIC控制器中断开关,这一步必须要

是你的乱码 发表于 2022-12-31 23:57

失能定时器4
TIM_Cmd(TIM4,DISABLE);                                                                //先失能

是你的乱码 发表于 2022-12-31 23:59

编写中断服务函数

void TIM4_IRQHandler()
{
    if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
    {      //这里写中断结束后需要执行的程序
       // printf("aaaaaaaaaa\r\n");
   }
      TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update);
}
       
页: [1]
查看完整版本: STM32F103 TIM4定时器