suyugangabcd 发表于 2010-5-14 13:12:47

求助:STM32 DMA与定时器中断问题

遇到一个问题好多天了,我用STM32开发了一块电路板,其中USART3的通讯采用DMA发送和接收(接收字节已知),工作流程:在DMA1_CH2发送完成后进入中断,中断中将RS485芯片设置为接收状态并开启定时器3(定时时间500ms),如果在500ms内接受到数据,则在DMA1_CH3中断中关闭定时器3,如果没接收到数据则进入定时器3中断报警。
问题:不管定时器3的时间设置为多少(甚至1s),在连续运行时都会进入定时器3中断报警,而事实上数据发送完后很快就有数据返回(小于200ms)!而且如果同时在DMA1_CH3中断(接收中断)和定时器3的中断内设置断点,则一切正常(不会进入定时器3报警)!如果只在定时器3内设置断点,则仍会进入定时器3中断,最大的疑问是设置断点后正常,请高手指点!
下面是一些程序代码:
void TIM3_IRQHandler(void)       //定时器3中断
{
  if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  {
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
      TIM_DeInit(TIM3);
 //     TIM_Cmd(TIM3, DISABLE);                 //超时后停止定时
    if(g_uchLED3_State)
    {
      LED3_ON;
      g_uchLED3_State =! g_uchLED3_State;
    }
    else
    {
      LED3_OFF;
      g_uchLED3_State =! g_uchLED3_State;
    }
  }
}

 
void DMA1_Channel2_IRQHandler(void)    //DMA1_CH2中断,USART3数据发送完成
{
  if(DMA_GetITStatus(DMA1_IT_TC2) == SET)
  {
    DMA_ClearITPendingBit(DMA1_IT_TC2);         
    Delay_Ms(10);
    UART3_RECEIVE;
    TIM_DeInit(TIM3);

    TIM_Config(TIM3,500);                      //发送完成后使能接收,并定时500ms,超出500mS未接收到数表示接受超时
  } 
}

void DMA1_Channel3_IRQHandler(void)      //DMA1_CH3中断,USART3数据接收完成
{

  if(DMA_GetITStatus(DMA1_IT_TC3) == SET)
  {
    TIM_DeInit(TIM3);
    DMA_ClearITPendingBit(DMA1_IT_TC3);       //接收完成后将接收标志置为OK,然后调用接收数据处理函数
//    TIM_Cmd(TIM3, DISABLE);                 //接收完成后停止定时
     
  } 
}
 
 
 

发表于 2010-5-14 14:48:03

RE:求助:STM32 DMA与定时器中断问题

你好。我认为你有以下几点错误:
1、中断向量的配置,NVIC_InitStructure.NVIC_IRQChannel这个需要进行配置,要对改中断进行配置,配置中断向量很重要;
2、清除中断标志,如果不清除中断标志,那么肯定会进来的。

suyugangabcd 发表于 2010-5-19 16:53:49

RE:求助:STM32 DMA与定时器中断问题

谢谢,中断向量也配置过了,TIM_ClearITPendingBit(TIM3, TIM_IT_Update);就是清除中断标志吧
还是老样子,呵呵

香水城 发表于 2010-5-19 17:29:15

RE:求助:STM32 DMA与定时器中断问题

这要看你在DMA1_CH3中断中的断点设在哪里了,如果断点是在停止TIM3之前,则程序停在断点时,虽然CPU暂停运行,但TIM3还在运行,当你在断点处停留期间,TIM3中断的条件已经满足了,你再继续执行就刚好把TIM3的中断标志清除,并正确关闭了TIM3。
请试试把断点放在DMA1_CH3中断中关闭TIM3的语句之后,如果还会有问题,说明没有正确地关闭TIM3;到底为什么有正确地关闭TIM3,目前还不清楚。

ST-361777 发表于 2012-5-28 17:22:44

RE:求助:STM32 DMA与定时器中断问题

清除:dizzy:
页: [1]
查看完整版本: 求助:STM32 DMA与定时器中断问题