前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战技能分享,各种数据类型的SPI, UART, I2C,FDCAN等方式的通信传输以及存储到EEPROM, Flash等设备的简易实现方法

实战技能分享,各种数据类型的SPI, UART, I2C,FDCAN等方式的通信传输以及存储到EEPROM, Flash等设备的简易实现方法

作者头像
Simon223
发布2021-11-24 09:54:21
6970
发布2021-11-24 09:54:21
举报

背景知识: 各种类型的数据传输和存储就涉及到大小端的问题,所以我们在开头把这个知识点做个说明。

首先要简单说下芯片的大小端问题,我们这里主要讨论Cortex-M内核。 权威指南的说明如下: Support for little endian and big endian memory systems e The Cortex-M3 and Cortex-M4 processors can work with either little endian or big endian memory systems. In practice, a microcontroller product is normally designed with just one endian configuration. M内核支持大端或者小端,实际应用中大部分内核都是小端。以STM32为例,全部都是小端,而且是芯片设计之初就固化进去的,不可修改。市面上其他厂家基本也都固化的小端格式。 F1编程手册:

F3和F4编程手册:

F7和H7编程手册:

各种数据类型编程EEPROM,SPI Flash等存储器的简易方法 一般这些存储器都是字节编程,写入浮点等数据类型时不太方便。 这里分享一个方法,定义一个结构体,将各种数据类型封装进去:

写入的时候采用下面方式:

读取时可以采用下面方式:

各种数据类型的SPI,UART,I2C,FDCAN等传输问题 这里我们以串口通信为例,比如主机要发送如下格式数据给从机:

我们可以做一个如下结构体格式:

代码语言:javascript
复制
typedef struct
{
    uint8_t ucStart;                        

    uint16_t usCO2;
    uint16_t usPM25;        
    uint16_t usHumidity;          
    float    Temprature;
    uint32_t ulParam;
    uint8_t  ucEnd1;           
    uint8_t  ucEnd2;   
}
UART_T;

UART_T g_tUartParam;

主机发送的时候我们就可以采用如下方法:

代码语言:javascript
复制
comSendBuf(COM1, (uint8_t *)&g_tUartParam, sizeof(UART_T));

从机工程也定义一个同样的结构体变量,比如我们把接收到一帧数据存到缓冲uint8_t buf[50]里面了。

我们就可以定义一个结构体指针变量:

代码语言:javascript
复制
UART_T *pUartParam;
pUartParam = (UART_T *)buf;

那么我们就可以pUartParam->usCO2, pUartParam->Temprature等方式来访问,非常方便。

实战案例: 大家可以下载我们论坛置顶帖V5,V6或者V7板子出厂程序,里面都有相关代码参考。 补充拓展贴,特别是结构体对齐问题: 1、【烧脑技术贴】无法回避的字节对齐问题,从八个方向深入探讨(变量对齐,栈对齐,DMA对齐,结构体成对齐,Cache, RTOS双堆栈等) http://www.armbbs.cn/forum.php?mod=viewthread&tid=109400 2、推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,IO访问更便捷,无需用户计算位置 http://www.armbbs.cn/forum.php?mod=viewthread&tid=109508

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档