初级会员

- 积分
- 62
- 金钱
- 62
- 注册时间
- 2016-9-26
- 在线时间
- 26 小时
|
5金钱
现在我是要给PB0(TIM3—CH3)输入一个脉冲,每次检测到一个上升沿或者下降沿的时候,计数器的值上升1:
然后上周原子哥让我去参考他之前写的程序:
//TIM5,外部计数模式
void TIM3_CH2_Excnt_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3 时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0X0FFFFFFF; //PA7 清除之前设置
GPIOA->CRL|=0X80000000; //PA7 输入
GPIOA->ODR|=1<<7; //PA7 上拉
TIM3->ARR=arr; //设定计数器自动重装值
TIM3->PSC=psc; //预分频器
TIM3->CCMR1|=1<<8; //CC2S=01 选择输入端 IC2映射到TI2上
TIM3->CCMR1|=0<<12; //IC2F=0000 配置输入滤波器 不滤波
TIM3->CCER|=1<<5; //CC1P=0 下降沿计数
TIM3->SMCR|=6<<4; //触发选择:滤波后的定时器输入2(TI2FP2)
TIM3->SMCR|=7<<0; //外部时钟模式1
TIM3->CR1|=1<<0; //启动计数器,CEN=1
}
///////这个程序在我板子上使用起来没有问题,我测试了一下,的确是按键按下,检测到一个边沿信号之后,CNT寄存器里面的值是逐渐增加的。
但是我依照原子哥的教程来编写PB0口的输入捕获的时候,编写程序如下,(我也考虑到用的是CH3,所以变换使用了TIM3->CCMR2寄存器)
void PB0Init(void){ RCC->APB1ENR|=1<<1; //TIM3 时钟使能 RCC->APB2ENR|=1<<3; //使能PORTB时钟 GPIOB->CRL&=0XFFFFFFF0; //PB0 清除之前设置 GPIOB->CRL|=0X00000008; //PB0输入 GPIOB->ODR|=1<<0; //PB0 上拉 TIM3->ARR=20; //设定计数器自动重装值 TIM3->PSC=0; //预分频器 TIM3->CCMR2|=1<<0; //CC2S=01 选择输入端 IC2映射到TI2上 TIM3->CCMR2|=0<<4; //IC2F=0000 配置输入滤波器 不滤波 TIM3->CCER|=1<<9; //CC1P=0 下降沿计数 TIM3->SMCR|=6<<4; //触发选择:滤波后的定时器输入2(TI2FP2) TIM3->SMCR|=7<<0; //外部时钟模式1 TIM3->CR1|=1<<0; //启动计数器,CEN=1 }
//这个程序使用起来很奇怪,烧写进去之后PB0口有输入脉冲时没有任何反应,但是,继续对PA7口进行相应的输入时,他却还是继续有反应??
很不解,我明明配置的是PB0,为何PB5有反应了呢??PB0为什么就是设置不对呢??
|
|