意法半導(dǎo)體向STM32客戶免費(fèi)提供STemWin軟件。該軟件內(nèi)置SEGGER VNC虛擬網(wǎng)絡(luò)計(jì)算系統(tǒng),可運(yùn)用互聯(lián)網(wǎng)協(xié)議遠(yuǎn)程查看用戶界面。該軟件還為開發(fā)人員提供其它強(qiáng)大的功能,其中包括窗口管理器和小工具包、觸摸屏/鼠標(biāo)支持,存儲(chǔ)器上下文可實(shí)現(xiàn)無閃屏刷新。
目前StemWin并不提供源碼,記得好像只有2.9以前的GUI才有源碼,這里STemWin是以庫(kù)的形式提供的。

可以看出,這個(gè)庫(kù)是針對(duì)M7而制作的,所以這里要使用StemWin的話,只要配置GUIConf.c與LCDConf.c兩個(gè)文件就可以了。

GUIConf.c主要是配置顯示緩存的大小 。
LCDConf.c主要是配置與LCD相關(guān)的參數(shù)與函數(shù)。
LCD-TFT(液晶顯示器——薄膜晶體管)顯示器控制器提供并行數(shù)字 RGB (紅色、綠色、藍(lán)色)以及水平同步、垂直同步、像素時(shí)鐘和數(shù)據(jù)使能信號(hào),這些信號(hào)直接輸出到不同 LCD和 TFT面板的接口。
層混合:
LTDC編程步驟:
1、在 RCC寄存器中使能 LTDC 時(shí)鐘。
2、按照面板數(shù)據(jù)表配置所需像素時(shí)鐘。
3、配置同步時(shí)序:VSYNC、HSYNC、垂直和水平后沿、有效數(shù)據(jù)區(qū)域以及前沿時(shí)序。
4、配置 LTDC_GCR 寄存器中的同步信號(hào)和時(shí)鐘極性。
5、必要時(shí),配置 LTDC_BCCR寄存器中的背景色。
6、配置 LTDC_IER和LTDC_LIPCR 寄存器中的所需中斷。
7、通過執(zhí)行以下編程操作配置第 1/2層的參數(shù):
1)、編程LTDC_LxWHPCR和LTDC_WVPCR 寄存器中的層窗口的水平和垂直位置。層窗口必須位于有效數(shù)據(jù)區(qū)域
2)、編程LTDC_LxPFCR 寄存器中的像素輸入格式
3)、 編程LTDC_LxCFBAR寄存器中的顏色幀起始地址
4)、 編程LTDC_LxCFBLR寄存器中的顏色幀緩沖區(qū)的行長(zhǎng)和間距
5)、 編程LTDC_LxCFBLNR寄存器中的顏色幀緩沖區(qū)的行數(shù)
6)、 必要時(shí),在LTDC_LxCLUTWR寄存器中為 CLUT 加載 RGB值及其地址
7)、 必要時(shí),分別在LTDC_LxDCCR和LTDC_LxBFCR寄存器中配置默認(rèn)顏色和混合系數(shù)
8、使能 LTDC_LxCR寄存器中的第 1/2層,必要時(shí)使能 CLUT 。
9、必要時(shí),可分別在LTDC_GCR和 LTDC_LxCKCR寄存器中使能抖動(dòng)和色鍵。也可以實(shí)時(shí)使能這兩個(gè)功能。
10、通過 LTDC_SRCR 寄存器將影子寄存器重載到活動(dòng)寄存器中。
11、使能 LTDC_GCR 寄存器中的 LCD-TFT控制器。
12、除 CLUT外,所有層參數(shù)均可實(shí)時(shí)修改。新配置必須通過配置LTDC_SRCR 寄存器立即重載或在垂直消隱周期內(nèi)重載。
如下,LTDC的初始化函數(shù)。對(duì)板子上的LCD進(jìn)行初始化。
static void LCD_LL_LayerInit(U32 LayerIndex)
{
LTDC_LayerCfgTypeDef layer_cfg;
if (LayerIndex < GUI_NUM_LAYERS)
{
/* Layer configuration */
layer_cfg.WindowX0 = 0;
layer_cfg.WindowX1 = XSIZE_PHYS;
layer_cfg.WindowY0 = 0;
layer_cfg.WindowY1 = YSIZE_PHYS;
layer_cfg.PixelFormat = LCD_LL_GetPixelformat(LayerIndex);
layer_cfg.FBStartAdress = ((uint32_t)0xC0000000);
layer_cfg.Alpha = 255;
layer_cfg.Alpha0 = 0;
layer_cfg.Backcolor.Blue = 0;
layer_cfg.Backcolor.Green = 0;
layer_cfg.Backcolor.Red = 0;
layer_cfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
layer_cfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
layer_cfg.ImageWidth = XSIZE_PHYS;
layer_cfg.ImageHeight = YSIZE_PHYS;
HAL_LTDC_ConfigLayer(&hltdc, &layer_cfg, LayerIndex);
/* Enable LUT on demand */
if (LCD_GetBitsPerPixelEx(LayerIndex) <= 8)
{
/* Enable usage of LUT for all modes with <= 8bpp*/
HAL_LTDC_EnableCLUT(&hltdc, LayerIndex);
}
}
}
復(fù)制代碼
static void LCD_LL_Init(void)
{
/* DeInit */
HAL_LTDC_DeInit(&hltdc);
/* Set LCD Timings */
hltdc.Init.HorizontalSync = 40;
hltdc.Init.VerticalSync = 9;
hltdc.Init.AccumulatedHBP = 53;
hltdc.Init.AccumulatedVBP = 11;
hltdc.Init.AccumulatedActiveH = 283;
hltdc.Init.AccumulatedActiveW = 533;
hltdc.Init.TotalHeigh = 285;
hltdc.Init.TotalWidth = 565;
/* background value */
hltdc.Init.Backcolor.Blue = 0;
hltdc.Init.Backcolor.Green = 0;
hltdc.Init.Backcolor.Red = 0;
/* Polarity */
hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
hltdc.Instance = LTDC;
HAL_LTDC_Init(&hltdc);
HAL_LTDC_ProgramLineEvent(&hltdc, 0);
/* Enable dithering */
HAL_LTDC_EnableDither(&hltdc);
/* Configure the DMA2D default mode */
hdma2d.Init.Mode = DMA2D_R2M;
hdma2d.Init.ColorMode = DMA2D_RGB565;
hdma2d.Init.OutputOffset = 0x0;
hdma2d.Instance = DMA2D;
if(HAL_DMA2D_Init(&hdma2d) != HAL_OK)
{
while (1);
}
/* Assert display enable LCD_DISP pin */
HAL_GPIO_WritePin(GPIOI, GPIO_PIN_12, GPIO_PIN_SET);
/* Assert backlight LCD_BL_CTRL pin */
HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_SET);
}
在使用GUI之前,要GUI_Init();函數(shù),對(duì)ST emWin 的庫(kù)進(jìn)行初始化,并使用WM_SetCreateFlags(WM_CF_MEMDEV);激活存儲(chǔ)設(shè)備。
完成上述的工作,就可以在工程中調(diào)用ST emWin的API函數(shù)了。
如,在LCD上顯示Hello World。
清屏,清除LCD為黑色的背景色。
GUI_Clear();
設(shè)置GUI的字體為GUI_Font20_1。
GUI_SetFont(&GUI_Font20_1);
這里有很多的字體可以使用的。
使用GUI_DispStringAt函數(shù)顯示字符串。
這個(gè)函數(shù)的第一個(gè)參數(shù)是要顯示的字符串,后兩個(gè)參數(shù)是要顯示字符串的位置。
GUI_DispStringAt("Hello world!", (LCD_GetXSize()-100)/2, (LCD_GetYSize()-20)/2);
程序運(yùn)行結(jié)果:
相關(guān)推薦:
STM32單片機(jī)官方開發(fā)工具一覽
STM32評(píng)估開發(fā)板列表
ARM Cortex-M內(nèi)核STM32單片機(jī)產(chǎn)品全覽
STM32微控制器參考設(shè)計(jì)
STM32/STM8
意法半導(dǎo)體/ST/STM
電子發(fā)燒友App










評(píng)論