OpenEdv-开源电子网

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

关于ADC的中断

[复制链接]

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-5-22
在线时间
9 小时
发表于 2018-6-8 12:31:15 | 显示全部楼层 |阅读模式
5金钱
我用的是stm32精英板。在学习完ADC转换之后,我尝试着在原子哥给的例程上加以稍微的改进,改进内容如下。
首先是在adc的初始化函数中(即Adc_Init()),增加了中断的初始化部分,代码如下:
        NVIC_InitTypeDef ABC;
        ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);        ABC.NVIC_IRQChannel=ADC1_2_IRQn;
        ABC.NVIC_IRQChannelCmd=ENABLE;
        ABC.NVIC_IRQChannelPreemptionPriority=0;
        ABC.NVIC_IRQChannelSubPriority=0;
        NVIC_Init(&ABC);
之后是定义了中断服务函数,代码如下:
void ADC1_2_IRQHandler()
{
        if(ADC_GetITStatus(ADC1,ADC_IT_EOC))
        {
                LED1=0;
                delay_ms(1000);
        }
        ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
        LED1=1;
        delay_ms(1000);
}

其他的地方就没有改动了,跟例程是一模一样的。
实验现象是:按下重置按键之后,屏幕先开始是白色的,同时了绿色的led灯会一亮一灭。
之后屏幕显示字符,同时绿色的led再一次一闪一灭,之后就没有变化了。
红色的led灯至始至终没有亮过。屏幕上显示的字符一直是如图所示的样子,也是一直没有变化。
当然,不使能中断之后,程序就跟adc转换一样了。
请各位大神赐教,到底是哪儿出现了问题?感觉就好像程序一直陷入了中断函数中出不来的样子。
IMG_20180608_121136.jpg

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

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-5-22
在线时间
9 小时
 楼主| 发表于 2018-6-8 20:45:43 | 显示全部楼层
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2018-6-8 20:53:29 | 显示全部楼层
中断尽量不要加延时
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-5-22
在线时间
9 小时
 楼主| 发表于 2018-6-8 21:03:51 | 显示全部楼层
a5820736 发表于 2018-6-8 20:53
中断尽量不要加延时

这个延时函数是为了观察现象才用的。不加延迟的话,实验效果是差不多的,更图片上的一样
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-5-22
在线时间
9 小时
 楼主| 发表于 2018-6-9 09:10:49 | 显示全部楼层
再顶起来
回复

使用道具 举报

70

主题

6769

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13157
金钱
13157
注册时间
2012-11-26
在线时间
3817 小时
发表于 2018-6-9 09:33:48 | 显示全部楼层
在中断里延迟1S以上,简直找死。自己把自己杀了,还问为什么死了
学无止境
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-5-22
在线时间
9 小时
 楼主| 发表于 2018-6-9 10:25:30 | 显示全部楼层
jermy_z 发表于 2018-6-9 09:33
在中断里延迟1S以上,简直找死。自己把自己杀了,还问为什么死了

但是,即使不加延迟。显示屏上也不会读出采样电压呀。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-6-10 01:46:49 | 显示全部楼层
仿真找问题,看起来像是一直在执行中断服务函数
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-6-11 13:47:39 | 显示全部楼层
ADC中断里面没有读取采样的值,也没有刷新屏幕,只是进去延时,这样的话当第一次中断进去之后,然后开始延时,也许延时没有结束,第二次转换的中断又来了,等上一次延时结束,就会立马又进入中断,这样一直循环。程序在中断里面永远出不来,其他代码都没有机会执行。
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-7-10 20:22:06 | 显示全部楼层
楼主,问题解决了吗
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-7-10 20:52:52 | 显示全部楼层
你要在中断里面进行读ADC结果寄存器的动作啊??
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-7-24 10:09:34 | 显示全部楼层
进中断就读取电压值试试
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-14 22:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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