没有合适的资源?快使用搜索试试~ 我知道了~
写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 一、涉及到的知识点 C语言结构体大小及对齐问题 字节序(Endianness):大端和小端 二、应用 结构体是一种数据的归类方式,相比数组或变量更具有整体全面性,例如一个数组只可以放一些按照元素顺序存放的单元变量,即 buffer = {x, x, x, x, x…},i 有多大,数组内元素就有多少。那么我们这时候如果我们用这个数组来接收串口接收信息,信息的格式是: 数据头 ->数据长度 ->数据区 ->数据校验 ->数据尾 假设数据
资源推荐
资源详情
资源评论
利用串口传输结构体数据利用串口传输结构体数据
写在前面:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手
册,如若侵权请告知,马上删帖致歉。
一、涉及到的知识点一、涉及到的知识点
C语言结构体大小及对齐问题
字节序(Endianness):大端和小端
二、应用二、应用
结构体是一种数据的归类方式,相比数组或变量更具有整体全面性,例如一个数组只可以放一些按照元素顺序存放的单元变
量,即 buffer = {x, x, x, x, x…},i 有多大,数组内元素就有多少。那么我们这时候如果我们用这个数组来接收串口接收信息,
信息的格式是: 数据头 ->数据长度 ->数据区 ->数据校验 ->数据尾
假设数据区为
那么我们用数组接收时,提取数据的时候就需要计算出数据格式中每个单元所对应的位置,即数组中第 i 个元素对应的内容;
这样显然是很麻烦的,效率低下,这就相当于先织了一个大网,捕捉到一网鱼,还得过下称,才能按照重量分类开来一样
若是使用结构体来作数据传输,那么只需要彼此约定俗成,注意一下事项就可以了
按照上面的,我们先来构建一下这个结构体
typedef struct
{
uint8_t head; // 数据头
uint16_t datalen; // 数据长度
uint8_t name[10]; // 姓名
uint8_t height; // 身高
uint8_t weight; // 体重
uint32_t sex; // 性别
uint8_t age; // 年龄
uint8_t checksum; // 校验和
uint8_t endmark; // 结束
} Profile_TypeDef;
1、发送
void Send_function(void)
{
Profile_TypeDef test;
test.head = 0x5A;
...
...
test.endmark = 0xFF;
USART_SendString((uint8_t *)&test, sizeof(test));
}
因为串口数据发送是以 Byte为单位,我们需要把结构体强制转换一下
2、接收
void Recv_function( uint8_t *Buf )
{
Profile_TypeDef *receive = NULL;
receive = (Profile_TypeDef *)Buf;
receive->head = XXXX;
receive->datalen = YYYY;
...
...
}
你以为这样就结束了吗?错的,你还要注意一些东西
三、注意事项三、注意事项
资源评论
weixin_38707217
- 粉丝: 3
- 资源: 903
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功