关于STM32F103 脉冲计数的问题

//TIM2_CH2 PWM部分初始化 
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数 计数器功能
void TIM2_ETR_Init(u16 arr,u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<0; //TIM2时钟使能 
RCC->APB2ENR|=1<<2; //使能PORTA时钟

GPIOA->CRL &= 0XFFFFFF0F; //
GPIOA->CRL |= 0X00000080; //PA1下拉输入
GPIOA->ODR |= 0<<1;

TIM2->ARR=arr; //设定计数器自动重装值 
TIM2->PSC=psc; //预分频器不分频

TIM2->CCMR1|=1<<8; //CC2S=01 选择输入端 IC1映射到TI2上
TIM2->CCMR1|=0<<12; //IC2F=0000 配置输入滤波器 以Fck_int采样
TIM2->CCMR1|=0<<10; //IC2PS=00 配置输入分频,不分频

TIM2->CCER |=0<<5; //CC2P=0 上升沿捕获
TIM2->SMCR |=0X07<<0; //SMS =111 
TIM2->SMCR |=0X06<<4; //TS =110

TIM2->CR1 |= 0x01; //使能计数器1
}

  首先我们要先明白,其实定时器就是在对时钟脉冲的计数的累加,因为定时器的每个时钟脉冲都是固定并且是可设置,那么当累加到一定程度的数值时候,再去乘以对应的脉冲宽度,就能计算出脉冲时间了。那么脉冲计数的道理跟这个一样,我们只需要将内部时钟源改为外部时钟,M3的外部时钟有两种模式1和模式2的区别在于极性选择和分频器,对于比较稳稳定并且连续的脉冲,建议选择ETR 触发;对于其他情况可以选择TIMX_CHX 捕获通道对脉冲进行捕获。

  在STM32中文参考手册中,同样给出了配置步骤:

  对于脉冲计数,我们不对采集到的脉冲进行计数,ARR重载寄存器的值配置为最大65535,否则计数器CNT一旦到达这个值就会从0开始。最终只需读取CNT的值就可以知道脉冲的个数了。

时间: 2024-10-29 21:31:54

关于STM32F103 脉冲计数的问题的相关文章

K60的DMA多路脉冲计数

最近在做飞思卡尔的智能车,由于要用到两路脉冲计数,但是由于K60只有3个FTM, 一个分给电机,一个分给舵机,另一个用于正交解码. 所以FTM用不到了,只能另行办法.LPT虽然也可以计数,但是却只能计数一路而已,后来上网查了一下,发现可以用DMA来实现多路脉冲计数. 但是由于不知道DMA的触发的方式是以PORT的,所以我选择用了PTA25和PTA27来触发DMA,结果发现,能测出来一路脉冲数是正确的,另一路却是刚才那路的两倍.经过百度查了好多资料,折腾了1天半,还是没找出来错误.于是不小心点开了

STM32 定时器用于外部脉冲计数(转)

源:STM32 定时器用于外部脉冲计数 STM32 定时器(一)——定时器时间的计算 STM32的定时器是灰常NB的,也是灰常让人头晕的(当然是对于白菜来说的). STM32中的定时器有很多用法: (一)系统时钟(SysTick) 设置非常简单,以下是产生1ms中断的设置,和产生10ms延时的函数: void RCC_Configuration(void) { RCC_ClocksTypeDef RCC_ClockFreq; SystemInit();//源自system_stm32f10x.c

定时/计数器 脉冲计数

定时/计数器(Timer/counter)是单片机芯片中最基本的外围接口,它的用途非常广泛,常用于测量时间.速度.频率.脉宽.提供定时脉冲信号 等.相对于一般8位单片机而言,AVR不仅配备了更多的定时/计数器接口,而且还是增强型的,功能非常强大.ATmega128一共配置了2个8位和2个 16位,共4个定时/计数器,本小节重点对它的一些增强功能的应用做基本的介绍. 5.9.1 预分频器   定时/计数器最基本的功能就是对脉冲信号计数,当计数器计满后(8位为255,16位为65535),再来一个脉

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;  

单片机计数脉冲

#include <pic.h> __CONFIG(0x3004);//(0X30C4); #define T0_40MS 100    // 定义 TMR0 延时10MS 的时间常数 #define T1_100MS 40536 #define        DN                        RA5        //Motor rise                 2        DN #define        UP                       

单片机(simple chip microcomputer)概论、51单片机、MCS-51单片机、STM32、ARM

catalogue 1. 单片机概论 2. 51单片机 3. MCS-51单片机 4. QX-MINI51开发板(STC89C52芯片) 5. STM32单片机 6. stm32f103zet6开发板实验 1. 单片机概论 0x1: 仿真器 单片机应用系统的软硬件调试需要专门的开发工具,称为"单片机开发系统"或"仿真机".常用的开发方式是把开发系统(例如PC)中的CPU和RAM暂时出借给用户系统,利用开发系统对用户系统的软硬件进行调试(又称仿真),然后将调试好的程序

海德汉S3078长度计

手头有一款海德汉S3078的增量式长度计. 图三为长度计引出线缆的针脚编号,其中,Up和传感器Up短路,0V与传感器0V短路,其他为输出信号线缆.时序如图: Ua1和Ua2两个信号的相位,可以得出长度计针头的运动方向,根据脉冲数可以得出运动距离. 正好有阿尔泰公司的PCI1040伺服驱动器,可以采集A.B.Z的相位差并进行脉冲计数,把Ua1和Ua2的输出连接到A.B相位,即可进行脉冲计数,从而得到移动长度.

开源—低成本GM计数器-探测βγ射线

自由搬运,请保留本帖地址. --------------------------------------------------------------------分割线---------------------------------------------------------------------- 校电设作品,之后考研了,算是个结束吧. --------------------------------------------------------------------分割线---

关于22.5KHz模拟脉冲信号(60V)占空比测试,占空比精度0.1%

两种方法: 1.采集信号完整波形,进行计算: 是否选择一个250KS/s采样率的模拟量采集卡就可以显示要求的波形了呢? NO! 我们还未考虑测量精度0.1%! 因为模拟量信号是连续的,信号的周期是1/(22.5K)=44.4us,占空比精度要求0.1%,信号的分辨率至少为44.4us/1000=44.4ns, 采样率要比1/44.4ns=22.5MS/s要大才可测量到满足精度要求的波形! 2.将模拟信号转换成数字信号,使用脉冲计数来计算其占空比: 将60V模拟脉冲信号转成数字量脉冲信号,使用脉冲