你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
ADC读不到数据
[复制链接]
lightour_
提问时间:2017-12-21 10:09 /
问答
是否解决:
在写程序的时候发现一个奇怪的问题,ADC用的是单次扫描模式,软件开启,在ADC中毒里读取数据。
定时器每隔1ms进一次中断,ADC的软件开启放在定时器中断里边,当设置我1ms开启一次的时候,可以读到ADC的数据,当设置为10ms开启一次的时候,读不到ADC的数据。
程序如下,帮我看一下什么问题
赞
0
收藏
1
评论
9
分享
发布时间:2017-12-21 10:09
举报
请先
登录
后回复
9个回答
lightour_
回答时间:2017-12-21 10:10:09
a0a.1 32b0c
着急,折腾了快一天了,
赞
0
评论
回复
支持
反对
小小超
回答时间:2018-2-24 09:07:33
a0a.1 32b0c
开启扫描模式后,数据存在DMA里面吧。干啥不打开DMA?
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
疯de_恒
回答时间:2018-2-24 09:13:44
a0a.1 32b0c
ADC初始化应该选择软件触发方式。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
wudianjun2001
回答时间:2018-2-24 09:22:26
a0a.1 32b0c
触发模式为定时器,这个有问题吧,你这个是软件手动触发的
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
wenyangzeng
回答时间:2018-2-24 09:37:32
a0a.1 32b0c
使用定时器触发ADC并不需要用到定时器中断:
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
你应该仔细阅读官方手册,找到能够触发ADC的定时器进行配置。触发ADC后就无需再管理触发了,只要在ADC中断读取数据即可。官方有现成例程可供参考。
TIMTrigger_AutoInjection.rar
(14.06 KB, 下载次数: 5)
2018-2-24 09:37 上传
点击文件名下载附件
评分
参与人数
1
蝴蝶豆
+4
收起
理由
zero99
+ 4
查看全部评分
赞
0
评论
回复
支持
反对
wolfgang
回答时间:2018-2-24 11:01:53
a0a.1 32b0c
你这是定时读取ADC的值
如何写ADC的值呢?DMA加循环没?否则写满缓冲就中断不再写缓冲区了~~
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
无薪税绵
回答时间:2018-2-24 12:00:16
a0a.1 32b0c
请试试,把ADC的中断优先级 设置成比 定时器的优先级 要高。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
七哥
回答时间:2018-2-25 22:42:43
a0a.1 32b0c
本帖最后由 toofree 于 2018-2-25 22:44 编辑
这种用法不对呀。
定时器触发的ADC,不需要在定时器中断中操作ADC转换的吧,直接定时器硬件触发了ADC转换。
另外,你在ADC中断中读到了两个通道的数据缓存是什么意思,那就是你用了DMA或者ADC通道序列,但在你有限的代码中是看不出来的。
最好先研究一下6楼的例程吧,这个是标准外设库中的例程。
关键你这没说是用的哪个型号的MCU。结合用户指导手册,好好研究体会一下标准外设库中的样例程序吧。
给你附两个中英文用户指导手册,版本是老了点,都是比较经典的。
CD00171190.pdf
(9.09 MB, 下载次数: 0)
2018-2-25 22:38 上传
点击文件名下载附件
CD00171190_CN.pdf
(13.64 MB, 下载次数: 29)
2018-2-25 22:38 上传
点击文件名下载附件
3.1.2库下编译好的TIMTrigger_AutoInjection工程:
STM32F10x_StdPeriph_312_ADC.rar
(1.31 MB, 下载次数: 0)
2018-2-25 22:42 上传
点击文件名下载附件
评分
参与人数
1
蝴蝶豆
+4
收起
理由
zero99
+ 4
查看全部评分
赞
0
评论
回复
支持
反对
fengsuo3
回答时间:2018-2-28 15:42:46
a0a.1 32b0c
谢谢楼主分享
评分
参与人数
1
ST金币
-1
收起
理由
zero99
-1
哪来的分享
查看全部评分
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
你应该仔细阅读官方手册,找到能够触发ADC的定时器进行配置。触发ADC后就无需再管理触发了,只要在ADC中断读取数据即可。官方有现成例程可供参考。
评分
查看全部评分
如何写ADC的值呢?DMA加循环没?否则写满缓冲就中断不再写缓冲区了~~
评分
查看全部评分
评分
查看全部评分
这种用法不对呀。
定时器触发的ADC,不需要在定时器中断中操作ADC转换的吧,直接定时器硬件触发了ADC转换。
另外,你在ADC中断中读到了两个通道的数据缓存是什么意思,那就是你用了DMA或者ADC通道序列,但在你有限的代码中是看不出来的。
最好先研究一下6楼的例程吧,这个是标准外设库中的例程。
关键你这没说是用的哪个型号的MCU。结合用户指导手册,好好研究体会一下标准外设库中的样例程序吧。
给你附两个中英文用户指导手册,版本是老了点,都是比较经典的。
3.1.2库下编译好的TIMTrigger_AutoInjection工程:
评分
查看全部评分
评分
查看全部评分