野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11707|回复: 10

串口发送数据如何保存完整

[复制链接]
发表于 2015-9-22 20:22:23 | 显示全部楼层 |阅读模式
大圣们,我在做一个数据采集实验,打算把采集到的数据全部保存到电脑上,方便进行数据的分析和处理,我该用什么方法呢?鬼泣啦!没有思路了,帮帮忙!
回复

使用道具 举报

发表于 2015-9-22 21:01:02 | 显示全部楼层
我也想直接发0-255的8位二进制数,直接用串口发送语句
USART_SendData(USART1, (uint8_t) m);
   while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
则无论用野火附带串口软件还是自己的软件,上位机什么也收不到,
用printf发送则数据被拆散了
回复 支持 反对

使用道具 举报

发表于 2015-9-23 08:35:51 | 显示全部楼层
使用for循环,循环发送存储数据的变量即可
                /* 发送一个字节数据到USART1 */
                USART_SendData(macUSARTx, (uint8_t) ch);
               
                /* 等待发送完毕 */
                while (USART_GetFlagStatus(macUSARTx, USART_FLAG_TXE) == RESET);               
回复 支持 反对

使用道具 举报

发表于 2015-9-23 08:38:08 | 显示全部楼层
简单一点的话自己用串口传,然后再处理
也可以在stm32上加载fatfs文件系统模块把数据保存成文本文件到SD卡之中
回复 支持 反对

使用道具 举报

发表于 2015-9-23 08:43:04 | 显示全部楼层
11kxmx 发表于 2015-9-22 21:01
我也想直接发0-255的8位二进制数,直接用串口发送语句
USART_SendData(USART1, (uint8_t) m);
   while ...

直接发二进制数的话pc端只认为是ascll(可以对照ascll表)
你要发字符对应的ascll码才会显示正常
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-23 16:53:27 | 显示全部楼层
我用过串口传输到串口多功能助手,也可以保存数据,但是问题是保存的数据会有大小限制,就是只能保存一定字节的数据,超过一定限制就会更新当前记录的数据,怎么办呢?我想把AD转换的数据完整的保存下来,大圣们解围!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-23 16:56:20 | 显示全部楼层
“”也可以在stm32上加载fatfs文件系统模块把数据保存成文本文件到SD卡之中“”  ,这位大神,我没用过这个方法,我该怎么学呢?需要看MINI哪几个例程呢??
回复 支持 反对

使用道具 举报

发表于 2015-9-23 21:26:20 | 显示全部楼层
flyleaf 发表于 2015-9-23 08:35
使用for循环,循环发送存储数据的变量即可
                /* 发送一个字节数据到USART1 */
                USART_SendData(macUSART ...

还是不明白呀,macUSARTx或macUSART1是什么意思?该函数在那里定义的,添加后直接画红线并打叉了。
回复 支持 反对

使用道具 举报

发表于 2015-9-24 20:45:56 | 显示全部楼层
GUANG 发表于 2015-9-23 16:56
“”也可以在stm32上加载fatfs文件系统模块把数据保存成文本文件到SD卡之中“”  ,这位大神,我没用过这个 ...

我已经能编一个自动采集系统了,采集周期和数据量可以用触摸屏设定,采集完成后存入板上FLASH中,并可再次在液晶屏上回显,但最后是发往上位机这一步卡住了,我就想把12位的AD数据分成2个字节发出去,因我的上位机程序对这种数据处理已有比较好的办法了,在51單片機上已成功,但換成STM32不成功,用printf函数发的話数据量大多了,并且存在不等长问题,造成接收方處理困難
回复 支持 反对

使用道具 举报

发表于 2015-9-24 21:19:26 | 显示全部楼层
本帖最后由 11kxmx 于 2015-9-25 07:50 编辑
11kxmx 发表于 2015-9-22 21:01
我也想直接发0-255的8位二进制数,直接用串口发送语句
USART_SendData(USART1, (uint8_t) m);
   while ...


又试了一次,原来这是一个16 位发送函数
这次发16 位二进数0x2050,用野火串口助手收到 P2050
16进制接收的话收到的是 50 32 30 35 30      其中  50是否是”P“ 的ASCI码
后面明显是“2” “ 0” “5” ”0“的ASCI码
有谁知道:P 是什么意思?是接收软件自动生成的呢,还是发送方发的时候就添加了某种格式
另外这16位是否是分2个字节发出的呢?还是分更多字节发出,我们在接收端设置的可是8位接收呀.
回复 支持 反对

使用道具 举报

发表于 2015-10-20 14:54:58 | 显示全部楼层
我也不会,啊啊啊啊啊啊啊啊
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-2 09:42 , Processed in 0.106175 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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