资讯专栏INFORMATION COLUMN

实战技能分享,各种数据类型的SPI, UART, I2C,FDCAN等方式的通信传输以及存储到EEP

cgspine / 442人阅读

摘要:编程手册和编程手册和编程手册各种数据类型编程,等存储器的简易方法一般这些存储器都是字节编程,写入浮点等数据类型时不太方便。

目录

背景知识

F1编程手册:

F3和F4编程手册:

F7和H7编程手册:

各种数据类型编程EEPROM,SPI Flash等存储器的简易方法

各种数据类型的SPI,UART,I2C,FDCAN等传输问题

实战案例:

补充拓展贴,特别是结构体对齐问题:


背景知识

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

 

首先要简单说下芯片的大小端问题,我们这里主要讨论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等传输问题


这里我们以串口通信为例,比如主机要发送如下格式数据给从机:

 

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

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;

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

comSendBuf(COM1, (uint8_t *)&g_tUartParam, sizeof(UART_T));

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

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

UART_T *pUartParam;pUartParam = (UART_T *)buf;

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


实战案例:


大家可以下载我们论坛置顶帖V5,V6或者V7板子出厂程序,里面都有相关代码参考。

 

补充拓展贴,特别是结构体对齐问题:


1、【烧脑技术贴】无法回避的字节对齐问题,从八个方向深入探讨(变量对齐,栈对齐,DMA对齐,结构体成对齐,Cache, RTOS双堆栈等):地址链接

2、推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,IO访问更便捷,无需用户计算位置:地址链接

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124460.html

相关文章

  • STM32学习笔记 第二章 STM32资源介绍

    摘要:总线挂载的外设有等。外设地址映射片上外设区分为三条总线,根据外设速度的不同,不同总线挂载着不同的外设,挂载低速外设,和挂载高速外设。 第二章 STM32资源介绍 2...

    G9YH 评论0 收藏0
  • SPI、PCI、IIC、UART、GPIO、AXI4协议总结大全

    摘要:从设备使能信号,由主设备控制,只有该信号为预先规定的使能信号,对该芯片的操作才有效,这就允许再统一总线上连接多个设备。点对点通信中,接口不需要进行寻址操作,但是没有指定的流控制,没有应答机制确认是否接收到数据。 1、GPIO 通用可编程IO接口,对于简单的外围设备或者电路,需要CPU为之提供...

    zhangrxiang 评论0 收藏0
  • stm32 高效串口收发

    摘要:接收缓冲区和发送缓冲区的请求是独立的。此时串口实际上还有个字节并未发送完成,数据寄存器和移位寄存器中的个字节还需要发送,并不能关闭串口发送。 文章目录 串口通讯串...

    darkerXi 评论0 收藏0
  • DMA控制器原理详解

    摘要:目录工作原理硬件架构硬件架构通道的作用寄存器出现的目的出现的目的工作原理全拼直接内存存取,在传统的存取数据时会先将数据放到缓存寄存器中然后在写入到指定位置存取数据流程图经历了三个步骤,先将内存中指定位置 目录 工作原理 DMA硬件架构 DMA通道的作用 DMA寄存器 DMA出现的目的 工作原...

    moven_j 评论0 收藏0
  • ESP32-S2上使用SPI接口芯片DM9051NP转以太网无线物联网网关开发指导

    摘要:前言芯片接口占用管脚数量比以太网的少,版线布局可更精简。网卡芯片介绍接口网卡芯片是为方物联网行业进以太网通信而开发出的解决方案。此应用可用于监控家庭物联网网关搭建等。 前言     DM9051NP芯片 SPI接口占用管脚数量比以太网PHY的RMII/MII少,PCBA版线布局可更精简。...

    wangjuntytl 评论0 收藏0

发表评论

0条评论

cgspine

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<