我有一个STM32F302CBT6(运行在72MHz)项目,我需要测量4个信号的频率,每个信号约250kHz.信号连接到TIM1通道1-4.
现在,了解250kHz太快(或者是?)同时处理所有那些输入捕获中断(因为它们可能同步或同时发生......)我想逐个测量每个通道.我在程序开始时初始化了所有通道,并考虑在每个通道测量后逐个启用相应的中断.这是一个合适的想法还是我错过了什么?
问题是在为通道1提供第一个中断之后,下一个中断从未得到服务,因为虽然没有使能中断,但状态寄存器还有多个其他待处理中断(CCxIF和CCXOF,以及CxIF)以及设置的过捕获标志.我试图通过读取所有捕获值或设置TIMx-> SR = 0但没有帮助来避免此问题.
我将如何测量这些信号以及确保正确捕获每个通道的正确方法是什么?
我对此非常感兴趣,并希望了解如何进行这种处理或者如果你能指出我做错了什么.谢谢.
我目前的相关代码如下.
这是中断处理程序:
void TIM1_CC_IRQHandler(void) {
if (TIM_GetITStatus(IC_TIMER, IC_CH1) == SET) {
/* Clear TIM1 Capture compare interrupt pending bit */
TIM_ClearITPendingBit(IC_TIMER, IC_CH1);
//Read the capture value
raw_captures[capture_index] = TIM_GetCapture1(IC_TIMER);
capture_index++;
//Also read the others to avoid overcaptures
TIM_GetCapture2(IC_TIMER);
TIM_GetCapture3(IC_TIMER);
TIM_GetCapture4(IC_TIMER);
if(capture_index == 2) {
TIM_ITConfig(IC_TIMER, IC_CH1, DISABLE);
}
} else if (TIM_GetITStatus(IC_TIMER, IC_CH2 == SET)) {
TIM_ClearITPendingBit(IC_TIMER, IC_CH2);
//Read the capture value
raw_captures[capture_index] = TIM_GetCapture2(IC_TIMER);
capture_index++;
TIM_GetCapture1(IC_TIMER);
TIM_GetCapture3(IC_TIMER);
TIM_GetCapture4(IC_TIMER);
if(capture_index == 4) …Run Code Online (Sandbox Code Playgroud)