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 演示效果
最后请出我们的主角,功能程序: - int main(void)
- {
- u32 err = 0, result;
- u16 uData,a,b;
- u32 xid = 0;
- u32 ImgAdds = 0;
- u32 yid = 0;
- u32 i = 0, j = 0, color = 0;
- u8 X_Location=0, Height;
- u16 Y_Location=0, Width;
- /* Initialize LEDs */
- HT32F_DVB_LEDInit(HT_LED1);
- HT32F_DVB_LEDInit(HT_LED2);
- HT32F_DVB_LEDInit(HT_LED3);
- LCD_Init();
- LCD_Config();
- LCD_BackColorSet(Black);
- LCD_TextColorSet(Yellow);
- LCD_StringLineDisplay(Line3, " Holtek ");
- LCD_StringLineDisplay(Line4, " HT32 Series ");
- LCD_StringLineDisplay(Line5, " LCD Example ");
-
- UxART_Configuration();
- UxART_TxTest();
-
- for (i = 0; i < 4; i++)
- {
- while (USART_GetFlagStatus(HTCFG_UART_PORT, USART_FLAG_RXDR) == RESET);
- uData = USART_ReceiveData(HTCFG_UART_PORT);
- Tx_Buffer[i]=(u8)uData;
- UxART_TxSend(uData);
- }
-
- a=Tx_Buffer[0];
- b=Tx_Buffer[1];
- Width=a << 8 | b;
- a=Tx_Buffer[2];
- b=Tx_Buffer[3];
- Height=a << 8 | b;
-
- xid = X_Location;
- yid = Y_Location;
-
- LCD_StarterSet(xid, yid);
- for (i = 0; i < Height; i++)
- {
- LCD_WriteRAMPrior();
- for (j = 0; j < Width; j++)
- {
- while(USART_GetFlagStatus(HTCFG_UART_PORT, USART_FLAG_RXDR) == RESET);
- a = USART_ReceiveData(HTCFG_UART_PORT);
-
- while(USART_GetFlagStatus(HTCFG_UART_PORT, USART_FLAG_RXDR) == RESET);
- b = USART_ReceiveData(HTCFG_UART_PORT);
- color = a << 8 | b;
-
- LCD_WriteRAM(color);
- }
- xid++;
- LCD_StarterSet(xid, yid);
- }
- while (1);
- }
复制代码 |