STM32
直播中

王燕

7年用户 1727经验值
私信 关注
[问答]

stm8 TIM2通道1的比较输出无法进入中断的原因?

我的目的是利用tiM2通道1的比较输出模式(翻转模式),在翻转的情况下能产生一个中断,以便在中断内记录翻转的次数。但是发现一直无法进入中断函数TIM2_CC_IRQHandler (void)内。求各位同志帮忙看一下哪里有问题。再次谢过
TIM2通道1的寄存器设置如下:

TIM2_CR1 = TIM2_CR1 | 0x00;
TIM2_CCMR1 = TIM2_CCMR1 | 0x30;        // 通道1被设置为输出比较模式  // OC1M = 011
                                                                // 计数器TIM2_CNT的值与捕获/比较寄存器1相同时,翻转
TIM2_CCER1 = TIM2_CCER1 | 0x03;      // CC1P = 1,低电平为有效电平
                                                               // CC1E = 1,开启输出引脚                 
TIM2_EGR=TIM2_EGR | 0x02;               //CC1G=1,通道CC1产生中断
TIM2_IER=TIM2_IER | 0x02;                       //允许捕获/比较1中断
TIM2_PSCR = 8;                                    //初始时钟分频为64   
TIM2_CCR1H = 0x7A;                            //初始化比较寄存器
TIM2_CCR1L = 0x12;
TIM2_CNTRH=0;
TIM2_CNTRL=0;
TIM2_CR1 = TIM2_CR1 | 0x01;            // 启动计数



中断函数:
@far @interrupt void TIM2_CC_IRQHandler (void)
{

      i++;
}

在中断配置文件stm8_interrupt_vector.c中
                 extern @far @interrupt void TIM2_CC_IRQHandler (void);
struct interrupt_vector const _vectab[]中为
                 {0x82, TIM2_CC_IRQHandler}, /* irq14 */

回帖(1)

李鑫

2024-5-14 16:58:24
根据您提供的信息,您正在尝试使用STM8的TIM2通道1的比较输出模式(翻转模式)来产生中断,并在中断内记录翻转次数。但是您发现无法进入中断函数`TIM2_CC_IRQHandler(void)`。为了帮助您解决问题,我将分步骤检查可能的问题。

1. 首先,确保您已经正确配置了TIM2的基本时钟和预分频器。这将确保定时器能够正常工作。

2. 接下来,检查您的中断使能位是否已正确设置。您需要确保`TIM2_IER`寄存器中的相应位已设置,以启用中断。

   ```c
   TIM2_IER |= TIM2_IER_CC1IE; // 启用通道1的中断
   ```

3. 确保全局中断已启用,并且`TIM2_CC_IRQHandler`函数已在中断向量表中正确注册。

4. 检查您的`TIM2_CCMR1`寄存器设置。您提到将其设置为`0x30`,这将通道1配置为输出比较模式,OC1M = 011。请确保这是您想要的配置。

5. 检查`TIM2_CCER`寄存器,确保通道1的捕获/比较输出使能位已设置。

   ```c
   TIM2_CCER |= TIM2_CCER_CC1E; // 使能通道1的捕获/比较输出
   ```

6. 确保您的中断服务函数`TIM2_CC_IRQHandler`正确实现了中断处理逻辑。在翻转发生时,您需要清除中断标志位,否则中断将不会再次触发。

   ```c
   void TIM2_CC_IRQHandler(void)
   {
       if (TIM2_SR1 & TIM2_SR1_CC1IF) // 检查通道1中断标志
       {
           TIM2_SR1 &= ~TIM2_SR1_CC1IF; // 清除中断标志
           // 在此处记录翻转次数
       }
   }
   ```

7. 最后,确保您的硬件连接正确,定时器通道1的输出引脚没有短路或受到干扰。

按照这些步骤检查您的代码和硬件设置,应该能够帮助您找到问题所在。如果问题仍然存在,请提供更多详细信息,以便进一步分析。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分