OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8686|回复: 8

stm32f407系列dma能够进入中断,但是判断中断标志位却不成立。

[复制链接]

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-8-8
在线时间
0 小时
发表于 2015-8-8 12:06:13 | 显示全部楼层 |阅读模式
5金钱

如题目所说,为什么进入中断,标志位却不成立啊,中断设置是这样的

 NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; 
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; 
 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;
 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
 NVIC_Init(&NVIC_InitStructure);

然后在中断函数里判断标志位是这样的。

if(DMA_GetITStatus(DMA2_Stream0, DMA_FLAG_TCIF0)==SET)

总之进不去if,为什么啊,新手一枚,调试好久了,求大神指点。

上面是定时器中断,下面才是dma中断,然后还是那个问题

void MYDMA_Interrupt(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;
 
 DMA_ITConfig(DMA2_Stream0,DMA_IT_TC,ENABLE);//????DMA?????ê????????
 NVIC_InitStructure.NVIC_IRQChannel=DMA2_Stream0_IRQn ; //DMA2?????÷0????
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //??????????1
 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //×???????3
 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
 NVIC_Init(&NVIC_InitStructure);
}

最佳答案

查看完整内容[请看2#楼]

你设置的是定时器中断,判断的是DMA中断,成立才见鬼了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-8 12:06:14 | 显示全部楼层
你设置的是定时器中断,判断的是DMA中断,成立才见鬼了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2015-8-8 12:11:13 | 显示全部楼层
那你看,中断标志位相关寄存器的值,看是寄存器的哪个位置1了,就知道发生了什么中断
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-8-8
在线时间
0 小时
 楼主| 发表于 2015-8-8 16:12:27 | 显示全部楼层

寄存器我不是太了解,网上百度的说IABR寄存器是激活标志位寄存器,我在进入中断后查看,只有IABR1不是0,具体是下面的样子,这是哪个中断啊,该怎么查啊。

回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-8-8
在线时间
0 小时
 楼主| 发表于 2015-8-8 17:24:33 | 显示全部楼层
回复【2楼】Admin:
---------------------------------
麻烦您帮忙看一下,我查看寄存器后的结果,就像图片里一样IABR1是01000000,这说明是什么中断呢
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-8-8
在线时间
0 小时
 楼主| 发表于 2015-8-8 20:37:52 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
我定时器中断和dma中断都设置了啊,然后定时器中断确实可以进去,那个标志位如果是定时器中断我觉得也正常,因为毕竟定时器中断设置是按您的例程写的,没什么问题。
但是我的问题主要是,dma中断是可以进去的(如果我没有设置dma中断的话,应该连void DMA2_Stream0_IRQHandler(void)这个函数都进不去吧),但是却可以进去,只是if(DMA_GetITStatus(DMA2_Stream0, DMA_FLAG_TCIF0)==SET)判断不通过,总之我打算设置的是传输完成后进中断,但是虽然可以进中断,在debug里面发现却并没有把数组里的所有数都都填满,然后就进中断了。
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-8-8
在线时间
0 小时
 楼主| 发表于 2015-8-8 20:40:56 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
void MYDMA_Interrupt(void) 
{
NVIC_InitTypeDef NVIC_InitStructure;

DMA_ITConfig(DMA2_Stream0,DMA_IT_TC,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel=DMA2_Stream0_IRQn ; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; 
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; 
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}我最开始发错了,这个才是,那个是tim的中断,抱歉,那麻烦您看看这个是不是写的不对,然后还是一开始的问题
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2015-8-8
在线时间
0 小时
 楼主| 发表于 2015-8-9 14:05:46 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
麻烦您指点一下啊,我已经陷入瓶颈了,我觉得这个问题可能和我最近遇到的另一个问题有关,就是配置中断原本正常,可以进中断,但是当我再配置一个定时器中断时,原本正常的中断就异常了,进不去了,而且定时器中断抢占优先级数值要大于原来配置的中断,也就是定时器抢占优先级小,感觉好奇怪呀,。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-10-14
在线时间
2 小时
发表于 2017-6-1 14:55:23 | 显示全部楼层
匿名消息 发表于 2015-8-9 14:05
回复【5楼】正点原子:
---------------------------------
麻烦您指点一下啊,我已经陷入瓶颈了,我觉得这 ...

您好,我最近也遇到这样的问题,请问你是怎么解决的?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 22:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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