OpenEdv-开源电子网

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

急!ADC数据采集传至上位机

[复制链接]

43

主题

87

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-9-16
在线时间
41 小时
发表于 2019-1-23 20:08:01 | 显示全部楼层 |阅读模式
100金钱
现在要求我用stm32F407开发板,有3个传感器,通过ADC采集数据,通过串口传至上位机,上位机用Labview编写,不知道该怎么搞啊,求大佬们指点下,给个大概的方案,单通道的我之前做好了,现在多通道不知道咋搞了,看网上有些用DMA传递数据,不知道为啥要用DMA,另外三个通道的话,协议该怎么定才好(从来没定过协议),最主要的定了协议,怎么通过串口传输数据呢?是通过uart函数,一个字节一个字节的传,还是通过printf函数呢?毕竟三个通道的ADC数据传输协议的话,肯定不止一个字节。真心求指导,感激不尽

最佳答案

查看完整内容[请看2#楼]

原子哥给的例子里面其实是最基本的教学案例,假如用于工业应用的话是不可靠的。 任何通讯都建议应该走协议的方式,你上面的需求: 1. STM32采集三路AD,你不就得到3个变量值么(ADC值,或者是计算值); 2. 串口发送设计一个协议,很简单例如“01 data0 data1 data2 crc”,当然这个协议随你定,只要能够区分三个数据就可以了,协议就是一个人为规定的东西,随便你定,上位机得到协议后解析三个数据就可以了; 3. 最后强调一下 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2015-12-29
在线时间
70 小时
发表于 2019-1-23 20:08:02 | 显示全部楼层
原子哥给的例子里面其实是最基本的教学案例,假如用于工业应用的话是不可靠的。
任何通讯都建议应该走协议的方式,你上面的需求:
1. STM32采集三路AD,你不就得到3个变量值么(ADC值,或者是计算值);
2. 串口发送设计一个协议,很简单例如“01 data0 data1 data2 crc”,当然这个协议随你定,只要能够区分三个数据就可以了,协议就是一个人为规定的东西,随便你定,上位机得到协议后解析三个数据就可以了;
3. 最后强调一下必须要用类crc的校验的,没有校验那么你的数据是不可靠的,当然你要嫌麻烦可以不做crc。
回复

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2019-1-7
在线时间
13 小时
发表于 2019-1-24 10:51:15 | 显示全部楼层
你没理解mcu的外设作用,ad是用于传感器数据采集。uart用于上位机通信,你无法直接用ad给上位机传数。对于初学者最好了解各部分外设作用,dma少用,这样基本功扎实些。对于多通道AD采集参考原子对于ad的说明,还不明白先翻手册。
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2019-1-24 11:03:31 | 显示全部楼层
3个传感器的值能采集到吗?
能采集到就按照2楼的方式发送啊
上位机收到数据按照2楼设计的协议解析啊
当然,2楼只是举了个例子,你可以自己设计协议
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

43

主题

87

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-9-16
在线时间
41 小时
 楼主| 发表于 2019-1-25 17:01:26 | 显示全部楼层
abc82465zz 发表于 2019-1-23 23:42
原子哥给的例子里面其实是最基本的教学案例,假如用于工业应用的话是不可靠的。
任何通讯都建议应该走协议 ...

那么按协议发送数据的时候是用uart函数逐个字节的发送还是用printf函数直接一下发送一套数据呢
回复

使用道具 举报

43

主题

87

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-9-16
在线时间
41 小时
 楼主| 发表于 2019-1-25 17:02:47 | 显示全部楼层
wangzhaohui 发表于 2019-1-24 10:51
你没理解mcu的外设作用,ad是用于传感器数据采集。uart用于上位机通信,你无法直接用ad给上位机传数。对于 ...

我知道ad是用来数据采集的,然后用串口把采集的数据发送给上位机嘛
回复

使用道具 举报

43

主题

87

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-9-16
在线时间
41 小时
 楼主| 发表于 2019-1-25 17:04:39 | 显示全部楼层
abc82465zz 发表于 2019-1-23 23:42
原子哥给的例子里面其实是最基本的教学案例,假如用于工业应用的话是不可靠的。
任何通讯都建议应该走协议 ...

还有单个ADC进行3通道数据采集的话,是按照顺序,轮流采集3个传感器的数据么?然后轮流发送?
回复

使用道具 举报

15

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2018-10-30
在线时间
60 小时
发表于 2019-1-25 17:30:47 | 显示全部楼层
printf不是也是通过串口发送吗。。。
回复

使用道具 举报

7

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2015-12-29
在线时间
70 小时
发表于 2019-1-27 00:51:25 | 显示全部楼层
fengruixin1992 发表于 2019-1-25 17:04
还有单个ADC进行3通道数据采集的话,是按照顺序,轮流采集3个传感器的数据么?然后轮流发送?

三个传感器不就是接STM32的三个ADC引脚么,你一个都能采集了,三个其实是一样的。每个ADC采集不都会得到一个值么,这样就有3个值了。这里面有两件事:
1.STM32采集ADC值,采集的数据其实就是对应的三个变量值;
2.STM32和上位机进行串口通讯,将1中采集的三个变量值传递给上位机,这个传递的方式就是通过串口协议的方式,至于协议可以自己定,按照我之前说的那条协议就行了。
回复

使用道具 举报

8

主题

182

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-3-8
在线时间
114 小时
发表于 2019-1-29 10:40:17 | 显示全部楼层
1.三个通道的ADC采样,轮流来采,可以利用定时器,然后设定标志位,依次来执行采样;
2.你说的uart跟printf函数,他们的本质都是使用串口来进行发送,他们内部应该都是调用的同样的东西。你想问是单个发送还是一次发送多个,这个你看你上位机的处理方式;
3.协议只是你与上位机之间协定的数据的传输格式,例如规定数据包里枕头是 55 AA 则表示是指令,AA 55则表示是响应,只是一种认为的规定。
回复

使用道具 举报

11

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
493
金钱
493
注册时间
2015-3-3
在线时间
114 小时
发表于 2019-2-1 10:23:50 | 显示全部楼层
也不一定需要定协议,主要看上位机接收是怎么处理的
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 23:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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