硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6113|回复: 2
收起左侧

[有问必答] STM32F407的DMA的中断意外连续中断,读出的状态寄存器却是0,哪个鬼在捣乱呢?

[复制链接]

20

主题

249

回帖

309

积分

高级会员

积分
309
发表于 2016-8-22 20:33:36 | 显示全部楼层 |阅读模式
求助硬汉哥及各位大侠,我昨天做了一个在stm32f407上的串口空闲中断加DMA接收方式来实现串口接收不定长数据的程序,最后测试都正常,数据收的也对的。很高兴,但是晚上不经意间在DMA的中断服务函数中打了个断点,结果吓我一跳,这个断点一直会被触发,看状态寄存器,却都是0,是谁把中断搞出的呢?

DMA配置:外设到缓存,循环模式,不用FIFO,buffer:1024B,开启了传输完成中断,DMA1_Stream0,CH4
串口配置:UART5,开始了空闲中断
OS:使用了uC/OS-II

下面是相关程序:

DMA接收完成中断处理函数:
  1. void DMA1_Stream0_IRQHandler(void)//UART5,RX,DMA1_Stream0,CH4
  2. {
  3.   OS_ENTER_CRITICAL();
  4.   OSIntEnter();
  5.   OS_EXIT_CRITICAL();
  6.   if(DMA_GetFlagStatus(Streamx, FLAG_TCIFx))
  7.   {
  8.     OSQPost(MsgQ_Disp, (void *)temp); //2016-03-15
  9.   }
  10.   DMA_ClearFlag(Streamx, FLAG_TCIFx);
  11.   OSIntExit();
  12. }
复制代码
串口5空闲中断处理函数:
  1. void UART5_IRQHandler(void)
  2. {
  3.   OS_ENTER_CRITICAL();
  4.   OSIntEnter();
  5.   OS_EXIT_CRITICAL();
  6.   if(UART5->SR & (BIT4))
  7.   {
  8.     res=UART5->DR;//清USART_IT_IDLE标志序列
  9.     DMA_Cmd(Streamx, DISABLE);
  10.     index=Data_Buffer-DMA_GetCurrDataCounter(Streamx);
  11.     if((Data[index-2]==0xAA)&&(Data[index-1]==0x55))
  12.     {
  13.       OSQPost(MsgQ_Disp, (void *)temp); //2016-03-15
  14.     }
  15.     DMA_SetCurrDataCounter(Streamx,Data_Buffer);
  16.     DMA_ClearFlag(Streamx, FLAG_TCIFx);
  17.     DMA_Cmd(Streamx, ENABLE);
  18.   }
  19.   OSIntExit();
  20. }
复制代码
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2016-8-23 10:22:44 | 显示全部楼层
串口的空闲中断没有用过,不太了解情况,帮顶
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
 楼主| 发表于 2016-8-23 11:48:39 | 显示全部楼层

回 eric2013 的帖子

eric2013:串口的空闲中断没有用过,不太了解情况,帮顶 (2016-08-23 10:22) 
好的,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 21:37 , Processed in 0.043695 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表