这是初始化配置的代码 是按照原子哥的例程移植的,原子哥以及各位帮我看看问题出哪儿了
//红外遥控初始化
//设置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
}
一周热门 更多>