STM32F4之TIMER定时器

本文先对STM32F4的不同种类定时器的功能上的区别进行了介绍,后对TIM5的基本定时以及PWM输出进行了完整的示例。

目录

STM32定时器区别

1、定时器初始化配置

2、PWM 脉冲输出配置

1)引脚初始化配置

2)定时器模式初始化配置 PWM模式

3、中断优先级初始化

4、使能定时器

定时器中断服务函数

初始化定时器参数


STM32定时器区别

STM32定时器区别
定时器种类位数计数器模式产生DMA请求捕获/比较通道互补输出特殊应用场景
高级定时器(TIM1,TIM8)16向上,向下,向上/向下可以4带可编程死区的互补输出
通用定时器(TIM2,TIM5)32向上,向下,向上/向下可以4通用。定时计数,PWM输出,输入捕获,输出比较
通用定时器(TIM3,TIM4)16向上,向下,向上/向下可以4通用。定时计数,PWM输出,输入捕获,输出比较
用定时器(TIM9~TIM14)16向上没有2通用。定时计数,PWM输出,输入捕获,输出比较
基本定时器(TIM6,TIM7)16向上,向下,向上/向下可以0主要应用于驱动DAC


时定器,复引用脚,功能,有着对应关系

例,void TIM5_Init(unsigned short arr,unsigned short psc)

1、定时器初始化配置

//1、时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);

//2、定时器初始化配置 配置定时间隔
TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;

TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;     //时钟分频因子 
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_Period = arr;  //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);    //初始化TIM5

2、PWM 脉冲输出配置

1)引脚初始化配置

//1)引脚初始化配置
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);      //GPIOx 时钟使能
GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5);     //GPIOx_x复用为定时器x

GPIO_InitTypeDef     GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin     = GPIO_Pin_0;           //GPIOA_x
GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_AF;         //复用功能
GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_100MHz;    //速度100MHz
GPIO_InitStructure.GPIO_OType   = GPIO_OType_PP;        //推挽复用输出
GPIO_InitStructure.GPIO_PuPd    = GPIO_PuPd_UP;         //上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);

2)定时器模式初始化配置 PWM模式

//2)定时器模式初始化配置 PWM模式

TIM_OCInitTypeDef      TIM_OCInitStructure;
//初始化TIMx Channelx PWM模式
TIM_OCInitStructure.TIM_OCMode     = TIM_OCMode_PWM1;  //选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_Pulse = (arr+1)*0.5;  //CCR 设置占空比
TIM_OCInitStructure.TIM_OCPolarity     = TIM_OCPolarity_Low;//输出极性:TIM输出比较极性低
TIM_OC1Init(TIM5, &TIM_OCInitStructure);//根据T指定的参数初始化外设TIMx OC1

TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Enable);  //使能TIMx在CCR2上的预装载寄存器
TIM_ARRPreloadConfig(TIM5, ENABLE);//ARPE使能

3、中断优先级初始化

若需要使用定时器中断函数,则进行 中断优先级初始化配置

NVIC_InitTypeDef  NVIC_InitStructure;
/* 设置中断管理 */
NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn; //定时器5中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;     //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;         //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);  

TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);//使能TIM5的更新中断

4、使能定时器

TIM_Cmd(TIM5,ENABLE); //使能定时器

定时器中断服务函数

若需要使用定时器中断函数,则添加 定时器中断服务函数

void TIM5_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM5, TIM_IT_Update) == SET)
	{
        //DO
	}
	TIM_ClearITPendingBit(TIM5, TIM_IT_Update);
}

初始化定时器参数

TIM5_Init(100-1,840-1); //1ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃~鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值