TIM(STM32)
一、TIM常见函数




1055初始化时基单元
1063时基单元赋予默认值
1056-1059配置输出比较单元
1064给OC赋予一个默认值
1067开启定时器
1069CNT溢出的时候允许update触发
1073选择内部时钟
1074选择ITRx其他定时器
1075选择TIX捕获通道时钟
1077选择外部模式1
1079选择外部模式2
1081配置ETR极性
1083修改预分频值psc
1084改变计数器模式
1085选择触发源
1092自动重装器预装功能
1096-1099影子寄存器
1100-1103配置快速使能
1108-1114设置极性
1115-1116修改输出使能
1117修改输出比较模式·
1125给计数器写一个值
1126给自动重装器写一个值arr
1127-1130修改CCR值
1140选择当前计数器的值
1041选择当前预分配器值
1143当发生溢出后消除update标志位
二、时基单元

时钟发送频率为F的信号到达预分频器,分频后计数时钟频率为F/(PSC+1),每经过(PSC+1)/F秒 CNT 完成一次计数,CNT 累计计数(ARR+1)次完成一轮计数溢出,通用定时器一轮溢出直接产生一次 Update,高级定时器需要连续完成(RCR+1)轮 CNT 溢出,才会产生一次 Update 事件。
TIM_TimeBaseInitStructure.TIM_ClockDivision=//配置时钟分频
TIM_TimeBaseInitStructure.TIM_CounterMode=//计数器模式
TIM_TimeBaseInitStructure.TIM_Period=//arr自动重装器的值
TIM_TimeBaseInitStructure.TIM_Prescaler=//psc预分频器的值
TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;//重复计数器,只有高级定时器才有
定时器中断

详细步骤:
1.RCC开启时钟(内部时钟)
2.选择时钟模式
3.配置时集单元
4.使能中断输出控制
5.配置NVIC
6.启动定时器(只要使用到TIM就必须开启定时器)
void Timer_Init(void)
{/*开启RCC*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);/*选择时钟模式*/
TIM_InternalClockConfig(TIM2);//内部TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_Inverted,0x00);//外部
/*配置时集单元*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period=10000-1;
TIM_TimeBaseInitStructure.TIM_Prescaler=7200-1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
/*使能中断输出控制*/
TIM_ClearFlag(TIM2,TIM_FLAG_Update);//当发生溢出后消除update标志位
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//CNT溢出的时候允许中断触发
/*配置NVIC*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStructure);
/*开启TIM*/
TIM_Cmd(TIM2,ENABLE);
}
CNT 计数至 ARR 值后发生溢出,生成 Update 更新事件,触发中断
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)
{
Num++;
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
}
三、输出捕获

模式选择(PWM1,PWM2常用)

TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCStructInit(&TIM_OCInitStructure);//下面赋予的变量都是对于基础定时器的,但是当使用高级定时器的时候,会出现错误,因此对初级定时器没有而高级定时器有的变量,赋予一个初始值
TIM_OCInitStructure.TIM_OCMode=//模式选择
TIM_OCInitStructure.TIM_OCPolarity=//极性选择,Hight为不反转,low为反转
TIM_OCInitStructure.TIM_OutputState=//输出使能
TIM_OCInitStructure.TIM_Pulse=//设置CCR值
PWM频率:F/(PSC+1)/(ARR+1)
PWM占空比:CCR/(ARR+1)
PWM分辨率:1/(ARR+1)
四、输入捕获

/*输入捕获*/
TIM_ICInitStructure.TIM_Channel=//选择通道
TIM_ICInitStructure.TIM_ICFilter=//选择滤波器
TIM_ICInitStructure.TIM_ICPolarity=//选择极性
TIM_ICInitStructure.TIM_ICPrescaler=//选择分频器
TIM_ICInitStructure.TIM_ICSelection=//选择交叉输入和直接输入,图上黄色梯形
/*选择触发源*/
TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1);
/*配置从模式*/
TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);

主模式发送信号控制其他
从模式接受信号产生功能


、
更多推荐

所有评论(0)