STM32F407定时器编码器模式

发布者:CaptivatingEyes最新更新时间:2018-07-19 来源: eefocus关键字:STM32F407  定时器  编码器模式 手机看文章 扫描二维码
随时随地手机看文章


void encoder_left_Init(void)

{

    GPIO_InitTypeDef         GPIO_InitStructure; 

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    TIM_ICInitTypeDef        TIM_ICInitStructure;

 

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//开启TIM3时钟

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);//开启GPIOB时钟

  

    GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4);//PB0引脚复用

    GPIO_PinAFConfig(GPIOD,GPIO_PinSource13,GPIO_AF_TIM4);//PB1引脚服用

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13; //GPIOB0,GPIOB1

    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;

    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP ;

    GPIO_Init(GPIOD,&GPIO_InitStructure); 

 

 

 

    TIM_TimeBaseStructure.TIM_Period = 65535; //设置下一个更新事件装入活动的自动重装载寄存器周期的值

    TIM_TimeBaseStructure.TIM_Prescaler = 0; //设置用来作为TIMx时钟频率除数的预分频值  不分频

    TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式

    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); 

 

   //设置定时器为编码器模式   IT1  IT2为上升沿和下降沿都计数四倍频

    TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12,TIM_ICPolarity_BothEdge,TIM_ICPolarity_BothEdge);

    TIM_ICStructInit(&TIM_ICInitStructure);

    TIM_ICInitStructure.TIM_ICFilter = 0;  //输入滤波器

    TIM_ICInit(TIM4, &TIM_ICInitStructure);

    TIM_ClearFlag(TIM4, TIM_FLAG_Update);  //清楚所有标志位

    TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); //允许中断更新

    TIM4->CNT = 0;

    TIM_Cmd(TIM4, ENABLE);  //使能TIM3

}

配置定时器的编码器接口的函数。 看reference manual可以看到有那么定时器有编码器接口功能。一般是定时器的通道1和2才能作为编码器输入口,对应编码器输出的两相。


TIMx参数就是使用哪个定时器作为编码器接口的捕捉定时器。

TIM_EncoderMode参数是模式,是单相计数(只能反映速度)还是两相计数(速度和方向)。

TIM_IC1Polarity和TIM_IC2Polarity参数就是通道1、2的捕捉极性。


比如:

1.       Countingon TI1 only:TI2为高时(第一行):TI1上升沿则向下计数,下降沿则向上计数。

1时刻:TI2为低电平,TI1上升沿跳变,计数器向上计数;

3时刻:TI2为高电平,TI1下降沿跳变,计数器仍然向上计数。

2.       Countingon TI1 and TI2:一个周期完成4次跳变。精度提高

1时刻:TI2为低电平,TI1上升沿跳变,计数器向上计数;

2时刻:TI1为高电平,TI2上升沿跳变,计数器仍然向上计数;

3时刻:TI2为高电平,TI1下降沿跳变,计数器仍然向上计数;

4时刻:TI1为低电平,TI2下降沿跳变,计数器仍然向上计数。



关键字:STM32F407  定时器  编码器模式 引用地址:STM32F407定时器编码器模式

上一篇:STM32定时器的编码器模式
下一篇:STM32 SysTick 精确延时(非中断方式)

推荐阅读最新更新时间:2024-03-16 16:09

