STM32单片机数据在内存中的存储方式以及什么是大小端格式

STM32单片机数据在内存中的存储方式

       设一个数为 uint16_t a = 0x1234 ,它在单片机内存中的存放地址为 0x20000002,测0x20000002中存放0x34(低位),在

0x20000003中存放0x12(高位数)。基地址存放低位数据的这种方式叫做小端模式,可以理解为一个数据的最小位在前面。与之相反的把高位放在前面(基地址)的格式叫大端模式。一般的windows,linux,高大上的嵌入式CPU大多是大端模式。

       那么小端模式的STM32单片机与大端模式的设备进行数据通讯时,就需要进行相应该的数据转换工作,下面以uint16 类型为例进行说明。直接上程序:

/* *************************************************************
 * 测试程序 

 * 数据存取实验--16位小端储存格式数据转换成大端格式数据
 *
 *
 ***************************************************************/

static uint16_t Ui16ToUin8_P(uint16_t adata,uint16_t bdata)
{
     uint16 m ;
     
        m = adata;     

    bdata = adata >>8 & 0x0F; // 把高8位数据移到低位,并清除原高位
       m  = adata <<8 & 0x0F; // 把低8位数据移到高位,并精除原低位

    bdata = bdata | m ;       // 高低位合并成一个数据,交换完成

    return bdata;
}

       以上是小端转大端程序。实际应该中STM32 的HAL库的UART、USB CDC串口、I2C 发送函数都是8位指针,用这些函数是不能直接发送不同类型数据的,需要进行类型转换工作。

       请看另一篇博文:把uint16_t 十六位类型数据转化成uint8_t 八位数据类型数据的两种方法

以uint16_t十六位数转接成 uint8_t 八位数的思路是,把十六位数的高低位进行拆分,并强制转换后保存在两个连续的指针或数组中。

(本文的目的是方便初学者,欢迎探讨。)

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值