你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
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工程:
评分
查看全部评分
评分
查看全部评分