


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、输入捕获的原理:,图中t1t2时间,就是我们需要测量的咼电平时间。测量方法如下:捕获/比较通道(例如:通道 1输入阶段)通用定时器输入捕获通用定时器作为输入捕获的使用。我们用TIM5的通道1 ( PAO)来做输入捕获,捕获PA0上高电平的脉宽(用 KEY_UP按键输入高电平),通过串口来打印高电平脉宽时间。输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量脉宽为例,用一个简图来说明首先设置定时器通道x为上升沿捕获,这样,t1时刻,就会捕获到当前的CNT值,然后立即清零 CNT,并设置通道x为下降沿捕获,这样到t2时刻,又会发生捕获事件,得到此时的CNT值,记为CCRx2这样,根据定时器的
2、计数频率,我们就可以算岀t1t2的时间,从而得到高电平脉宽。在t1t2之间,可能产生 N次定时器溢岀,这就要求我们对定时器溢岀,做处理,防止高电平太长,导致数据不准确。 如图所示,t1t2之间,CNT计数的次数等于:N*ARR+CCRx2有了这个计数次数,再乘以CNT的计数周期,即可得到t2-t1的时间长度,即高电平持续时间。STM32F4的定时器,除了 TIM6和TIM7,其他定时器都有输入捕获功能。STM32F4的输入捕获,简单的说就是通过检测 TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的 时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄
3、存器(TIMx_CCR)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA等。这里我们用 TIM5_CH1来捕获高电平脉宽。接下来介绍我们需要用到的一些寄存器配置,需要用到的寄存器:TIMx_ARR、TIMx_PSC、TIMx_CCMR1、TIMx_CCER TIMx_DIER、TIMx_CR1、TIMx_CCR1 (这里的 x=5)。首先TIMx_ARR和TIMx_PSC,这两个寄存器用来设自动重装载值和TIMx的时钟分频。捕获/比较模式寄存器1: TIMx_CCMR1,这个寄存器在输入捕获的时候,非常有用:TIMx捕获/比较模式寄存器1 (TIMx_CCMR1)TIMx capt
4、ure/compare mode register 1偏移地址: 0x18复位值:0x00001514131211109B7543310OC2CEQC2PEOC2FEccasti!O|C1CEQC1M2.0|OC1PEQC1FECC1S|T|icarpDJC2FSqi;0IC调30iciFsqiorw1 rw 1 rvrrwrwrw 1 flwrw-rwr*rwrwr* |当在输入捕获模式下使用的时候,对应图的第二行描述,从图中可以看岀,TIMx_CCMR1是针对2个通道的配置,低八位 7 : 0用于捕获/比较通道1的控制,而高八位15 : 8则用于捕获/比较 通道2的控制,因为 TIMx还有
5、CCMR2这个寄存器,所以可以知道 CCMR2是用来控制通道 3和 通道4 (详见STM32F4XX中文参考手册435页,1548节)。这里我们用到的是 TIM5的捕获/ 比较通道1,我们重点介绍 TIMx_CCMR1的7:0位(其高8位配置类似),TIMx_CCMR1的7:0 位详细描述见图所示:位 7:4 IC1F :输入捕获 1 滤波器(Input capture 1 filter)此位域可定义TI1输入的采样频率和适用于 TI1的数字滤波器带宽。数字滤波器由事件计数器组成,每N个事件才视为一个有效边沿:0000 :无滤波器,按fDTS频率进行采样1000 : fSAMPLING =fD
6、TS/8,N=60001 :fSAMPLING =fCK_INT, N=21001 : fSAMPLING =fDTS/8,N=80010 :fSAMPLING =fCK_INT, N=41010 : fSAMPLING =fDTS/16,N=50011 :fSAMPLING =fCK_INT,N=81011 : fSAMPLING =fDTS/16,N=60100 :fSAMPLING =fDTS/2,N=61100 : fSAMPLING =fDTS/16,N=80101 :fSAMPLING =fDTS/2,N=81101 : fSAMPLING =fDTS/32,N=50110 :fS
7、AMPLING =fDTS /4,N=61110 : fSAMPLING =fDTS/32,N=60111 :fSAMPLING =fDTS/4,N=81111 : fSAMPLING =fDTS/32,N=8注意:在当前硅版本中,当ICxF3:0= 1、2或3时,将用CK_INT代替公式中的fDTS输入捕获1滤波器IC1F3:0,这个用来设置输入采样频 率和数字滤波器长度。其中,fCK_INT是定时器的输入频率(TIMxCLK),一般为 84Mhz/168Mhz (看该定时器在 哪个总线上),而fDTS则是根据 TIMx_CR1的CKD1:0的 设置来确定的,如果CKD1:0设置为00,那么
8、 fDTS =fCK_INT o N值就是滤波长度,举个简单的例子:假 设IC1F3:0=0011,并设置IC1映射到通道1上,且为上 升沿触发,那么在捕获到上升沿的时候,再以fCK_INT的频率,连续采样到8次通道1的电平,如果都是高电平, 则说明却是一个有效的触发,就会触发输入捕获中断 (如果开启了的话)。这样可以滤除那些高电平脉宽低于8个采样周期的脉冲信号,从而达到滤波的效果。这里, 我们不做滤波处理,所以设置IC1F3:0=0000,只要采集到上升沿,就触发捕获。_11Ets恥破计數器TI1FIGF 個 30TIMk_CCMR1TIM CCMR1TIMx CCERTIIFPITOJiT
9、I2fP1TRC1(f ifl 2 -TI2F IdlingGC1S1 d!| ICP34I 0|ina*2TlMi_GawRl位 1:0 CC1S :捕获 / 比较 1 选择(Capture/Compare 1 selection)此位域定义通道方向(输入/输岀)以及所使用的输入。00 : CC1通道配置为输出 01 : CC1通道配置为输入,10 : CC1通道配置为输入,11 : CC1通道配置为输入, 通过 TS 位(TIMx_SMCR 注意:仅当通道关闭时( 才可向CC1S位写入数据IC1映射到TI1上IC1映射到TI2上IC1映射到TRC上。此模式仅在 寄存器)选择部触发输入时有效
10、TIMx_CCER 中的 CC1E = 0),位3:2 IC1PSC :输入捕获1预分频器(Input capture 1 prescaler)此位域定义CC1输入(IC1)的预分频比。只要CC1E=0 (TIMx_CCER寄存器),预分频器便立即复位。00 :无预分频器,捕获输入上每检测到一个边沿便执行捕获01 :每发生2个事件便执行一次捕获10 :每发生4个事件便执行一次捕获11 :每发生8个事件便执行一次捕获输入捕获1预分频器IC1PSC1:0,我们是1次边沿就触 发1次捕获,所以选择00。其中CC1S1:0,这两个位用于 CCR1的通道配置,这里我们设置IC1S1:0=01,也就是配置
11、IC1映射在TI1上。TIMx捕获/比较使能寄存器(TIMx_CCER)TIMx capture/compare en able register偏移地址:0x20复位值:0x00001914131211109a7e543210CC4NPResCC4PCC4ECC3I*CCS*C3ECC2NPCC2PccseCCPCC1EFWrwrwrwwrwrwrwrwrwrw位1 CC1P :捕获/比较1输岀极性 (Capture/Compare 1 output Polarity)。CC1通道配置为输岀:0 : OC1高电平有效1 : OC1低电平有效CC1通道配置为输入:CC1NP/CC1P 位可针对
12、触发或捕 获操作选择TI1FP1和TI2FP1的极性。00 :非反相/上升沿触发电路对TIxFP1上升沿敏感(在复位模式、外部时钟模式或 触发模式下执行捕获或触发操作),TIxFP1未反相(在门控 模式或编码器模式下执行触发操作)。01 :反相/下降沿触发电路对TIxFP1下降沿敏感(在复位模式、外部时钟模式 或触发模式下执行捕获或触发操作),TIxFP1反相(在门控 模式或编码器模式下执行触发操作)。10 :保留,不使用此配置。11 :非反相/上升沿和下降沿均触发电路对TIXFP1上升沿和下降沿都敏感(在复位模式、外部 时钟模式或触发模式下执行捕获或触发操作)位 0 CC1E :捕获 /比较
13、 1 输岀使能 (Capture/Compare 1 output enable) 。CC1通道配置为输岀:0:关闭-OC1未激活1 :开启-在相应输出引脚上输出 0C1信号CC1通道配置为输入:此位决定了是否可以实际将计数器值捕获到输入捕获/比较寄存器1仃IMx_CCR1)中0 :禁止捕获1:使能捕获所以要使能输入捕获,必须设置CC1E=1,而CC1P则根据自己的需要来配置。接下来我们再看看 DMA/中断使能寄存器:TIMx_DIER,该寄存器的各位描述见图1614L31211109S76543210TDE1S0CC2:ETIECC;IEDC3IECC27ECC.IEVIEitr* r* i
14、* iw r*r*r* m rw i-w r*&5卩;否-賂终谨为6位4CC4IE -已 iT 州诗;上君 4 r (CapturEC rrr 阴 re 4 iEmrupt a mt: -a)Oi荼止H敦比较鼻中麻1i比l二存获上短斗宁蓟*世3CC4IE:比许怖毋上報31 (Capture/C&rTaare 3 inienupt enat &)t;鼻止槽获i怔:1;忙仁汽绳尤牧3:为,CC2IE; 土祁咔电二f (CaptureC rrqare 2 iMflfrupt anafc :才止nesrtt磁中阪1:兄说捕海Bt蓉2中捕.CC1IE;尤讣捕珂上?711 :! (CapturB/Como
15、are 1 Inierivpt 0; h止中朗:1= jt仁捕曲土轮1中窗B也0UIE5.?r l V (UpcatE in1 irrupt enah (?)伽券止更新中it1: jtiM新二护.TIMx_ DIER寄存器各位描述我们需要用到中断来处理捕获数据,所以必须开启通道1的捕获比较中断,即CC1IE设置为1控制寄存器:TIMx_CR1,我们只用到了它的最低位,也就是用来使能定时器的。控制寄存器1( TIMx_CR1)131-11312111096543J0m j;oARPECMSliODIROPMIRSIPISF 巴FWrwFTJr0CEN:便能讣載界t禁止计註屛=注r在软件識負了CE
16、N逵百”外at时钟、门揑摸或和璇碍譽模式才腌工作*轴眾模式可凰肖动 地砒現冲设賈c曰电生至昧冲吨成“半绘士更祈事门计UEN阪右功清陈.位 9:8 CKD :时钟分频(Clock division)此位域指示定时器时钟(CK_INT)频率与数字滤波器所使用的采样时钟(ETR、 TIx之间的分频比,00 :tDTS = tCK_INT01 :tDTS = 2 JCK_INT10 :tDTS = 4 WK_INT 11:保留最后再来看看捕获/比较寄存器 1: TIMx_CCR1,该寄存器用来存储捕获发生时,TIMx_CNT的值,我们从TIMx_CCR1就可以读岀通道 1捕获发生时刻的 TIMx_CN
17、T值,通过两次捕获(一次上升沿 捕获,一次下降沿捕获) 的差值,就可以计算岀高电平脉冲的宽度(注意,对于脉宽太长的情况,还要计算定时器溢岀的次数)。输入捕获库函数配置:1)开启TIM5时钟,配置PA0为复用功能(AF2),并开启下拉电阻。要使用TIM5,我们必须先开启 TIM5的时钟。同时我们要捕获TIM5_CH1上面的高电平脉宽,所以先配置PA0为带下拉的复用功能,同时,为了让PA0的复用功能选择连接到TIM5,所以设置PA0的复用功能为 AF2,即连接到TIM5上面。开启IM5时钟的方法为:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE)
18、; /TIM5 时钟使能当然,这里我们也要开启PA0对应的GPIO的时钟。配置PA0为复用功能,所以我们首先要设置PA0引脚映射AF2,方法为:GPIO_PinAFCo nfig(GPIOA,GPIO_Pi nSource0,GPIO_AF_TIM5);最后,我们还要初始化GPIO的模式为复用功能,同时这里我们还要设置为开启下拉。方法为:GPIO_I nitStructure.GPIO_Pin = GPIO_P in_0; /GPIOA0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 复用功能GPIO_InitStructure.GPIO_Speed
19、= GPI0_Speed_100MHz; / 速度 100MHzGPIO_I nitStructure.GPIO_OType = GPIO_OType_PP; / 推挽复用输岀GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; / 下拉GPIO_Init(GPIOA,&GPIO_InitStructure); / 初始化 PA0跟上一讲PWM输岀类似,这里我们使用的是定时器5的通道1,所以我们从 STM32F4对应的数据手册可以查看到对应的IO 口为PA0:IEEIwkijp(PAO)I/OFT(6)USART2 CTS/UART4_TX/ ETH_M
20、II_CRS / TIM2_CH1 ETWADC 严KUWTIMS CH1 ZTIMQ ETR/EVENTOUT2)初始化 TIM5,设置TIM5的ARR和PSG在开启了 TIM5的时钟之后,我们要设置 ARR和PSC两个寄存器的值来设置输入捕获的自动重装 载值和计数频率。这在库函数中是通过TIM_TimeBaselnit函数实现的,TIM_TimeBaseStructure.TIM_Prescaler=psc; / 定时器分频TIM_TimeBaseStructure.TIM_Cou nterMode=TIM_Cou nterMode_Up; /向上计数模式TIM_TimeBaseStruc
21、ture.TIM_Period=arr; / 自动重装载值TIM_TimeBaseStructure.TIM_ClockDivisio n=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);初始化 TIM53)设置TIM5的输入捕获参数,开启输入捕获。TIM5_CCMR1寄存器控制着输入捕获 1和2的模式,包括映射关系,滤波和分频等。这里我们需 要设置通道1为输入模式,且IC1映射到TI1(通道1)上面,并且不使用滤波器(提高响应速度) 库函数是通过 TIM_ICInit 函数来初始化输入比较参数的: void TIM_ICI
22、nit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct) 同样,我们来看看参数设置结构体 TIM_ICInitTypeDef 的定义: typedef structuint16_t TIM_Channel; / 通道 uint16_t TIM_ICPolarity; / 捕获极性 uint16_t TIM_ICSelection;/ 映射 uint16_t TIM_ICPrescaler;/ 分频系数 uint16_t TIM_ICFilter; / 滤波器长度 TIM_ICInitTypeDef;参数 TIM_Channel 很好
23、理解,用来设置通道。我们设置为通道1,为 TIM_Channel_1 。参 数 TIM_ICPolarit 是用来设置输入信号的有效捕获极性 ,这里我们设置为 TIM_ICPolarity_Rising , 上升沿捕获。同时库函数还提供了单独设置通道 1 捕获极性的函数为: TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);这表示通道 1 为上升沿捕获,我们后面会用到,同时对于其他三个通道也有一个类似的函数, 使用的时候一定要分清楚使用的是哪个通道该调用哪个函数,格式为 TIM_OCxPolarityConfig() 。参数TIMCSelec
24、tion是用来设置映射关系,我们配置IC1直接映射在TI1上,选择TIM_ICSelection_DirectTI 。参 数 TIM_ICPrescaler 用来设置输入捕获分频系数, 我们这里不分频, 所以选中 TIM_ICPSC_DIV1, 还有 2,4,8 分频可选。参数 TIM_ICFilter 设置滤波器长度,这里我们不使用滤波器,所以设置为0。我们的配置代码是:TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; / 选择输入端 IC1 映射到 TI1 上 TIM5_ICInitStructure.TIM_ICPolarity = TI
25、M_ICPolarity_Rising; / 上升沿捕获 TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; / 映射到 TI1 上 TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; / 配置输入分频 ,不分频 TIM5_ICInitStructure.TIM_ICFilter = 0x00;/IC1F=0000 配置输入滤波器不滤波 TIM_ICInit(TIM5, &TIM5_ICInitStructure);4) 使能捕获和更新中断(设置TIM5 的
26、DIER 寄存器)因为我们要捕获的是高电平信号的脉宽,所以,第一次捕获是上升沿,第二次捕获时下降沿, 必须在捕获上升沿之后,设置捕获边沿为下降沿,同时,如果脉宽比较长,那么定时器就会溢出,对溢岀必须做处理,否则结果就不准了,不过,由于STM32F4的TIM5是32位定时器,假设计数周期为1us,那么需要4294秒才会溢岀一次,这基本上是不可能的。这两件事,我们都在中 断里面做,所以必须开启捕获中断和更新中断。这里我们使用定时器的开中断函数 TIM_ITConfig 即可使能捕获和更新中断:TIM_ITConfig( TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);/
27、 允许更新中断和捕获中断5) 设置中断优先级,编写中断服务函数因为我们要使用到中断, 所以我们在系统初始化之后, 需要先设置中断优先级分组, 这里方法跟 我们前面讲解一致, 调用 NVIC_PriorityGroupConfig() 函数即可, 我们系统默认设置都是分组 2。 设 置中断优先级的方法前面多次提到这里我们不做讲解,主要是通过函数NVIC_Init()来完成。设置优先级完成后, 我们还需要在中断函数里面完成数据处理和捕获设置等关键操作,从而实现高电平脉宽统计。在中断服务函数里面,跟以前的外部中断和定时器中断实验中一样,我们在中断开始的时候要进行中断类型判断,在中断结束的时候要清除中
28、断标志位。使用到的函数在上面的实验已经讲解过,分别为TIM_GetlTStatus()函数和TIM_ClearlTPendingBit()函数。if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)/ 判断是否为更新中断 if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET) 判断是否发生捕获事件 TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update);/ 清除中断和捕获标志位 在我们实验的中断服务函数中,我们还使用到了一个设置计数器值的函数为:TIM_Se
29、tCounter(TIM5,0);上面语句的意思是将 TIM5 的计数值设置为 0。这个相信是比较好理解的。6) 使能定时器(设置TIM5 的 CR1 寄存器)最后,必须打开定时器的计数器开关,启动 TIM5 的计数器,开始输入捕获。TIM_Cmd(TIM5,ENABLE ); /使能定时器 5通过以上 6 步设置,定时器 5 的通道 1 就可以开始输入捕获了, 同时因为还用到了串口输出结果, 所以还需要配置一下串口。我们在 timer.c 和 timer.h 中主要是添加了输入捕获初始化函数 TIM5_CH1_Cap_Init 以及中断服务 函数 TIM5_IRQHandler。接下来我们来
30、看看 timer.c 文件中,我们添加的两个函数的容:TIM_ICInitTypeDef TIM5_ICInitStructure;/定时器 5通道 1 输入捕获配置arr :自动重装值(TIM2,TIM5是32位的!) psc :时钟预分频数void TIM5_CH1_Cap_Init(u32 arr,u16 psc)GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCm
31、d(RCC_APB1Periph_TIM5,ENABLE); /TIM5 时钟使能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); /使/ 能 PORTA 时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; /GPIOA0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;/ 复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; / 速度 100MHz GPIO_InitStructure.GPIO_OTy
32、pe = GPIO_OType_PP; /推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; /下拉 GPIO_Init(GPIOA,&GPIO_InitStructure); / 初始化 PA0GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); /PA0 复用位定时器 5TIM_TimeBaseStructure.TIM_Prescaler=psc; / 定时器分频 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
33、/ 向上计数模式TIM_TimeBaseStructure.TIM_Period=arr; / 自动重装载值 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; / 选择输入端 IC1 映射到 TI1 上TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; / 上升沿捕获 TIM5_I
34、CInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; / 映射到 TI1 上 TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; / 配置输入分频 ,不分频 TIM5_ICInitStructure.TIM_ICFilter = 0x00;/IC1F=0000 配置输入滤波器不滤波 TIM_ICInit(TIM5, &TIM5_ICInitStructure); / 初始化 TIM5 输入捕获参数TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_
35、CC1,ENABLE);/ 允许更新和捕获中断 TIM_Cmd(TIM5,ENABLE ); / 使能定时器 5NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;/ 抢占优先级 2 NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;/ 响应优先级 0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ 通道使能 NVIC_Init(&NVIC_
36、InitStructure); / 根据指定的参数初始化 VIC 寄存器、/ 捕获状态/7:0, 没有成功的捕获 ;1, 成功捕获到一次 ./6:0, 还没捕获到低电平 ;1, 已经捕获到低电平了 ./5:0: 捕获低电平后溢出的次数(对于 32 位定时器来说 ,1us 计数器加 1,溢出时间 :4294 秒 )u8 TIM5CH1_CAPTURE_STA=0; / 输入捕获状态u32 TIM5CH1_CAPTURE_VAL; /输入捕获值 (TIM2/TIM5 是 32 位 )/ 定时器 5 中断服务程序void TIM5_IRQHandler(void)if(TIM5CH1_CAPTURE
37、_STA&0 X80)=0) 还未成功捕获if(TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)/ 溢出if(TIM5CH1_CAPTURE_STA&0 X40) 已经捕获到高电平了if(TIM5CH1_CAPTURE_STA&0 X3F)=0X3F)/高电平太长了TIM5CH1_CAPTURE_STA|=0X80;标记成功捕获了一次 TIM5CH1_CAPTURE_VAL=0XFFFFFFFF;else TIM5CH1_CAPTURE_STA+;if(TIM_GetlTStatus (TIM5, TIM_IT_CC1) != RESET)/ 捕获
38、1 发生捕获事件if(TIM5CH1_CAPTURE_STA&0X40) /捕获到一个下降沿TIM5CH1_CAPTURE_STA|=0X80;标记成功捕获到一次高电平脉宽TIM5CH1_CAPTURE_VAL=TIM_GetCapture1 (TIM5);/ 获取当前的捕获值.TIM_OC1PolarityCo nfig( TIM5,TI M_I CPolarity_Ris in g); CC1P=0 设为上升沿捕获else/还未开始,第一次捕获上升沿TIM5CH1_CAPTURE_STA=0;/ 清空TIM5CH1_CAPTURE_VAL=0;TIM5CH1_CAPTURE_STA|=0X
39、40;/ 标记捕获到了上升沿TIM_Cmd(TIM5,DISABLE );/ 关闭定时器 5TIM_SetCou nter (TIM5,0);TIM_OC1PolarityCo nfig(T IM5,TIMl_I CPolarity_Falli ng);/CC1P=1 设为下降沿捕获TIM_Cmd(TIM5,ENABLE );/ 使能定时器 5TIM_ClearITPe ndi ngBit (TIM5, TIMT_CC1|TIMT_Update); / 清除中断标志位此部分代码包含两个函数,其中TIM5_CH1_Cap_Init函数用于TIM5通道1的输入捕获设置,其设置和我们上面讲的步骤是一样的,这里就不多说,特别注意:TIM5是32位定时器,所以arr是u32类型的。接下来,重点来看看第二个函数。TIM5_IRQHandler是TIM5的中断服务函数,该函数用到了两个全局变量,用于辅助实现高电平捕获。其中TIM5CH1_CAPTURE_STA是用来记录捕获状态,该变量类似我们在usart.c里面自行定义的 USART_RX_STA寄存器(其实就是个变量,只是我们把它当成一个寄存器那样来使用)。TIM5CH1_CAPTURE_STA各位描述如表所示:TIM5CH1 CAPTURE STAbit7bit6bit50捕获完成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设立海外公司管理制度
- 设计开发变更管理制度
- 设计项目分级管理制度
- 诊所医保制度管理制度
- 诊疗科目各项管理制度
- 试验检测业务管理制度
- 财务销售流程管理制度
- 财政财务票据管理制度
- 货物搬运现场管理制度
- 货车安全生产管理制度
- 湖北黄冈历年中考作文题(2002-2023)
- GB/T 10810.1-2025眼镜镜片第1部分:单焦和多焦
- 2024年烟台市烟台山医院招聘考试真题
- 酒店前台培训内容
- 国开本科《人文英语3》期末机考总题库及答案
- 2025年包养合同模板
- 《SPE固相萃取技术》课件
- 高中数学复习 导数压轴大题归类 (原卷版)
- 环境友好型飞机内饰-深度研究
- 《crrt低血压的处理》课件
- 马诗听评课记录范文
评论
0/150
提交评论