下面为定时器捕获实验;实验主要内容为每秒钟捕获采集发动机转速,转速信号为高电平数字信号,程序内容为寄存器版本void Timer3_Config(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->AHB1ENR|=1<<2; //PORTC时钟使能
GPIO_Set(GPIOC,PIN8,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用上拉
GPIO_AF_Set(GPIOC,8,2); //PC8,AF2
TIM3->ARR=arr;
TIM3->PSC=psc;
}
void Timer3_ENInt(void)
{
TIM3->CCMR2|=1<<0; //CC3S=01 Ñ¡Ôñêäèë¶Ë IC1ó3éäμ½TI1éÏ
TIM3->CCMR2|=0<<4; //IC3F=0000 ÅäÖÃêäèëÂË2¨Æ÷ 2»ÂË2¨
TIM3->CCMR2|=0<<2; //IC3PS=00 ÅäÖÃêäèë·ÖÆμ,2»·ÖÆμ
TIM3->CCER|=0<<9; //CC3P=01
TIM3->CCER|=1<<8; //CC3E=1
TIM3->EGR=1<<0;
TIM3->DIER|=1<<3; //允许捕获中断
TIM3->DIER|=1<<0; //允许更新中断
MY_NVIC_Init(0,0,TIM3_IRQn,2);//优先级
}
void Timer3_ENABLE(void)
{
TIM3->CR1|=0x01; //定时器更新
}
static u8 Engine_number=0;
//发动机转速
void TIM3_IRQHandler(void)
{
u16 tsr;
tsr=TIM3->SR;
if(Engine_times<1000||Engine_times==1000)
{
if(tsr&0X08)//捕获更新标记
{
Engine_number++;
Timer5_ENABLE();
}
}else
// if(Engine_times==1000||Engine_times>1000)
{
USART1_Send(&Engine_number,1);
Engine_number=0;
Engine_times=0;
TIM5->CR1=~(1<<0); //不是能定时器5
TIM3->SR=0;//清楚中断标记位
}
程序主要内容为配置定时器3通道3,且当产生捕获标记时开始使能定时器5计数,当超过1S中发送,清空数值关闭定时器5,
目前存在的问题进不去捕获更新标记if里。
不知道是不是配置错误还是程序不完善。
谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>