STM32串口读写迪文屏8位、16位、32位数据(应用层实现)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32串口读写迪文屏8位、16位、32位数据(应用层实

现)

文章目录

•前言

•一、串口需要的相关实现

o

▪数据类型

▪需要自定义实现的变量和函数

•二、迪文屏读写

o 2.1 向迪文屏写数据

o 2.2 从迪文屏读取数据

前言

基于STM32F407实现与迪文串口屏T5L系列的串口通信,实现8位,16位,32位的数据读写。

PS:不包含完整程序,这里只说一下核心的代码。

一、串口需要的相关实现

数据类型

#define u8 unsigned char

#define u16 unsigned short

#define u32 unsigned int

//32位int与8位char互转

typedef union

{

u32 intdata;

u8 chardata[4];

}int_char_unioin;

//16位short与8位char互转

typedef union

{

u16 shortdata;

u8 chardata[2];

}short_char_unioin;

需要自定义实现的变量和函数

1.buffer——串口收发缓冲区数组。

2.send_buffer()——向串口发送buffer数组。

3.delay_time——等待迪文屏返回数据的时间,例:5ms,迪文屏上OS的周期是20ms,读写过快可能出问题。(可能有更好的方法,一般情况下几ms还是可以容忍的。)

4.clear_usart()——清空串口缓冲区数组buffer,如用memset()将数组置零即可。

二、迪文屏读写

STM32与迪文屏的通信核心在于向迪文屏中定义的变量进行读写,迪文屏中的变量用一个16位数据表示其地址。迪文屏的用户可操作地址空间为0x1000-0xFFFF,我们要做的就是在这个区间内的一个地址上读写数据,这个地址指向的数据类型由DGUS II(迪文屏开发上位机软件)设置,详细内容可以查看迪文公司的应用开发指南。

2.1 向迪文屏写数据

向迪文屏上的16位地址写8位,16位,32位数据。

/************************************************************** **********************

* @name:write_to_dwin

* @brief:串口4向迪文屏写数据

* @param: addr_h 变量地址高字节

addr_l 变量地址低字节

value_h 变量值高字节

value_l 变量值低字节

* @retval:

*************************************************************** *********************/

void write_to_dwin(u8 addr_h, u8 addr_l, u8 value_h, u8 value_l)

{

u8 write_cmd[8] = {0x5A, 0xA5, 0x05, 0x82, addr_h, addr_l, value_h, value_l};

send_buffer(write_cmd, sizeof(write_cmd));

}

void writeu8_to_dwin(u16 addr, u8 data)

{

short_char_unioin m;

m.shortdata = addr;

write_to_dwin(m.chardata[1], m.chardata[0], 0x00, data);

}

void writeu16_to_dwin(u16 addr, u16 data)

{

short_char_unioin m;

m.shortdata = addr;

short_char_unioin n;

n.shortdata = data;

write_to_dwin(m.chardata[1], m.chardata[0], n.chardata[1], n.chardata[0]);

}

void writeu32_to_dwin(u16 addr, u32 data)

{

short_char_unioin m;

m.shortdata = addr;

int_char_unioin n;

n.intdata = data;

u8 write_cmd[10] = {0x5A, 0xA5, 0x07, 0x82, m.chardata[1], m.chardata[0], n.chardata[3], n.chardata[2], n.chardata[1], n.chardata[0]};

send_buffer(write_cmd, sizeof(write_cmd));

}

2.2 从迪文屏读取数据

从迪文屏上的16位地址上读取8位,16位,32位数据。

/************************************************************** **********************

* @name:read_from_dwin

* @brief:串口4从迪文屏读数据

* @param: addr_h 变量地址高字节

addr_l 变量地址低字节

size 数据大小(单位:字/两字节/16位)

* @retval:

***************************************************************

相关文档
最新文档