打印

关于STM32F103的ADC使用Dual Mode的问题

[复制链接]
5021|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ADC1和ADC2序列各3个通道,连续转换模式,中断方式
请问在这样配置,在进中断读转换值时,如何确定这次中断读的是哪个通道的转换值?
沙发
yzzly| | 2012-4-11 15:10 | 只看该作者
用DMA读取吧!

使用特权

评论回复
板凳
quleelone|  楼主 | 2012-4-11 15:21 | 只看该作者
这由于要使用过零检测,并且转换次数不确定,所以不能使用DMA。
其实这个问题不用管是否Dual Mode,只要考虑独立模式下,多个通道采用扫描模式,同时中断方式读取转换值,如何知道当前读取的是哪个通道的值?

使用特权

评论回复
地板
quleelone|  楼主 | 2012-4-11 15:36 | 只看该作者
没有人用过吗?

使用特权

评论回复
5
香水城| | 2012-4-11 16:02 | 只看该作者
这由于要使用过零检测,并且转换次数不确定,所以不能使用DMA。
其实这个问题不用管是否Dual Mode,只要考虑独立模式下,多个通道采用扫描模式,同时中断方式读取转换值,如何知道当前读取的是哪个通道的值? ...
quleelone 发表于 2012-4-11 15:21


必须使用DMA!

STM32_Dual_ADC_mode.GIF (42.25 KB )

STM32_Dual_ADC_mode.GIF

使用特权

评论回复
6
quleelone|  楼主 | 2012-4-11 16:45 | 只看该作者
谢谢yzzly和香版主的回答
我DMA已经使能了
其实是这样的,我做的东西类似于电能表
单相的我已经做好了,因为单相的电压电流各只有一个通道,所以不存在这个问题
三相的话双同步+连续转换+扫描,A相电压电流同时转换,然后B相的,再然后C相的,循环往复,我使用的时中断方式读转换值
问题就是,我如何知道进入中断后读取的转换值时哪个通道的?

使用特权

评论回复
7
yzzly| | 2012-4-11 16:57 | 只看该作者
UA、IA,UB、IB,UC、IC依次间隔转换,那么DMA读取的数据也是依次间隔为UA、IA,UB、IB,UC、IC

ADC1->SQR3 |= UabAinCH << 0;                                                                        //设置规则序列中每个转换的通道号,转换号与通道号可以不对应,例如:第
        ADC1->SQR3 |= UbcAinCH << 5;                                                                        //一个转换通道16或者其他通道而不一定就是通道1,这样做的好处是:设计
        ADC1->SQR3 |= UcaAinCH << 10;                                                                        //图纸时模拟输入引脚就没有顺序要求,给设计带来极大的方便.
        ADC1->SQR3 |= U0AinCH << 15;
        ADC1->SQR3 |= UcapAinCH << 20;

ADC2->SQR3 |= IaAinCH << 0;                                                                                //设置规则序列中每个转换的通道号,转换号与通道号可以不对应,例如:第
        ADC2->SQR3 |= IbAinCH << 5;                                                                                //一个转换通道16或者其他通道而不一定就是通道1,这样做的好处是:设计
        ADC2->SQR3 |= IcAinCH << 10;                                                                        //图纸时模拟输入引脚就没有顺序要求,给设计带来极大的方便.
        ADC2->SQR3 |= I0AinCH << 15;
        ADC2->SQR3 |= UbatAinCH << 20;

使用特权

评论回复
8
quleelone|  楼主 | 2012-4-11 17:08 | 只看该作者
再次感谢楼上的回复
由于过零检测和长度不确定等因素,暂时无法使用DMA,使用的时中断方式,不过DMA已使能(香版主提到的)
同时,因为转换数据有的会处理,有的不会处理,所以我想知道等我要处理的数据来的时候,这个数据是哪个通道的。
或者,是不是不用连续转换和扫描模式也可以?

使用特权

评论回复
9
lut1lut| | 2012-4-12 10:51 | 只看该作者
F1的ADC,即使单ADC模块,多通道(比如这里的3个通道)的连续转换,我记得好像3个通道的都转换完了才有一个EOC中断哦。然后再下一轮3个通道转换,再一个EOC中断。

如果你是规则组转换,那么所有通道共享一个数据寄存器,不是被冲掉了。

如果使用注入组,倒是每个通道有各自的数据寄存器。3个转换完成后的EOC中断里,去各自的数据寄存器读各自的值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