技术好文:stm32寄存器版学习笔记06输入捕获(ETR脉冲计数)

简介: 技术好文:stm32寄存器版学习笔记06输入捕获(ETR脉冲计数)

  STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0;TIMER3-->PD2;TIMER4-->PE0…


1.TIM2 PA0计数 配置步骤


①开启TIM2时钟,配置PA0输入


  APB1外设复位寄存器 (RCC_APB1RSTR)


  APB2外设时钟使能寄存器(RCC_APB2ENR)


置1开启。清0关闭。


  Eg:RCC->APB1ENR|=1[0;  //使能TIM2时钟


     RCC->APB2ENR|=1[2; //使能PORTA时钟


配置I/O口: 参见stm32寄存器版学习笔记01 GPIO口的配置。


  Eg:GPIOA->CRL&=0XFFFFFFF0; //PA0 清除之前设置


     GPIOA->CRL|=0X00000008; //PA0 输入


     GPIOA->ODR|=0[0; //PA0 下拉


②设置TIM2的ARR和PSC


  自动重装载寄存器(TIMx_ARR)


  预分频器(TIMx_PSC)


③设置TIM2的CCMR1


  TIM2_CCMR1寄存器控制着输入捕获1和2的模式,包括映射关系、滤波和分频等。这里需要设置通道1为输入模式,且IC1映射到TI1(通道1)上,并且不使用滤波(提高响应速度)器。


  捕获/比较模式寄存器1(TIMx_CCMR1)


输入捕获模式:


  Eg:TIM2->CCMR1|=1[0; //CC1S=01 选择输入端 IC1映射到TI1上


     TIM2->CCMR1|=1[4; //IC1F=0001 配置输入滤波器 以Fck_int采样,2个事件后有效


     TIM2->CCMR1|=0[10; //IC2PS=00 配置输入分频,不分频


④设置TIM2的CCER,开启输入捕获,并设置上升沿捕获


TIM2_CCER寄存器是定时器的开关,并且可以设置输入捕获的边沿。


  捕获/比较使能寄存器(TIMx_CCER)


  Eg: TIM2->CCER|=0[1; //CC1P=0 上升沿捕获


    TIM2->CCER|=1[0; //CC1E=1 允许捕获计数器的值到捕获寄存器中


⑤设置TIM2的DIER,使能捕获和更新中断,并编写中断服务函数


  DMA/中断使能寄存器(TIMx_DIER)


  Eg:TIM2->DIER|=1[1; //允许捕获中断


     TIM2->DIER|=1[0; //允许更新中断


⑥设置TIM2的CR1使能定时器


最后打开定时器的计数器开关,启动TIM2计数器,开始输入捕获。


  控制寄存器1(TIMx_CR1)


2.TIM2 PA0计数应用


1 //定时器2通道1输入捕获配置


2 //arr:自动重装值


3 //psc:时钟预分频数


4 void TIM2_Cap_Init(u16 arr,u16 psc)


5 {


6 RCC->APB1ENR|=1[0; //TIM2 时钟使能


7 RCC->APB2ENR|=1[2; //使能PORTA时钟


8


9 GPIOA->CRL&=0XFFFFFFF0; //PA0 清除之前设置


10 GPIOA->CRL|=0X00000008; //PA0 输入


11 GPIOA->ODR|=0[0; //PA0 下拉


12


13 TIM2->ARR=arr; //设定计数器自动重装值


14 TIM2->PSC=psc; //预分频器


15


16 TIM2->CCMR1|=1[0; //CC1S=01 选择输入端 IC1映射到TI1上


17 TIM2->CCMR1|=1[4; //IC1F=0001 配置输入滤波器 以Fck_int采样,2个事件后有效


18 TIM2->CCMR1|=0[10; //IC2PS=00 配置输入分频,不分频


19


20 TIM2->CCER|=0[1; //CC1P=0 上升沿捕获


21 TIM2->CCER|=1[0; //CC1E=1 允许捕获计数器的值到捕获寄存器中


22


23 TIM2->DIER|=1[1; //允许捕获中断


24 TIM2->DIER|=1[0; //允许更新中断


25 TIM2->CR1|=0x01; //使能定时器2


26 MY_NVIC_Init(2,0,TIM2_IRQn,2);//抢占2,子优先级0,组2


27 }


28


29 //定时器2中断服务程序


30 void TIM2_IRQHandler(//代码效果参考:http://www.lyjsj.net.cn/wx/art_23849.html

void)

31 {


32 u16 tsr;


33 tsr=TIM2->SR;


34 if(tsr&0x02)//捕获1发生捕获事件


35 {


36 cishu++;


37


38 }


39 TIM2->SR=0;//清除中断标志位


40 }


//测试.c


TIM2_Cap_Init(25,0);


while(1)


{


printf("cishu:%d us\r\n",cishu); //代码效果参考:http://www.lyjsj.net.cn/wx/art_23847.html


}


//不知为何cnt读数为0.。。

相关文章
|
7月前
|
C语言 芯片 内存技术
STM32F103标准外设库——寄存器 (二)
STM32F103标准外设库——寄存器 (二)
278 1
STM32F103标准外设库——寄存器 (二)
小巴陪你搞技术-STM32驱动1602时钟
小巴陪你搞技术-STM32驱动1602时钟
|
5月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
807 0
|
4月前
|
开发框架 C语言 开发者
STM32寄存器操作、模板构建
【8月更文挑战第23天】本文档介绍STM32中的寄存器操作方法与模板构建技巧。寄存器是STM32控制内外设的核心,通过直接读写特定内存地址来进行操作。以配置GPIO为例,需定位寄存器地址并写入适当值。文档还提供了一个基本的代码模板,包括包含头文件、时钟配置、外设初始化及主函数流程,帮助开发者快速搭建开发框架,并强调了参考手册的重要性以确保正确使用。
|
5月前
stm32f407探索者开发板(九)——寄存器地址名称映射
stm32f407探索者开发板(九)——寄存器地址名称映射
|
6月前
|
传感器 数据采集 人工智能
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
297 1
|
6月前
经验大分享:STM32F4寄存器初始化系列:GPIO
经验大分享:STM32F4寄存器初始化系列:GPIO
35 0
|
7月前
|
传感器 物联网 开发工具
STM32:微控制器技术探索与实践
STM32:微控制器技术探索与实践
130 5
STM32实战项目—楼宇人员计数系统
本文介绍了一个基于红外对管的楼宇人员计数系统设计。简单介绍了一下红外对管的原理和使用方法。针对任务要求给出了详细的实现思路和程序设计。
108 3
STM32实战项目—楼宇人员计数系统
STM32F103C8 TIM输入捕获
STM32F103C8 TIM输入捕获
108 0