求助,定时器3通道1部分重映射到PB4作输入捕捉完成红外解码木有效果,JTAG也关了

2019-10-14 21:19发布

这是初始化配置的代码 是按照原子哥的例程移植的,原子哥以及各位帮我看看问题出哪儿了

//红外遥控初始化
//设置IO以及定时器3的输入捕获
void Remote_Init(void)      
{   
RCC->APB1ENR|=1<<1;   //TIM3 时钟使能 
RCC->APB2ENR|=1<<3;     //使能PORTB时钟 

JTAG_Set(SWD_ENABLE);//关闭JTAG 使能SWD

GPIOB->CRL&=0XFFF0FFFF; //PB4 输入  
GPIOB->CRL|=0X00080000; //上拉输入     
GPIOB->ODR|=1<<4; //PB4 上拉

//这里先对定时器3的通道1进行部分重映射到PB4
RCC->APB2ENR|=1<<0;//开启辅助时钟
AFIO->MAPR&=0XFFFFF3FF;//清除MAPR寄存器的[11:10]
AFIO->MAPR|=1<<11;//部分重映射TIM3通道1->B4
 
  TIM3->ARR=10000;   //设定计数器自动重装值 最大10ms溢出  
TIM3->SC=71;   //预分频器,1M的计数频率,1us加1.  

TIM3->CCMR2|=1<<8; //CC4S=01 选择输入端 IC4映射到TI4上
  TIM3->CCMR2|=3<<12;   //IC4F=0011 配置输入滤波器 8个定时器时钟周期滤波
  TIM3->CCMR2|=0<<10;   //IC4PS=00 配置输入分频,不分频 

TIM3->CCER|=0<<13; //CC4P=0 上升沿捕获
TIM3->CCER|=1<<12; //CC4E=1 允许捕获计数器的值到捕获寄存器中
TIM3->DIER|=1<<4;   //允许CC4IE捕获中断
TIM3->DIER|=1<<0;   //允许更新中断
TIM3->CR1|=0x01;     //使能定时器3

  MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2  
}

问题解决了,昏头了,定时器改了,通道没有重新配置了,原子哥的例程是通道4,而我用的通道1,修改后的代码如下
(发现JTAG_Set函数不调用,PB4重新映射后还是可以用的,不晓得为什么)

//红外遥控初始化
//设置IO以及定时器3的输入捕获
void Remote_Init(void)      
{   
RCC->APB1ENR|=1<<1;   //TIM3 时钟使能 
RCC->APB2ENR|=1<<3;     //使能PORTB时钟 

//JTAG_Set(SWD_ENABLE);//关闭JTAG 使能SWD 去掉了还是能用的

GPIOB->CRL&=0XFFF0FFFF; //PB4 输入  
GPIOB->CRL|=0X00080000; //上拉输入     
GPIOB->ODR|=1<<4; //PB4 上拉

//这里先对定时器3的通道1进行部分重映射到PB4
RCC->APB2ENR|=1<<0;//开启辅助时钟
AFIO->MAPR&=0XFFFFF3FF;//清除MAPR寄存器的[11:10]
AFIO->MAPR|=1<<11;//部分重映射TIM3通道1->B4
 
  TIM3->ARR=10000;   //设定计数器自动重装值 最大10ms溢出  
TIM3->SC=71;   //预分频器,1M的计数频率,1us加1.  

TIM3->CCMR1|=1<<0; //CC1S=01 选择输入端 IC1映射到TI1上 
  TIM3->CCMR1|=3<<4;   //IC1F=0011 配置输入滤波器 8个定时器时钟周期滤波
  TIM3->CCMR1|=0<<2;   //IC1PS=00 配置输入分频,不分频  

TIM3->CCER|=0<<1; //CC1P=0 上升沿捕获
TIM3->CCER|=1<<0; //CC1E=1 允许捕获计数器的值到捕获寄存器中

TIM3->DIER|=1<<1;   //允许CC1IE捕获中断
TIM3->DIER|=1<<0;   //允许更新中断

TIM3->CR1|=0x01;     //使能定时器3

  MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2  
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。