OpenEdv-开源电子网

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

ADC中断函数中的标志位问题!

[复制链接]

2

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2020-4-4
在线时间
18 小时
发表于 2020-6-18 09:39:41 | 显示全部楼层 |阅读模式
3金钱
我在ADC的2通道转化实验中用DMA传输,并且用了ADC_ITConfig(ADC1,ADC_IT_EOC, ENABLE);

连接了NVIC后我编写中断服务函数

void ADC1_2_IRQHandler(void)
{
    //if (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC))
       
    //if (ADC_GetITStatus (ADC1 ,ADC_IT_EOC)!=RESET )
    //{
        //ADC_ConvertedValue = ADC_GetConversionValue (ADC1);
        pulse=ADC_ConvertedValue[1]/40.96;
        TIM_SetCompare1(TIM3, pulse);//修改CCR1的值
       
        psc=ADC_ConvertedValue[0]/6.32+72;
        TIM_PrescalerConfig(TIM3,(psc-1),TIM_PSCReloadMode_Immediate);
        
   //}
    ADC_ClearITPendingBit (ADC1,ADC_IT_EOC);
}


问题就是出在被注释掉的两行if语句,  一个是ADC_GetFlagStatus函数,另一个是ADC_GetITStatus;
经过我实际测试,只要用了其中一个if ,都不会执行下面的函数体。
然后我只能把两个if都注释了,运行程序时发现是可以正确中断并且执行下面的函数体的。

我想咨询就是这两个if函数有什么区别呢?  为什么都跑到中断函数里了但是不满足这两个if条件呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

412

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2722
金钱
2722
注册时间
2019-8-14
在线时间
415 小时
发表于 2020-6-18 15:38:26 | 显示全部楼层
回复

使用道具 举报

12

主题

3407

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8707
金钱
8707
注册时间
2020-5-11
在线时间
4211 小时
发表于 2020-6-19 10:27:41 | 显示全部楼层
我想,应该是DMA读取了DR,标志就被清掉了。
傲游截图20200619102652.jpg
专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-11 03:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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