OpenEdv-开源电子网

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

求指导:如何将(456,230,690,588)通过串口发送出去

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-4-13
在线时间
1 小时
发表于 2019-5-5 11:24:32 | 显示全部楼层 |阅读模式
1金钱
在串口直接发送之后,在串口助手上调是显示只接收一部分,如图所示。求指导! problem.jpg

最佳答案

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

已经解决,将数据分开发送,然后又合并了谢谢各位的指点哈
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-4-13
在线时间
1 小时
 楼主| 发表于 2019-5-5 11:24:33 | 显示全部楼层
已经解决,将数据分开发送,然后又合并了谢谢各位的指点哈
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2019-5-5 11:40:52 | 显示全部楼层
串口是字节发送,char以上类型要移位,不然高字节位会丢失
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-4-13
在线时间
1 小时
 楼主| 发表于 2019-5-5 11:53:30 | 显示全部楼层
xsx127 发表于 2019-5-5 11:40
串口是字节发送,char以上类型要移位,不然高字节位会丢失

大神,可否详细点说,每次发送都需要移位吗?该如何实现?我是菜鸟一个,现在遇见这个问题,发送256以下的数据都正常,只有当数据大于256的时候,就不行。
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14433
金钱
14433
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-5-5 13:00:10 | 显示全部楼层
直接每次将一个数组元素发出去不就行了吗 循环发送即可 从第一个数组元素开始发 后加一 直至全部发送完毕
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-5-5 13:01:23 | 显示全部楼层
本帖最后由 nashui_sx 于 2019-5-5 13:09 编辑
王某妞 发表于 2019-5-5 11:53
大神,可否详细点说,每次发送都需要移位吗?该如何实现?我是菜鸟一个,现在遇见这个问题,发送256以下 ...

1.省事方法:弄个u8数组         0                1               2                 3          ...                    
                                    数据1/256  数据1%256  数据2/256  数据2%256 ...依次填充到u8 数组
发送数组就好了
2.正确方法:
#pragma pack (1) //指定按1字节对齐
typedef struct _data_struct{
u16    data1;   
u16    data2;
u16    data3;   
//继续添加
}data_struct;
#pragma pack () //取消指定对齐,恢复缺省4字节对齐

#define  tx_data_num 3*2 // 3=data1 data2 data3个数   或者用sizeof(data_struct)
u8 tx_data[tx_data_num];
#define    tx_data_struct    ((data_struct *) tx_data)

tx_data_struct->data1=456;
tx_data_struct->data2=230;
tx_data_struct->data3=690;
发送时候直接发送tx_data

接收逆过程

有进步欲望用2 没有用1







回复

使用道具 举报

8

主题

206

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-4-6
在线时间
234 小时
发表于 2019-5-5 14:38:20 | 显示全部楼层
楼主,你不会是采用这种方式吧:
定义数组的时候,
uint16_t aUserBuf = {456,230,690,588,560,...};

然后发送的时候:
直接调用:
USART_SendData(RS232_USART,  aUserBuf[i]);
这种形式吧。。

回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2019-5-5 15:59:47 | 显示全部楼层
王某妞 发表于 2019-5-5 11:53
大神,可否详细点说,每次发送都需要移位吗?该如何实现?我是菜鸟一个,现在遇见这个问题,发送256以下 ...

原始数据:uint16_t aUserBuf = {456,230,690,588,560,...};
unsigned char * p = (unsigned char *)aUserBuf;
while(len--)
   USART_SendData(RS232_USART,  *p++);
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-4-13
在线时间
1 小时
 楼主| 发表于 2019-5-5 19:50:52 | 显示全部楼层
xiedonghui258 发表于 2019-5-5 14:38
楼主,你不会是采用这种方式吧:
定义数组的时候,
uint16_t aUserBuf = {456,230,690,588,560,...};

我就是直接这样调用的,就出现了只能接收到C8......
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 02:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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