用STM32F051在做一个无刷直流电机的驱动时,用IM2的三个通道异或输入到通道1进行对电机的HALL信号进行捕获做换相,在测试过程中发现,在进入TIM2的捕获中断读取TIM2_SR寄存器判断捕获中断标志时,存在偶尔读到的捕获中断标志CC1IF为0的情况。下面这是我在中断读取标志位的代码:
if(TIM2->SR & TIM_SR_CC1IF) //采用这种方式会存在读不到CC1IF标志位的情况??????
{
TIM2_CCR1_temp = TIM2->CCR1;
TIM2->SR &= ~TIM_SR_CC1IF;
TIM2->DIER &= ~TIM_DIER_CC1IE; //禁止TIM2的捕获中断
TIM16->CNT = 0;
TIM16->SR = 0;
TIM16->DIER |= TIM_DIER_UDE; //使能TIM16更新事件触发DMA请求
// MotorCommutator(&g_MC_Structure, &g_DataBackupBlock);
}
这个BUG在Errata sheet中并未有相关的说明。不知道是我的读取方式不对,还是芯片本身就有这个BUG。 |