STM32F107VCT6的通用定时器的输入捕获功能配置

发布者:祝福的4号最新更新时间:2016-07-28 来源: eefocus关键字:STM32F107VCT6  通用定时器  输入捕获 手机看文章 扫描二维码
随时随地手机看文章
将TIM4配置成输入捕获功能用于计算矩形波的周期。

#define NVIC_Priority_Timer4 1

void TIM4_Init_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_ICInitTypeDef TIM_ICInitStructure; //输入捕获结构体
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //时基结构体

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);

/*
*PD15-TIM4_Ch4 矩形方波的输入管脚
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_PinRemapConfig(GPIO_Remap_TIM4 , ENABLE); //TIM4_CH4/PD15 硬件已经映射好的,不能将TIM4_CH4用于其他管脚

NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_Priority_Timer4;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/*

* 设置TIM4的时基:(1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+0xFFFF)/72M)*(1+71) = 65536/1M

* (定时器计满16位用时,则计一个数用时1/1M)

*/
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //PD15管脚检测下降沿
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0xF;
TIM_ICInit(TIM4, &TIM_ICInitStructure);

TIM_Cmd(TIM4, ENABLE);
TIM_ITConfig(TIM4, TIM_IT_CC4, ENABLE);
}

stm32f10x_it.c文件中

unsigned int IC4ReadValue1 = 0;
unsigned int IC4ReadValue2 = 0;
unsigned int CaptureNumber_ch4 = 0;
unsigned int Capture_ch4 = 0;
 

void TIM4_IRQHandler(void)
{
//每当PD15管脚检测到下降沿,就会进入到该中断处理函数
if (TIM_GetITStatus(TIM4, TIM_IT_CC4) == SET)
{

TIM_ClearITPendingBit(TIM4, TIM_IT_CC4);

if (CaptureNumber_ch4 == 0)
{

CaptureNumber_ch4 = 1;
IC4ReadValue1 = TIM_GetCapture4(TIM4);
}
else if (CaptureNumber_ch4 == 1)
{

CaptureNumber_ch4 = 0;
IC4ReadValue2 = TIM_GetCapture4(TIM4);
if (IC4ReadValue2 > IC4ReadValue1)
{
Capture_ch4 = (IC4ReadValue2 - IC4ReadValue1);
}
else if (IC4ReadValue2 < IC4ReadValue1)
{
Capture_ch4 = ((0xFFFF - IC4ReadValue1) + IC4ReadValue2);
}
else
{
Capture_ch4 = 0;
}
}

}
}


关键字:STM32F107VCT6  通用定时器  输入捕获 引用地址:STM32F107VCT6的通用定时器的输入捕获功能配置

上一篇:STM32F107VCT6的通用定时器配置
下一篇:STM32F051R8T6的通用定时器配置

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

