微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32 通用定时器的几种配置方式

STM32 通用定时器的几种配置方式

时间:11-25 来源:互联网 点击:

TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM1; //ARR与CCRx比较结果对OCxREF采用PWM1模式
TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable; //输出使能通道4
TIM_OCInitStructure.TIM_Pulse =CCR4_VAL;
//TIM_ITConfig(TIMx,TIM_IT_CC4,ENABLE); //PWM就没有必要设置中断 当然也可以在中断里面改变占空比

TIM_OC4Init(TIMx,&TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIMx,TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIMx,ENABLE); //开启ARR预装载
TIM_Cmd(TIMx,ENABLE); //启动定时器
}

void Time_OUT_PWM_Init(void)
{
Time_OUT_PWM_GPIO_Config();
Time_GPIO_Config();
Time_NVIC_Config();
Time_OUT_PWM_Config(); //定时器配置
}

4、PWMI模式

#include"stm32f10x.h"
#include"time.h"

static Time_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel = TIMx_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);
}



static void Time_IN_PWM_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(TIMx_IN_GPIO_RCC,ENABLE);

GPIO_InitStructure.GPIO_Pin =TIMx_IN_Pin;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; //浮空输入模式
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

GPIO_Init(TIMx_IN_Port, &GPIO_InitStructure);
}

static void Time_IN_PWM_Config(void)
{
#if 0
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
#endif
TIM_ICInitTypeDef TIM_ICInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx,ENABLE); //开启时钟
TIM_DeInit(TIM2);
#if 0

TIM_TimeBaseInitStructure.TIM_Prescaler =(100-1); //时钟分频系数
TIM_TimeBaseInitStructure.TIM_Period =(1000-1); //自动重装寄存器 PWM频率:72M/100/1000=720Hz
TIM_TimeBaseInitStructure.TIM_CounterMode =TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision =0; //时钟分频,这里不涉及
#ifdef Time1
TIM_TimeBaseInitStructure.TIM_RepetitionCounter; //This parameter is valid only for TIM1 and TIM8
#endif

TIM_TimeBaseInit(TIMx,&TIM_TimeBaseInitStructure); //配置参数
TIM_ClearITPendingBit(TIMx,TIM_IT_Update); //清除中断标示位
#endif

TIM_ICInitStructure.TIM_Channel =TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity =TIM_ICPolarity_Rising; //上升沿有效
TIM_ICInitStructure.TIM_ICSelection =TIM_ICSelection_DirectTI;//TIM Input 1, 2, 3 or 4 is selected to be
// connected to IC1, IC2, IC3 or IC4, respectively */
TIM_ICInitStructure.TIM_ICPrescaler =TIM_ICPSC_div1; //无预分频
TIM_ICInitStructure.TIM_ICFilter =0x0; //无滤波

TIM_ICInit(TIMx,&TIM_ICInitStructure); //初始化PWM输入模式//参见函数体与参考手册关于PWMI说明
TIM_PWMIConfig(TIMx,&TIM_ICInitStructure);

TIM_SelectInputTrigger(TIMx, TIM_TS_TI2FP2); //选择TI2FP2作为TIMx输入触发 一个信号来之后 启动定时器开始计数

TIM_SelectSlaveMode(TIMx, TIM_SlaveMode_Reset); //选择从模式控制器为复位模式,选中的TRGI上升沿重新初始化计数器
//从模式控制器连接到TI1FP1 TI2FP2 只要两者有效为设置的电平,就会复位计数器 参见TIME结构图

TIM_SelectMasterSlaveMode(TIMx, TIM_MasterSlaveMode_Enable); //使能主从模式 ??????????????????

TIM_Cmd(TIMx, ENABLE);

TIM_ITConfig(TIMx, TIM_IT_CC2, ENABLE);
}

void Time_IN_PWM_Init(void)
{
Time_IN_PWM_GPIO_Config();
Time_NVIC_Config();
Time_IN_PWM_Config(); //定时器配置
}

5、单脉冲模式

#include"stm32f10x.h"
#include"time.h"

static Time_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel = TIMx_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top