STM32定时器(三)输入捕获

一、stm32定时器捕获功能
stm32的定时器是支持信号输入捕获的,何为输入捕获?主要做什么应用?
输入捕获:通过检测timx_chx上的边沿信号,在边沿信号发生跳变的时候,将当前的定时器的值(timx_cnt)存放到对应的捕获比较寄存器里面,完成一次捕获。输入捕获主要应用于测量信号的脉宽或频率。
下图是定时器原理图的输入捕获框图部分
第一部分是设置滤波器,用来对信号进行滤波,信号从ti1输入,通过滤波器,输出tif信号,正常情况下信号没有抖动,ti1f信号等于ti1的输入信号。
icf[3:0]用来设置输入采样频率的数字滤波器的长度,如icf=0011,会在捕获上升沿时,以fck_int的频率连续采样八次通道1的信号电平,若都为高电平,则说明这是一个有效的触发,就会触发捕获中断,这样就可以滤除那些高电平低于八个采样周期的脉冲信号,达到滤波的效果,如果不做滤波处理,设置为icf=0000,只要检测到跳边沿,就会触发捕获。
在timx捕获/比较模式寄存器(timx_ccmr1)的位7:4
fdts频率根据timx_cr1的ckd[1:0]设置
位9:8 ckd:时钟分频,此位域指示定时器时钟(ck_int)频率与数字滤波器所使用的采样时钟(etr、tix)之间的分频比。
第二部分:设置输入捕获极性:配置边沿检测器检测上升沿还是下降沿。在timx捕获/比较使能寄存器(timx_ccer)的
第三部分:设置输入捕获映射通道:通道一信号也可以映射到通道二上,同理通道二信号也可以映射到通道一上。在timx捕获/比较模式寄存器(timx_ccmr1)的
第四部分:设置输入输出捕获分频器,就是设置检测到几次跳变后触发捕获。在timx捕获/比较模式寄存器(timx_ccmr1)的
同时要开启输入捕获1使能,在timx捕获/比较使能寄存器(timx_ccer)的
第五部分:捕获到有效信号开启中断。在dma/中断使能寄存器(timx_dier)
二、输入捕获配置步骤
输入捕获配置的一般步骤
① 初始化定时器和通道对应io的时钟。
② 初始化io口,模式为复用:
③设置引脚复用映射:
④初始化定时器arr,psc
⑤初始化输入捕获通道
⑥如果要开启捕获中断,
⑦使能定时器:
⑧编写中断服务函数:
三、输入捕获编程
以tim5_ch1为例,
//定时器5通道1输入捕获配置//arr:自动重装值(tim5是32位)//psc:时钟预分频数void tim5_ch1_cap_init(u32 arr,u16 psc){ rcc- >apb1enr|=1< ahb1enr|=1< arr=arr; //设定计数器自动重装值 tim5- >psc=psc; //预分频器 tim5- >ccmr1|=1< ccmr1|=0< ccmr1|=0< ccmr1|=1< ccer|=0< ccer|=1< egr=1< dier|=1< dier|=1< cr1|=0x01; //使能定时器2 my_nvic_init(2,0,tim5_irqn,2);//抢占2,子优先级0,组2中断服务函数:
//中断服务函数//捕获状态,定义一个u8变量tim5ch1_capture_sta,表示输入捕获状态//[7]:0,没有成功的捕获;1,成功捕获到一次.//[6]:0,还没捕获到低电平(下降沿);1,已经捕获到低电平(下降沿)了.//[5:0]:捕获高电平后溢出的次数(对于32位定时器来说,1us计数器加1,溢出时间:4294秒)u8 tim5ch1_capture_sta=0; //输入捕获状态 u32 tim5ch1_capture_val; //输入捕获值(tim5是32位)//定时器5中断服务程序 void tim5_irqhandler(void){ u16 tsr; tsr=tim5- >sr; if((tim5ch1_capture_sta&0x80)==0) //还未成功捕获 { if(tsr&0x01) //溢出 { if(tim5ch1_capture_sta&0x40) //定时器溢出,说明已经捕获到上升沿,本次捕获的是下降沿 { if((tim5ch1_capture_sta&0x3f)==0x3f)//高电平太长了 { tim5ch1_capture_sta|=0x80; //标记成功捕获了一次 tim5ch1_capture_val=0xffffffff; }else tim5ch1_capture_sta++; } } if(tsr&0x02) //ch1发生捕获事件,已经捕获到上升沿,timx_ccr1中已捕获到计数器值(ic1上已检测到与所选极性匹配的边沿) { if(tim5ch1_capture_sta&0x40) //cc1if为1,说明已经捕获到了上升沿(第一次捕获上升沿参考else),本次捕获到的是下降沿 { tim5ch1_capture_sta|=0x80; //标记成功捕获到一次高电平脉宽 tim5ch1_capture_val=tim5- >ccr1; //获取当前的捕获值.ccr1为上一个输入捕获1事件(ic1)发生时的计数器的值 tim5- >ccer&=~(1< cr1&=~(1< cnt=0; //计数器清空 tim5- >ccer|=1< cr1|=0x01; //使能定时器2 } } } tim5- >sr=0;//清除中断标志位 }

关于家用光伏系统并网规范的介绍和分析
固态硬盘及显卡的散热不可或缺的导热材料
mlcc电容温度最高能达到多少_MLCC电容特性及注意事项
微信宣布与QQ钱包互通 目前仅支持微信转账QQ钱包
国测量子完成Pre-A轮融资,用于芯片级原子钟产品化推进
STM32定时器(三)输入捕获
罗技推出一款PROX机械键盘 可以由玩家自行更换轴体
EUHT5G技术在广州地铁投入商业运行 标志我国已经克服5G技术关键挑战
中国联通以探索5G环境下的什么作为应用的突破点?
机器人让生活更美好,一起走进他和他的“机器人王国”
南航沈阳飞机维修基地已在多方面取得了突破性进展
关于晶圆代工的发展历程回顾和对未来的展望
关于PCB Layout的7大基准
智能家居魔镜带来的黑科技家居生活互动体验
华为为生态伙伴提供强大的架构和技术支撑 助推财政数字化
适应于C6000系列DSP器件的DATA直接烧写原理和设计
用FPGA创下一代新爆品为何是大趋势
河套IT TALK 88:(原创)数据预处理:成功AI大模型的基石
锂离子聚合物电池凝胶态电解质中碳电极的电化学特性
新基建实现中国制造2025的必然选择,但能否解决当下的就业问题