MSP430:输入捕获
在做超声模块时用到 1 //捕获上升沿 2 void Capture_Pos(void) 3 { 4 P2SEL |= Echo; //选择P23作为捕捉的输入端子 Timer1_A 5 6 //TA1CCTL1 |=CM_3+SCS+CAP+CCIE; //上下沿都触发捕捉,用于测脉宽,同步模式、时能中断 CCI1A 7 8 TA1CCTL1 |=CM_1+SCS+CAP+CCIE; //上升沿触发捕捉,同步模式、时能中断 CCI1A 9 10 TA1CTL |= TASSEL1+MC_2; //选择SMCLK时钟作为计数时钟源,不分频 增计数模式不行,必须连续计数模式 1
[单片机]
STM32应用简章之通用定时器
① 能定时器时钟。 RCC_APB1PeriphClockCmd(); ② 初始化定时器,配置ARR,PSC。 TIM_TimeBaseInit(); ③开启定时器中断,配置NVIC。 void TIM_ITConfig(); NVIC_Init(); ④ 使能定时器。 TIM_Cmd(); ⑥ 编写中断服务函数。 TIMx_IRQHandler(); void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitType
[单片机]
STM32 定时器输入捕获注意点
使用的是stm32f103rct6. 最近在写一个单定时器捕获4路pwm波的程序,那就必须在中断函数中改变检测边沿,通过手动记录捕获值来手动计算pwm的频率和脉宽值。 网上也有很多相关程序,但是我在写的时候却碰到了一个对于初学者来说非常不起眼的问题,导致结果怎么都不对: 如图中所示,我正在用TIM4_CH1,因为看见其他的结构体都是自己定义一边再使用的,于是我将‘TIM_TypeDef’这个结构体也自己定义了一个对象‘TIM4_Type’然后就发现结果不对。 后来仔细分析后发现这个结构体已在stm32f10x.h中有了对象实例:TIM4。并且这个TIM4所在的地方正是那些寄存器所处的地方,而我自己定义的对象‘TIM4_Type’是
[单片机]
STM32 <font color='red'>定时器</font><font color='red'>输入</font><font color='red'>捕获</font>注意点
STM32 通用定时器的定时功能 学习笔记
这节主要讲下STM32 通用定时器的定时功能。 一、TIMx的时钟源问题: STM32有8路寄存器,包括TIM1和TIM8两个高级定时器,TIM6和TIM7两个基本定时器,TIM2-TIM5四个通用定时器,定时器是完全独立的,而且没有互相共享任何资源,它们可以一起同步操作,所有TIMx定时器在内部相连,用于定时器同步或链接。当一个定时器处于主模式时,它可以对另一个处于从模式的定时器的计数器进行复位、启动、停止或提供时钟等操作。其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在APB1总线上。他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。 1)定
[单片机]
STM32 输入捕获
PWM 输入捕获模式 xmlnamespace prefix = o ns = urn:schemas-microsoft-com:office:office / 一、概念理解 PWM输入捕获模式时输入捕获模式的特例 1、每个定时器有四个输入通道IC1、IC2、IC3、IC4,且IC1 IC2一组,IC3 IC4一组,并可是设置管脚和寄存器的对应关系 2、两个TI输出映射了两个ICx信号 3、这两个ICx信号分别在相反的极性边沿有效 4、两个边沿信号中的一个被选为触发信号,并且从模式控制器被设置成复位模式 5、当触发信号来临时,被设置成触发输入信号的捕获寄存器,捕获 一个PWM周期(即连续的两个上升沿或下降沿) ,他
[单片机]
STM32F103ZET6 之 通用定时器单脉冲模式实验
由于前面买的核心板,供电老有问题,使得我现在的项目又改用了以前用的F103ZET6微控制器! 1、实验目的 1)产生脉宽任意可调的单脉冲(在允许的范围内) 2、硬件:通用定时器3、通用定时器4 3、单脉冲模式介绍 单脉冲模式允许计数器响应一个激励,并在一个程序可控的延时之后,产生一个脉宽可程序控制的脉冲。 可以通过从模式控制器启动计数器,在输出比较模式或者PWM模式下产生波形。设置TIMx_CR1 寄存器中的OPM 位将选择单脉冲模式,这样可以让计数器自动的产生下一个更新 事情UEV时停止。 仅当比较值与计数器的初始值不同时,才能产生一个脉冲。启动之前(当定时器正在等待触发),必须配置如下: 向上计数方式:CNT (计
[单片机]
STM32F103ZET6 之 <font color='red'>通用</font><font color='red'>定时器</font>单脉冲模式实验
通用定时器-输入捕获实验
本节定时器PWM输出主要涉及到定时器框图左下方部分,即输入捕获部分 输入捕获工作过程(以通道1为例) 一个通道的框图: 作用:捕获TIMx_CH1通道信号的跳变,并触发捕获中断 我们将此过程拆分为4个部分 1,设置输入捕获滤波器 fDTS是根据TIMx_CR1-CKD 的设置确定的 如果TIMx_CR1-CKD 设置为00,则fTDS=fCK_INT = 72Mhz 如果TIMx_CR1-CKD 设置为10,则fTDS=fCK_INT / 4 = 18Mhz TIMx_CCMR1-ICF 输入捕获1滤波器,设置输入采样频率和数字滤波长度 如果TIMx_CCMR1-IC1F =0011,采样频率fSAMP
[单片机]
<font color='red'>通用</font><font color='red'>定时器</font>-<font color='red'>输入</font><font color='red'>捕获</font>实验
通过学习USART1深入STM32F107VCT6的串口通信
STM32有数个串口,每个串口都有一个自己独立的波特率寄存器USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的,由于STM32采用分数波特率,所以STM32的串口波特率设置范围很宽,而且误差很小。 在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。还可以使
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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