先前在论坛找到了相关参考资料,实现了定时器外部时钟模式1的测频,整体效果还不错,达到了1HZ到20M的频率范围。
在相关数据手册上找到了设置的步骤,于是模仿着开始利用类似的模式2实现同样的功能,但效果一直没用出来。
在此贴出我的部分代码,与参考手册相关设置截图。希望各路大侠能伸出你们的援助之手。
main部分:
while(1)
{
TIM3->CR1 |= 1 << 0;
delay_ms(1000);
TIM3->CR1 &= ~(1<<0);
fre = count+TIM2->CNT;
DisplayNumber(fre);
count=0;
TIM3->CNT=0;
}
定时器部分:
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
count+=65536;
}
TIM3->SR&=~(1<<0);//清除中断标志位
}
void Timer3_Init(void)
{
//???????¨?±?÷?±??
RCC->APB1RSTR |= 1 << 1; //定时器3复位
RCC->APB1RSTR &= ~(1<<1);
RCC->APB1ENR |= 1 << 1; //定时器3时钟开启
TIM3->SMCR|=1<<14; //使能外部时钟模式2
TIM3->SMCR&=0<<15; //?外部触发极性
TIM3->SMCR&=(0<<8&0<<9&0<<10&0<<11); //无滤波器
TIM3->SMCR&=(0<<12&0<<13); //关闭预分频
RCC->APB2ENR|=1<<5; //配置PD2为浮空输入,引脚速度50M
GPIOD->CRL&=0XFFFFF0FF;
GPIOD->CRL|=0X00000700;
// GPIOD->ODR|=0<<0;
TIM3->ARR=65535; //自动重装值
TIM3->  SC=0; //不分频
TIM3->DIER|=1<<0; //允许更新中断
TIM3->DIER|=1<<6; //允许触发中断
TIM3->CR1|=0x01; //使能定时器3
MY_NVIC_Init(1,3,TIM3_IRQChannel,2); //抢占1,子优先级3,组2
}
|