找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1441|回复: 4
打印 上一主题 下一主题
收起左侧

MCU SPI+DMA驱动LCD的16bit数据拼接

[复制链接]
跳转到指定楼层
楼主
ID:997026 发表于 2022-7-19 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在驱动一块TFT LCD,需要使用到SPI+DMA,并且需要同时使用SPI+DMA发送8bit和16bit数据。
初始化配置的是SPI+DMA的8bit发送,现在需要发送16bit,采用的是把两个8bit拼接的方法,这也是网上很多人用的
一种方法,大概是这么实现的:

先定义一个数组
uint8_t  sendBuff[2]; //数组中的元素是8bit,共两个元素,发送16bit数据的时候需要拼接这两个元素

void senddata16(uint16_t data16)
{
    sendBuff[0] = data16 >>8; //---------------1
    sendBuff[1] = data16; //--------------------2
   //DMA依次搬运以上1,2数据就可以实现16bit发送
   DMA_Cmd(Enable);
}

主要上面这两个1,2拼接方法不太理解,为什么这样拼接一下就可以实现发送16bit数据?

比如data16=0x4A33, 右移8位变成0x004A, 不还是16位吗?把0x004A赋给sendBuff[0], 因为这是8位数组,所以把16bit的0x004A赋值后,
高8位0x00被切断了?实际上只是把0x4A赋给了数组?

下面的sendBuff[1] = data16; 相当于sendBuff[1] = 0x4A33; 把16bit数据直接赋值给8位数组?所以sendBuff[1] 最终的值是什么?

这几个实在不太理解,希望得到专家的帮助,感谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:248705 发表于 2022-7-19 13:36 | 只看该作者
还是截断哇,sendbuff[1] = 0x33
回复

使用道具 举报

板凳
ID:68189 发表于 2022-7-19 13:53 | 只看该作者

比如data16=0x4A33
uint8_t  sendBuff[2]; //
sendBuff[0] = data16 >>8; //---------------1
sendBuff[1] = data16; //--------------------2
经过以上赋值以后:
sendBuff[0] 当前值为 0X4A
sendBuff[1] 当前值为 0X33
回复

使用道具 举报

地板
ID:997026 发表于 2022-7-19 14:32 | 只看该作者
发表于 2022-7-19 13:36
还是截断哇,sendbuff[1] = 0x33

明白了,谢谢
回复

使用道具 举报

5#
ID:130230 发表于 2022-7-20 11:42 | 只看该作者
你的sendbuff是u8类型的,只能保存u16的低8bit数据
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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