你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
suyugangabcd 提问时间:2010-5-14 13:12 /
遇到一个问题好多天了,我用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);                 //接收完成后停止定时
     
  } 
}
 
 
 
收藏 评论4 发布时间:2010-5-14 13:12

举报

4个回答
废鱼 回答时间: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与定时器中断问题

清除

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版