【開源串口屏方案】五步教你設(shè)計串口屏,30分鐘快速上手

前言
本文詳細(xì)介紹串口屏原理、設(shè)計方法、實現(xiàn)步驟,給出完整代碼實例,30分鐘即可完成串口屏的設(shè)計使用。適合初學(xué)者快速上手。
一、什么串口屏?
串口屏是一種能夠通過串行接口接收指令,并進(jìn)行顯示控制的液晶顯示屏。它的主要優(yōu)點是操作簡單,接口統(tǒng)一,用GUI軟件進(jìn)行界面的快速編寫與設(shè)計。

二、串口屏原理與組成
串口屏的組成部分:
1.顯示屏:這是串口屏的核心部分,可以選擇液晶顯示屏或其他類型的顯示屏.
2.微控制器:這是控制顯示屏的關(guān)鍵部分。它可以接收和發(fā)送數(shù)據(jù),控制顯示屏的顯示內(nèi)
容。
3.串口通信接口: 這是微控制器和顯示屏之間的通信接口。通常使用UART (通用異步收
發(fā)器) 接口。
4.電源:為顯示屏和微控制器提供電源
5.嵌入式GUI軟件: 采用高通GT-HMI,可以作為上位機(jī)Designer和下位機(jī)Engine的開源設(shè)計工具,幫助用戶設(shè)計和實現(xiàn)自己的界面。
三、硬件制作
在高通GT-HMI官網(wǎng)上獲取串口屏原理圖,可參考制作自己的串口屏硬件。
四、實現(xiàn)方法
以GT-HMI顯示模塊為例,這是一個做好的串口屏板子,包含開源的軟硬件。只需幾個步驟就可以實現(xiàn)串口屏的控制。您將需要以下準(zhǔn)備:
1. 硬件設(shè)備:
GT-HMI顯示模塊、一根USB轉(zhuǎn)UART轉(zhuǎn)接線、一臺電腦,筆記本和臺式機(jī)均可。? ?首先將USB轉(zhuǎn)UART轉(zhuǎn)接線連接到我們的GT-HMI顯示模塊上,然后將USB轉(zhuǎn)UART轉(zhuǎn)接線與您的電腦連接。
2. 環(huán)境依賴:
軟件環(huán)境:KEIL5, 串口調(diào)試助手。硬件環(huán)境:USB轉(zhuǎn)UART轉(zhuǎn)接線,GTC-480272TFT43XP.
3. 界面設(shè)計:
在高通GT-HMI Designer設(shè)計界面,可以參考GT-HMI視頻教程及文檔資料。
4. 編寫串口通信代碼,示例如下:
1、串口uart3初始化:
void bsp_uart3_init(void)
{
UART_InitStructure UART_initStruct;
?PORT_Init(UART3_RX_PORT, UART3_RX_PIN, UART3_RX_SEL, 1); //GPIOM.0配置為UART0輸入引腳
PORT_Init(UART3_TX_PORT, UART3_TX_PIN, UART3_TX_SEL, 0); //GPIOM.1配置為UART0輸出引腳
?UART_initStruct.Baudrate = UART3_Baudrate;? //波特率
UART_initStruct.DataBits = UART_DATA_8BIT;? //8位數(shù)據(jù)位
?UART_initStruct.Parity = UART_PARITY_NONE;? //無校驗位
??UART_initStruct.StopBits = UART_STOP_1BIT;? //1個停止位
? ?UART_initStruct.RXThreshold = _UART3_RX_BUFFER_SIZE;//設(shè)置FIFO個數(shù)
UART_initStruct.RXThresholdIEn = 1;//使能接收中斷
UART_initStruct.TXThreshold = _UART3_Threshold_Size;//設(shè)置FIFO個數(shù)
UART_initStruct.TXThresholdIEn = 0;? ? ?//失能發(fā)送中斷
UART_initStruct.TimeoutTime = 10; //10個字符時間內(nèi)未接收到新的數(shù)據(jù)則觸發(fā)超時中斷
UART_initStruct.TimeoutIEn = 1;? ? ? ? ?//使能超時中斷
?UART_Init(UART3, &UART_initStruct);
UART3->TOCR &= ~(1 << UART_TOCR_MODE_Pos);??
UART_Open(UART3);//開啟uart3
}
2:串口數(shù)據(jù)通過中斷接收,接收數(shù)據(jù)的部分
void UART3_Handler(void)
{
? ? char count = _UART3_Threshold_Size;
? ? char i=0;
? ? uint32_t chr ;
? ? if(UART_INTStat(UART3, UART_IT_RX_THR))//接收中斷
? ? {
? ? ? ? UART_INTClr(UART3, UART_IT_RX_THR);//清除接收中斷標(biāo)志位
? ? ? ? while (count--)//FIFO個數(shù)接收數(shù)據(jù)
? ? ? ? {
if(UART_ReadByte(UART3, &chr) == 0)//接收數(shù)據(jù)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(_uart3_count < _UART3_RX_BUFFER_SIZE)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? _uart3_rx_buf[_uart3_count] = chr;
? ? ? ? ? ? ? ? ? ? //接收到的數(shù)據(jù)存在這個全局變量數(shù)組內(nèi)
? ? ? ? ? ? ? ? ? ? UART_BUF[_uart3_count] = chr;
? ? ? ? ? ? ? ? ? ? _uart3_count++;//數(shù)組下標(biāo)自增
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
}
接收數(shù)據(jù)并進(jìn)行相應(yīng)的數(shù)據(jù)顯示
/***********************
**數(shù)據(jù)包格式:頭(0xAA)+設(shè)備啟動狀態(tài)+間隔時間+重復(fù)次數(shù)+工作溫度+等待速度+包長度+校驗和
**設(shè)備啟動狀態(tài):0x0、0x1
**間隔時間:1~30
**重復(fù)次數(shù):1~10
**工作溫度:10~100
**等待速度:0~100
***********************/
void Refresh_New_Page(unsigned char *data)
{
unsigned char verify=0 ,i=0;
for ( i = 0; i < data[6]-1; i++)//計算接收到的數(shù)據(jù)校驗和。
{
verify += data[i];
}
if(data[0] == 0xaa && verify == data[7])//判斷幀頭(0xAA)和校驗和均是和接收數(shù)據(jù)符合。
{
if(data[1]==1)//設(shè)備啟動
{
gt_obj_set_state(switch1, 1);
}else if(data[1]==0)
{
gt_obj_set_state(switch1, 0);//設(shè)備關(guān)閉
}
gt_input_number_set_value(inputNum1, data[2]);//設(shè)置間隔時間
gt_input_number_set_value(inputNum2,data[3]);//設(shè)置重復(fù)次數(shù)
gt_input_number_set_value(inputNum3,data[4]);//設(shè)置重復(fù)次數(shù)
gt_slider_set_pos(slider1, data[5]);
gt_disp_load_scr(screen_home);
}
}
3. 下載程序,運行示例
int main(void)
{?
SystemInit();//mcu系統(tǒng)初始化
__enable_irq();//使能中斷
bsp_uart0_init();//uart0初始化
bsp_uart3_init();//uart3初始化
bsp_sfc_config(1);//存儲芯片讀取配置
bsp_lcd_rgb_init();//rgb接口屏顯配置
systick_init();//systick時鐘配置
TP_Init();//時鐘I2C初始化
TIMR_Init(TIMR4, TIMR_MODE_TIMER, CyclesPerUs, 1000, 1);//定時器初始化
TIMR_Start(TIMR4);//啟動定時器
GT_Font_Init();//字庫初始化
gt_init();
gt_ui_init();
while (1) {
gt_task_handler();//gt-hmi engine 任務(wù)調(diào)度
swm_delay_ms(1);
// WDT_Feed(WDT);
if(uart_status)//uart3串口數(shù)據(jù)接收完標(biāo)記
{
uart_status=0;
Refresh_New_Page(UART_BUF); //處理串口數(shù)據(jù)將串口數(shù)據(jù)顯示到對應(yīng)的屏上面。
memset(UART_BUF,0,8);
}
#if _RUNNING_PRINT
if (_cnt >= 1000) {
_cnt = 0;
GT_LOGI(GT_LOG_TAG_TEST, "tick: %d s", gt_tick_get() / 1000);
}
#endif
}
}

串口屏初始界面:

串口助手發(fā)送如下圖命令:

發(fā)送命令之后顯示的界面:

測試命令:AA 01 02 08 46 54 08 57
我們再次發(fā)送測試命令,可以看到其中重復(fù)次數(shù)和工作溫度都被改變了。

總結(jié)
您可以嘗試自己制作串口屏硬件,或者使用高通GT-HMI開發(fā)板/顯示模塊。我們提供了相應(yīng)的軟硬件資料供您參考。您需要注意的是,制作硬件需要一定的電子技術(shù)知識。
如果您是初學(xué)者,我們建議您先從使用高通的開發(fā)板開始。利用高通GT-HMI開發(fā)框架,您也可以快速實現(xiàn)串口屏的顯示控制。歡迎分享您的創(chuàng)作經(jīng)驗!