单片机实验-利用定时器产生方波
ORG 0000H LJMP MAIN ORG 0003H LJMP TOINT ORG 001BH LJMP TOINT1 ORG 0030HMAIN: MOV SP,#60H SETB IT0 SETB EX0 SETB EA SJMP $TOINT:MOV TMOD,#10H MOV TH1,#0FEH MOV TL1,#0CH SETB ET1 SETB TR1 RETITOINT1:MOV TH1,#0FEH MOV TL1,#0CH CPL P1.0 RETI END
[单片机]
STM32F4高级定时器产生六路互补PWM波
一、使用高级定时器TIM8; 二、使用引脚:CH1-PC6, CH1N-PA5, CH2-PC7, CH2N-PB0,CH3-PC8,CH3N-PB1; 三、使用的寄存器:TIMx_CCMRx:选择PWM模式 TIMx_ARR:PWM的周期 TIMx_CCRx:PWM占空比 四、结构体:GPIO_InitTypeDef :GPIO口复用 GPIO_Init(); TIM_TimeBaseInitTypeDef :基本定时结构 TIM_TimeBaseInit();
[单片机]
定时器应用例子源码
#include stdio.h #include reg51.h // 0 - 9 的编码 unsigned char code table = { 0x11,0xb7,0x29,0x23,0x87,0x43,0x41,0x37,0x01,0x03,0x00 } ; unsigned int count2 ; //第1-6 位的片选线 unsigned char code dig = { 0x7f,0xfd,0xdf,0xf7,0xef,0xfb } ; unsigned char buffer ,val ; unsigned char count1,scan,i,ch,KeyVal,modify,OverTime ; bi
[单片机]
STM32定时器----通用定时器输出带死区互补PWM
功能:利用一个普通定时器,输出2路互补的、频率可调、占空比可调、死区可调的PWM 原理:如下图,计数模式为中心对齐模式 可以看出,CH3高电平区间是以计数器计到4为中心,向两边延伸的。 而CH4,因为输出极性相反,是以0为中心向两边延伸的。 CCR3变小,占空比上升 CCR4变大,占空比上升 CCR3与CCR4的和为ARR 注意,此模式计数器的计数周期=ARR,这与PWM模式:计数周期 = ARR+1不同 这点参考下图STM32参考手册: 故,整理出代码以及计算公式如下: void TIM3_PWMShiftInit(void) { float Duty = 0; u16 ARR = 0,PSC = 0
[单片机]
STM32定时器溢出模式计时设置
环境: 主机:WIN7 开发环境:MDK4.23 MCU:STM32F103CBT6 源代码1: 说明:定时器采用TIM2,时钟源为内部8M晶振,向上溢出模式.此定时器用在延时函数,最小可以延时1us,故没有采用中断形式定时. 初始化代码: RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //重新将Timer设置为缺省值 TIM_DeInit(TIM2); //采用内部时钟给TIM2提供时钟源 TIM_InternalClockConfig(TIM2); timInitStruct.TIM_ClockDivision = TIM_CKD_DI
[单片机]
(10)MSP430F5529 定时器Timer_A
6.4 捕获比较模块 这是在以上介绍的基础上正式讲TA的重要功能。 先看一个寄存器TACCTL0-TACCTL6:(TA中最复杂的寄存器,用到的时候查表啦) CMx:捕获模式设定 00 不捕获 01 上升沿捕获 10 下降沿捕获 11上升和下降沿都捕获 CCISx:捕获源的选择 00 CCIxA 01 CCIxB 10 GND 11 VCC SCS:同步捕获源,设定是否与时钟同步 0 异步捕获 1 同步捕获 SCCI:选择的CCI输入信号由EQUx信号锁存,并可通过该位读取。 CAP: 0-比较模式 1-捕获模式 OUTMOD:输出模式控制位。(之后会在输出模块详细解释) CCIE:中断使能,该位允许
[单片机]
4. avr 定时器/计数器1 --TC1 --CTC模式输出PWM
T/C1是16位定时器/计数器,它的计数器由两个8位寄存器TCNT1H,TCNT1L构成,TCNT1H是高8位寄存器,TCNT1L是低8位寄存器。最大计算值为2的16次幂,十六进制是0xFFFF=65535. 例如:定时200ms ,晶振8MHZ,分频系数1024,计数时钟频率为8MHZ/1024=8000000HZ/1024=7812.5HZ,每个计数脉冲的周期时间为1/7812.5=0.128ms,计时200ms的计数器值为:65635-200ms/0.128ms=63972=0xF9E4 ,则TCNT1H付初值为0xF9,TCNT1L付初值为0xE4. //函数功能:实现PA口的led亮0.1S,灭0.9S #include
[单片机]
S3c2440ARM异常与中断体系详解8---定时器中断程序示例
这节课我们来写一个定时器的中断服务程序 使用定时器来实现点灯计数 查考资料就是第10章PWM TIMER 我们先把这个结构图展示出来 这个图的结构很好 这里面肯定有一个clk(时钟), 1 、每来一个clk(时钟)这个TCNTn减去1 2、 当TCNTn == TCMPn时,可以产生中断,也可以让对应的SPWM引脚反转,(比如说原来是高电平,发生之后电平转换成低电平) 3、 TCNTn继续减1,当TCNTn == 0时,可以产生中断,pwm引脚再次反转 TCMPn 和 TCNTn的初始值来自TCMPBn,TCNTBn 4 、TCNTn == 0时,可自动加载初始 怎么使用定时器? 1、 设置时钟 2 、设置初值 3
[单片机]
S3c2440ARM异常与中断体系详解8---<font color='red'>定时器</font>中断程序示例
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved