lightour_ 发表于 2017-12-21 10:09:22

ADC读不到数据

在写程序的时候发现一个奇怪的问题,ADC用的是单次扫描模式,软件开启,在ADC中毒里读取数据。
定时器每隔1ms进一次中断,ADC的软件开启放在定时器中断里边,当设置我1ms开启一次的时候,可以读到ADC的数据,当设置为10ms开启一次的时候,读不到ADC的数据。
程序如下,帮我看一下什么问题

lightour_ 发表于 2017-12-21 10:10:09

着急,折腾了快一天了,

ts2000 发表于 2018-2-24 09:07:33

开启扫描模式后,数据存在DMA里面吧。干啥不打开DMA?

す疯Ⅱ恒す 发表于 2018-2-24 09:13:44

ADC初始化应该选择软件触发方式。

wudianjun2001 发表于 2018-2-24 09:22:26

触发模式为定时器,这个有问题吧,你这个是软件手动触发的

wenyangzeng 发表于 2018-2-24 09:37:32

使用定时器触发ADC并不需要用到定时器中断:
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
你应该仔细阅读官方手册,找到能够触发ADC的定时器进行配置。触发ADC后就无需再管理触发了,只要在ADC中断读取数据即可。官方有现成例程可供参考。

wolfgang2015 发表于 2018-2-24 11:01:53

你这是定时读取ADC的值
如何写ADC的值呢?DMA加循环没?否则写满缓冲就中断不再写缓冲区了~~

无薪税绵 发表于 2018-2-24 12:00:16

请试试,把ADC的中断优先级 设置成比 定时器的优先级 要高。

toofree 发表于 2018-2-25 22:42:43

本帖最后由 toofree 于 2018-2-25 22:44 编辑

这种用法不对呀。
定时器触发的ADC,不需要在定时器中断中操作ADC转换的吧,直接定时器硬件触发了ADC转换。
另外,你在ADC中断中读到了两个通道的数据缓存是什么意思,那就是你用了DMA或者ADC通道序列,但在你有限的代码中是看不出来的。
最好先研究一下6楼的例程吧,这个是标准外设库中的例程。

关键你这没说是用的哪个型号的MCU。结合用户指导手册,好好研究体会一下标准外设库中的样例程序吧。

给你附两个中英文用户指导手册,版本是老了点,都是比较经典的。



3.1.2库下编译好的TIMTrigger_AutoInjection工程:

fengsuo3 发表于 2018-2-28 15:42:46

谢谢楼主分享
页: [1]
查看完整版本: ADC读不到数据