STM32F407 脉冲计数器

void timer2_TRG(u16 arr,u16 psc)
{
RCC->APB1ENR |= 1<<0; //开启定时器2的时钟
RCC->AHB1ENR |= 1<<0; //开启PA口的时钟

GPIOA->MODER &= ~(3<<0*2);
GPIOA->MODER |= 2<<0*2; //复用功能

GPIOA->AFR[0] &= ~(0x0f<<4*0); //复用成TIM2_ETG
GPIOA->AFR[0] |= (1<<4*0);

GPIOA->PUPDR &= ~(3<<0*2); //浮空输入
// GPIOA->PUPDR |= 2<<0*2; //下拉输入

TIM2->SMCR |= 1<<14; //使能外部时钟模式2 计数器在外部触发输入ETR出现上升沿或下降沿时计数
TIM2->SMCR &=~(0x0f<<8); //不滤波
TIM2->SMCR &=~(1<<15); //0:高电平或者上升沿有效
TIM2->SMCR |= 0<<12;   //不分频ETRP

TIM2->ARR = arr; //设置重载值
TIM2->PSC = psc; //设置分频器

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

}

 图1:PA0的复用功能一部分

图2:外部引脚作为时钟输入

 

查找STM32F407ZGT6芯片的芯片手册,PA0 的第一个复用功能就能作为TIM2的外部时钟输入,在SMCR寄存器的第14位使能外部时钟模式2 计数器在外部触发输入ETR出现上升沿或下降沿时计数,内部时钟输入就会被关闭,那么在选择极性,边沿检测和分频器,输入滤波器,就跟那么就跟内部时钟输入一样。

一般我们一次脉冲加一次,所以在输入脉冲分频器那里和计数分频那里都设置为1,不分频。使能计数, 最终只要定时读取TIM2的CNT计数器的值就是接收到的值了。

 

转载于:https://www.cnblogs.com/zhihong/p/5937407.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值