找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ESK32-360开发板的串行通讯及应用

[复制链接]
跳转到指定楼层
楼主
1. 串口通信电路
ESK32-360开发板上提供了串行通讯功能,其接口如图1所示。


1  RS232接口



2  DB9的引脚连接

2.基本应用
有了串行通讯后,我们用它可以做什么呢?
我们还是将它与LCD屏显示结合起来,最简单的就是发送数据在LCD屏上进行绘制,如动态地指定一个宽度,然后进行指定色彩的填充,见图3和图4所示。


3.通讯传输显示图片
有了前面简单的测试,我们就可以大胆地期待着通过传输数据来显示图片了,因为前面用数组来显示大的图片时会导致下载崩溃。
首先以小图片来测试,成功通过!其效果如图5所示。


5 以传送数据来显示图片


传送数据的界面如图6所示,其中“00 38”是图片宽度,即56个像素,而“00 44”是图片的高度,即68个像素。别小看这个图片,它可是占用了7616个字节呀!


6 传送图片数据


那么把胆子再放大些呢?能传送153600个字节吗?它可是满屏图片的规格,153600=240*320*2

( 320=0140H 240=F0H 153600=240*320*2  )

首先用Image2Lcd软件将一幅240*320像素点的图片转换为二进制数据文件BIN,其格式设置如图7所示,然后进行串口传送,则效果如图8所示,一样的成功!

当然在执行时有些吓人,首先是读入文件时串口调试器有点懵,像是被打晕,好一会没找到北;好容易在发送窗口有了数据,这次该轮到发送器晕了,也是一段时间没响应,近乎是要崩溃!还在还算顽强,终于挺过来了,屏幕上一丝丝彩线在游走,终于是一个圆满!

7 准备数据文件


8 图片显示


为防止偶然,又传第2幅、第3 ... ... 完全抗击打!


9 演示效果


最后请出我们的主角,功能程序:
  1. int main(void)
  2. {
  3.   u32 err = 0, result;
  4.   u16 uData,a,b;
  5.   u32 xid = 0;
  6.   u32 ImgAdds = 0;
  7.   u32 yid = 0;
  8.   u32 i = 0, j = 0, color = 0;
  9.   u8  X_Location=0, Height;
  10.   u16 Y_Location=0, Width;
  11.   /* Initialize LEDs      */
  12.   HT32F_DVB_LEDInit(HT_LED1);
  13.   HT32F_DVB_LEDInit(HT_LED2);
  14.   HT32F_DVB_LEDInit(HT_LED3);
  15.   LCD_Init();
  16.   LCD_Config();
  17.   LCD_BackColorSet(Black);
  18.   LCD_TextColorSet(Yellow);
  19.   LCD_StringLineDisplay(Line3, "       Holtek       ");
  20.   LCD_StringLineDisplay(Line4, "     HT32 Series    ");
  21.   LCD_StringLineDisplay(Line5, "     LCD Example    ");
  22.         
  23.   UxART_Configuration();
  24.   UxART_TxTest();
  25.         
  26.   for (i = 0; i < 4; i++)
  27.   {
  28.          while (USART_GetFlagStatus(HTCFG_UART_PORT, USART_FLAG_RXDR) == RESET);
  29.          uData = USART_ReceiveData(HTCFG_UART_PORT);
  30.          Tx_Buffer[i]=(u8)uData;
  31.          UxART_TxSend(uData);
  32.   }
  33.         
  34.          a=Tx_Buffer[0];
  35.          b=Tx_Buffer[1];
  36.          Width=a << 8 | b;
  37.          a=Tx_Buffer[2];
  38.          b=Tx_Buffer[3];
  39.          Height=a << 8 | b;
  40.         
  41.          xid = X_Location;
  42.          yid = Y_Location;
  43.         
  44.          LCD_StarterSet(xid, yid);
  45.          for (i = 0; i < Height; i++)
  46.         {
  47.            LCD_WriteRAMPrior();
  48.            for (j = 0; j < Width; j++)
  49.           {
  50.              while(USART_GetFlagStatus(HTCFG_UART_PORT, USART_FLAG_RXDR) == RESET);
  51.              a = USART_ReceiveData(HTCFG_UART_PORT);
  52.                            
  53.            while(USART_GetFlagStatus(HTCFG_UART_PORT, USART_FLAG_RXDR) == RESET);
  54.            b = USART_ReceiveData(HTCFG_UART_PORT);
  55.            color = a << 8 | b;
  56.                            
  57.           LCD_WriteRAM(color);
  58.        }
  59.        xid++;
  60.        LCD_StarterSet(xid, yid);
  61.   }
  62.   while (1);
  63. }
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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