OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8103|回复: 22

f4自带的lcd驱动接口函数和emwin接口函数好像不兼容啊,还是我糊涂了

[复制链接]

78

主题

271

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2013-10-20
在线时间
36 小时
发表于 2014-9-29 08:02:30 | 显示全部楼层 |阅读模式
5金钱
看到了f4自带的lcd的官方原理图,f4是内嵌的ili9341控制器,看了下初始化lcd 的过程  他是使用spi给ili9341传送指令和数据初始化lcd的,但是emwin是这样吗,emwin提供的几个接口函数式直接16位数据的形式操作ili9341的,这如何兼容。。。。不懂如何使用emwin的接口函数来操作9341了。。求大侠们明示。。

最佳答案

查看完整内容[请看2#楼]

什么方式驱动无所谓吧......... 你把屏幕的初始化函数放进emwin的lcd初始化里(在LCDConf.c中) 再把屏幕的画点函数写入emwin画点函数里(在GUIDRV_template.c中),可以的话再优化下template里面的函数就好了吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

78

主题

182

帖子

0

精华

高级会员

Rank: 4

积分
533
金钱
533
注册时间
2013-7-4
在线时间
11 小时
发表于 2014-9-29 08:02:31 | 显示全部楼层
什么方式驱动无所谓吧.........
你把屏幕的初始化函数放进emwin的lcd初始化里(在LCDConf.c中)
再把屏幕的画点函数写入emwin画点函数里(在GUIDRV_template.c中),可以的话再优化下template里面的函数就好了吧
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-29 11:17:22 | 显示全部楼层
印象中emwin文档中讲了如何通过SPI驱动屏幕的方法
回复

使用道具 举报

78

主题

271

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2013-10-20
在线时间
36 小时
 楼主| 发表于 2014-9-29 21:40:16 | 显示全部楼层
回复【3楼】jimmjimm:
---------------------------------
哦,这样就行哇?我是吧f4中的写数据和写寄存器函数内容放在了emwin的 writedata  和writereg函数中。但是f4中的初始化中看到writedata和writereg函数居然是spi的,但是驱动屏幕是565格式的,,这有点乱了,难道点亮屏初始化时候用的spi然后正常写像素点是用的并口吗
回复

使用道具 举报

78

主题

271

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2013-10-20
在线时间
36 小时
 楼主| 发表于 2014-9-29 21:41:50 | 显示全部楼层
回复【2楼】ricefat:
---------------------------------
f4的对lcd的初始化是用的spi方式,然后写像素点肯定不是spi的,所以不知道如何移植了。二楼的思路应该可以尝试的。谢谢一楼二楼。
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-30 09:39:34 | 显示全部楼层
回复【4楼】l692519765:
---------------------------------
565和是不是SPI无关,应该是SPI写了两个字节,只不过用函数将过程打包了。
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-30 09:42:06 | 显示全部楼层
回复【5楼】l692519765:
---------------------------------
新款已经没有GUIDRV_template.c,所有内容全部打包为lib了
回复

使用道具 举报

78

主题

182

帖子

0

精华

高级会员

Rank: 4

积分
533
金钱
533
注册时间
2013-7-4
在线时间
11 小时
发表于 2014-9-30 10:20:34 | 显示全部楼层
回复【7楼】ricefat:
---------------------------------
全部打包?那画点函数和初始化函数放哪儿去?
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-30 13:19:28 | 显示全部楼层
回复【8楼】jimmjimm:
---------------------------------
初始化函数可以自行编写,参考STemWin的官方例程。驱动部分你要查STemWin的手册,里面包括了很多驱动器的驱动,调用即可
回复

使用道具 举报

78

主题

182

帖子

0

精华

高级会员

Rank: 4

积分
533
金钱
533
注册时间
2013-7-4
在线时间
11 小时
发表于 2014-9-30 13:44:38 | 显示全部楼层
回复【9楼】ricefat:
---------------------------------
额,你的意思是emwin不在调用lcd初始化而是让开发人员自行调用了?
那....画点函数呢?
回复

使用道具 举报

78

主题

271

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2013-10-20
在线时间
36 小时
 楼主| 发表于 2014-9-30 16:32:55 | 显示全部楼层
回复【7楼】ricefat:
---------------------------------我用的是5.22的啊 是最新的 但是还是看到了这个文件。。里面有 writedata和writereg函数给用户自己填写的啊
回复

使用道具 举报

78

主题

271

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2013-10-20
在线时间
36 小时
 楼主| 发表于 2014-9-30 16:34:11 | 显示全部楼层
回复【6楼】ricefat:
---------------------------------
他是使用spi发送的初始化时序和命令,但是点亮屏幕的565数据肯定不是spi发送的啊  所以不懂来请教大家的。
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-30 18:45:03 | 显示全部楼层
回复【12楼】l692519765:
---------------------------------
你从哪里判断565不是SPI的呢?
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-30 18:50:57 | 显示全部楼层
回复【11楼】l692519765:
---------------------------------
额 我看的是5.20的在工程项目里面确实没发现你说的这个文件。虽然在ST的官方代码里面有屏幕画点函数和读点函数以及后面的画直线圆,但实际单步调试中发现该部分代码并没有被用上,用到的只有初始化部分和writereg和writedata,即FSMC
回复

使用道具 举报

78

主题

271

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2013-10-20
在线时间
36 小时
 楼主| 发表于 2014-9-30 19:19:30 | 显示全部楼层
回复【14楼】ricefat:
---------------------------------
关键我搞不懂。f4的ltdc是使用spi初始化的控制器 然后565格式的数据 是并口发出的。。。搞不懂了  要不先试试把f4例程的初始化代码放在emwin中吧  钠盐估计也点不亮的。。
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-30 19:22:26 | 显示全部楼层
回复【15楼】l692519765:
---------------------------------
是不是F429?有图纸下载吗
回复

使用道具 举报

78

主题

271

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2013-10-20
在线时间
36 小时
 楼主| 发表于 2014-9-30 19:24:32 | 显示全部楼层
回复【16楼】ricefat:
---------------------------------
是429  是要原理图吗  原理图上的lcd是有565 接口 和spi接口 f4自带的例程都用了  官网可以下载到原理图 如果你不好找 加我q传给你 我的429discovery
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-30 21:55:43 | 显示全部楼层
回复【17楼】l692519765:
---------------------------------
好的 我下来看看 F429还未接触过
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-10-1 17:40:42 | 显示全部楼层
回复【15楼】l692519765:
---------------------------------
我找到的LTDC部分初始化,来自于最新版STemWin

[mw_shl_code=c,true]static void LCD_LL_Init(uint32_t LayerIndex) { uint32_t xSize, ySize, BytesPerLine, BitsPerPixel, i; uint32_t Color; static uint32_t Is_Initialized; LTDC_InitTypeDef LTDC_InitStruct; LTDC_Layer_InitTypeDef LTDC_Layer_Init; LTDC_CLUT_InitTypeDef LTDC_CLUT_InitStruct; if (LayerIndex >= GUI_NUM_LAYERS) { return; } if (Is_Initialized == 0) { Is_Initialized = 1; /* Clock configuration */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2D, ENABLE); /* Enable the LTDC Clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_LTDC, ENABLE); /* Enable the DMA2D Clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2D, ENABLE); /* Configure the LCD Control pins */ LCD_AF_GPIOConfig(); /* Polarity configuration */ /* Initialize the horizontal synchronization polarity as active low */ LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL; /* Initialize the vertical synchronization polarity as active low */ LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL; /* Initialize the data enable polarity as active low */ LTDC_InitStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL; /* Initialize the pixel clock polarity as input pixel clock */ LTDC_InitStruct.LTDC_PCPolarity = LTDC_PCPolarity_IPC; /* Configure R,G,B component values for LCD background color */ LTDC_InitStruct.LTDC_BackgroundRedValue = 0; LTDC_InitStruct.LTDC_BackgroundGreenValue = 0; LTDC_InitStruct.LTDC_BackgroundBlueValue = 0; /* Configure PLLSAI prescalers for LCD */ RCC_PLLSAIConfig(192, 7, 3); RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8); /* Enable PLLSAI Clock */ RCC_PLLSAICmd(ENABLE); /* Wait for PLLSAI activation */ while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET) { } xSize = LCD_GetXSizeEx(LayerIndex); ySize = LCD_GetYSizeEx(LayerIndex); LTDC_InitStruct.LTDC_HorizontalSync = HSW; /* Configure vertical synchronization height */ LTDC_InitStruct.LTDC_VerticalSync = VSW; /* Configure accumulated horizontal back porch */ LTDC_InitStruct.LTDC_AccumulatedHBP = HBP; /* Configure accumulated vertical back porch */ LTDC_InitStruct.LTDC_AccumulatedVBP = VBP; /* Configure accumulated active width */ LTDC_InitStruct.LTDC_AccumulatedActiveW = xSize + HBP; /* Configure accumulated active height */ LTDC_InitStruct.LTDC_AccumulatedActiveH = ySize + VBP; /* Configure total width */ LTDC_InitStruct.LTDC_TotalWidth = xSize + HBP + HFP; /* Configure total height */ LTDC_InitStruct.LTDC_TotalHeigh = ySize + VBP + VFP; LTDC_Init(&LTDC_InitStruct); LTDC_ITConfig(LTDC_IT_LI, ENABLE); NVIC_SetPriority(LTDC_IRQn, 0); NVIC_EnableIRQ(LTDC_IRQn); } xSize = LCD_GetXSizeEx(LayerIndex); ySize = LCD_GetYSizeEx(LayerIndex); BytesPerLine = GetBytesPerLine(LayerIndex, xSize); LTDC_Layer_Init.LTDC_HorizontalStart = HBP + 1; LTDC_Layer_Init.LTDC_HorizontalStop = (xSize + HBP); LTDC_Layer_Init.LTDC_VerticalStart = VBP + 1; LTDC_Layer_Init.LTDC_VerticalStop = (ySize + VBP); LTDC_Layer_Init.LTDC_PixelFormat = GetPixelformat(LayerIndex); LTDC_Layer_Init.LTDC_ConstantAlpha = 255; LTDC_Layer_Init.LTDC_DefaultColorBlue = 0; LTDC_Layer_Init.LTDC_DefaultColorGreen = 0; LTDC_Layer_Init.LTDC_DefaultColorRed = 0; LTDC_Layer_Init.LTDC_DefaultColorAlpha = 0; #if (GUI_NUM_LAYERS > 1) LTDC_Layer_Init.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_PAxCA; LTDC_Layer_Init.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_PAxCA; #else LTDC_Layer_Init.LTDC_BlendingFactor_1 = LTDC_BlendingFactor1_CA; LTDC_Layer_Init.LTDC_BlendingFactor_2 = LTDC_BlendingFactor2_CA; #endif LTDC_Layer_Init.LTDC_CFBLineLength = BytesPerLine + 3; LTDC_Layer_Init.LTDC_CFBPitch = BytesPerLine; LTDC_Layer_Init.LTDC_CFBLineNumber = ySize; LTDC_Layer_Init.LTDC_CFBStartAdress = layer_address[LayerIndex]; LTDC_LayerInit((LayerIndex == 0 ? LTDC_Layer1 : LTDC_Layer2), &LTDC_Layer_Init); /* Enable LUT on demand */ BitsPerPixel = LCD_GetBitsPerPixelEx(LayerIndex); if (BitsPerPixel <= 8) { /* Enable usage of LUT for all modes with <= 8bpp */ LTDC_CLUTCmd((LayerIndex == 0 ? LTDC_Layer1 : LTDC_Layer2), ENABLE); } else { /* Optional CLUT initialization for AL88 mode (16bpp) */ if (apColorConvAPI[LayerIndex] == GUICC_88666I) { LTDC_CLUTCmd((LayerIndex == 0 ? LTDC_Layer1 : LTDC_Layer2), ENABLE); for (i = 0; i < 256; i++) { Color = LCD_API_ColorConv_8666.pfIndex2Color(i); LTDC_CLUT_InitStruct.LTDC_BlueValue = ((Color >> 16) & 0xff); LTDC_CLUT_InitStruct.LTDC_GreenValue = ((Color >> 8) & 0xff); LTDC_CLUT_InitStruct.LTDC_RedValue = (Color & 0xff); LTDC_CLUT_InitStruct.LTDC_CLUTAdress = i << 24; LTDC_CLUTInit((LayerIndex == 0 ? LTDC_Layer1 : LTDC_Layer2), &LTDC_CLUT_InitStruct); } } } /* Enable layer */ LTDC_LayerCmd((LayerIndex == 0 ? LTDC_Layer1 : LTDC_Layer2), ENABLE); /* Reload configuration */ LTDC_ReloadConfig(LTDC_VBReload); }[/mw_shl_code]
怎么看也不是SPI接口啊
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-10-1 17:42:09 | 显示全部楼层
回复【17楼】l692519765:
---------------------------------
你说的SPI会不会是触摸屏控制芯片的驱动?
回复

使用道具 举报

25

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2014-7-16
在线时间
5 小时
发表于 2014-10-2 21:21:28 | 显示全部楼层
新版怎么没有GUIDRV_Template.c?我用emWin5.26Rev1都有
光圈电子科技 晓航 多多 啾儿 实验室
回复

使用道具 举报

3

主题

2177

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3321
金钱
3321
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-10-4 18:01:46 | 显示全部楼层
回复【21楼】光圈电子科技-晓航-多多实验室:
---------------------------------
可能STemWin和emWin不一样吧
回复

使用道具 举报

78

主题

271

帖子

0

精华

高级会员

Rank: 4

积分
695
金钱
695
注册时间
2013-10-20
在线时间
36 小时
 楼主| 发表于 2014-10-10 07:59:10 | 显示全部楼层
回复【19楼】ricefat:
---------------------------------初始化写命令时候是用spi的啊。你看下 power_on()这个函数,这个才是控制器硬件的初始化啊。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 14:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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