打印
[STM32F1]

STM32F103 TIM4定时器

[复制链接]
317|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
通用定时器(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;

使用特权

评论回复
5
是你的乱码|  楼主 | 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;

使用特权

评论回复
6
是你的乱码|  楼主 | 2022-12-31 23:54 | 只看该作者

使用特权

评论回复
7
是你的乱码|  楼主 | 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);   //调用初始化函数
                        //使能接收中断

使用特权

评论回复
8
是你的乱码|  楼主 | 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控制器中断开关,这一步必须要

使用特权

评论回复
9
是你的乱码|  楼主 | 2022-12-31 23:57 | 只看该作者
失能定时器4
TIM_Cmd(TIM4,DISABLE);                                                                //先失能

使用特权

评论回复
10
是你的乱码|  楼主 | 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);
}
       

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

378

帖子

1

粉丝