可能是我把问题描述的太复杂了,大家没耐心看吧,简化一下就是这样的:
按下一个KEY启动TIM4开始计数,怎么屏蔽掉启动TIM4时产生的那次更新中断(从模式控制更新中断,SMS=110)???因为我只想要溢出更新中断。
按寄存器上写的是要置位URS,我也确确实实置位了,但是怎么屏蔽不掉?
-----------------------------------------------------------------------------------------------
前面有一位仁兄发帖询问怎么用TIM检测USB的复位信号(注:下降沿信号并持续Xms),并通过中断方式通知系统。
我对STM32也非常感兴趣,就顺便想帮这位仁兄实验一下:
我的想法是:用USB复位信号的下降沿启动TIMx,计数Xms后溢出,在更新中断中检测复位信号的状态,如果该信号依然为低则认为USB复位了(点亮LED1);TIMx启动设置为触发模式,计数设置为单脉冲模式(后来因该句导致CNT无法启动就屏蔽此句),即在发生下一次更新的时候停止计数。
我用万利199的板子,我发现TIM4有2个通道的重映射管脚正好落在摇杆按键的LEFT和RIGHT上,所以我想用摇杆按键来模拟USB的复位信号。
现在的症状:我每次按键立即进入更新中断。
如果程序中我没有把CR1寄存器的URS位置一,这是合理的,但是因为我只希望让溢出的时候进更新中断,所以我自己写了几行代码把URS这一位置1。程序运行的时候,URS这一位也确确实实置1了,但是怎么不起作用?
下面我依次贴上 一直没有按键,停止运行后 各个寄存器的配置情况图;
按下按键, 再停止运行 各个寄存器的值图
还有我的部分代码
(原文件名:keyno截图00.png)
(原文件名:keyyes(KeyDownStop)截图01.png)
void TIM4_IRQHandler(void)
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM4, TIM_IT_Update );
readvalue = GPIO_ReadInputDataBit( GPIOD, GPIO_Pin_12 );
if(readvalue==0)
{
GPIO_SetBits(GPIOC, GPIO_Pin_7);
}
else
GPIO_SetBits(GPIOC, GPIO_Pin_6);
}
}
一周热门 更多>