用户工具

站点工具


icore4t_61

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
icore4t_61 [2020/10/21 09:58]
zgf 创建
icore4t_61 [2022/04/01 10:58] (当前版本)
sean
行 2: 行 2:
 |技术支持电话|**0379-69926675-801**||| |技术支持电话|**0379-69926675-801**|||
 |技术支持邮件|Gingko@vip.163.com||| |技术支持邮件|Gingko@vip.163.com|||
-|技术论坛|http://​www.eeschool.org||| 
 ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 |  V1.0  |  2020-10-21 ​ |  gingko ​ |  初次建立 ​ |  |  V1.0  |  2020-10-21 ​ |  gingko ​ |  初次建立 ​ | 
行 102: 行 101:
   * HV同步模式   * HV同步模式
  
-HV模式需要LCD_CLK时钟信号,行同步信号LCD_HSYNC和场同步信号LCD_VSYNC来控制刷新。比如一个480x272分辨率的裸屏,有一个行同步信号LCD_HSYNC产生时(高电平或者低电平脉冲),就有480个LCD_CLK输出时钟来确认行中480个点。每个时钟有效的时候,从显存读取一次RGB数据。再来一个行同步信号LCD_HSYNC产生时(高电平或者低电平脉冲),切换到下一行,继续行同步和时钟输出,扫描272行后,发送一个场同步信号LCD_VSYNC,又重新从第一行扫描开始。+HV模式需要LCD_CLK时钟信号,行同步信号LCD_HSYNC和场同步信号LCD_VSYNC来控制刷新。比如一个800x480分辨率的裸屏,有一个行同步信号LCD_HSYNC产生时(高电平或者低电平脉冲),就有800个LCD_CLK输出时钟来确认行中800个点。每个时钟有效的时候,从显存读取一次RGB数据。再来一个行同步信号LCD_HSYNC产生时(高电平或者低电平脉冲),切换到下一行,继续行同步和时钟输出,扫描480行后,发送一个场同步信号LCD_VSYNC,又重新从第一行扫描开始。
  
 === 3.LTDC的时序配置 === === 3.LTDC的时序配置 ===
行 110: 行 109:
   * HSYNC width水平同步宽度设置,以LCD_CLK的像素时钟输出为单位。   * HSYNC width水平同步宽度设置,以LCD_CLK的像素时钟输出为单位。
   * HBP(horizontal back porch period)水平后沿周期设置,以LCD_CLK的像素时钟输出为单位。   * HBP(horizontal back porch period)水平后沿周期设置,以LCD_CLK的像素时钟输出为单位。
-  * Active width有效宽度设置,以LCD_CLK的像素时钟输出为单位。以480*272分辨率为例,Active width = 480+  * Active width有效宽度设置,以LCD_CLK的像素时钟输出为单位。以800*480分辨率为例,Active width = 800
   * HFP(horizontal front porch period)水平前沿周期设置,以LCD_CLK的像素时钟输出为单位。   * HFP(horizontal front porch period)水平前沿周期设置,以LCD_CLK的像素时钟输出为单位。
   * VSYNC width垂直同步宽度设置,以LCD_CLK的像素时钟输出为单位。   * VSYNC width垂直同步宽度设置,以LCD_CLK的像素时钟输出为单位。
   * VBP(vertical back porch period)垂直后沿周期设置,以LCD_CLK的像素时钟输出为单位。   * VBP(vertical back porch period)垂直后沿周期设置,以LCD_CLK的像素时钟输出为单位。
-  * Active height有效高度设置,以LCD_CLK的像素时钟输出为单位。以480*272分辨率为例,Active height = 272+  * Active height有效高度设置,以LCD_CLK的像素时钟输出为单位。以800*480分辨率为例,Active height = 480
   * VFP(vertical front porch period)垂直前沿周期设置,以LCD_CLK的像素时钟输出为单位。   * VFP(vertical front porch period)垂直前沿周期设置,以LCD_CLK的像素时钟输出为单位。
  
行 213: 行 212:
  x = x + xs;  x = x + xs;
  y = y + ys;  y = y + ys;
- if((x+r)>​=480 || (x-r)<​=0){+ if((x+r)>​=LCD_WIDTH ​|| (x-r)<​=0){
  xs=-1*xs; ​  xs=-1*xs; ​
  x = x + 2*xs;  x = x + 2*xs;
行 219: 行 218:
  if(co==7){  if(co==7){
  co=0;  co=0;
- clear_screen(bg);​} + clear_screen(bg);​ 
-+                        ​
- if((y+r)>​=272 || (y-r)<​=0){+                
 + if((y+r)>​=LCD_HEIGHT ​|| (y-r)<​=0){
  ys=-1*ys;​  ys=-1*ys;​
  y = y + 2*ys;  y = y + 2*ys;
行 227: 行 227:
  if(co==7){  if(co==7){
  co=0;  co=0;
- clear_screen(bg);​}+ clear_screen(bg);​ 
 +                        ​}
  }  }
  draw_circle(x,​ y, r, colo[co], 1);  //画圆  draw_circle(x,​ y, r, colo[co], 1);  //画圆
  for(j = oldx-r-2;j < oldx+r+2;j ++){  for(j = oldx-r-2;j < oldx+r+2;j ++){
  for(i = oldy-r-2;i < oldy+r+2;i ++){  for(i = oldy-r-2;i < oldy+r+2;i ++){
-   if(j<1 || j>479 || i<1 || i>271)continue;+   if(j<1 || j>LCD_WIDTH-1 ​|| i<1 || i>LCD_HEIGHT-1)continue;
  if( (int)(x-j)*(x-j) + (int)(y-i)*(y-i) > (int)r*r ​ ){  if( (int)(x-j)*(x-j) + (int)(y-i)*(y-i) > (int)r*r ​ ){
  *(volatile unsigned short int *) (address_sdram[i] + (j << 1)) = bg;  *(volatile unsigned short int *) (address_sdram[i] + (j << 1)) = bg;
行 245: 行 246:
 void MX_LTDC_Init(void) void MX_LTDC_Init(void)
 { {
- LTDC_LayerCfgTypeDef pLayerCfg = {0}; +  ​LTDC_LayerCfgTypeDef pLayerCfg = {0}; 
- LTDC_LayerCfgTypeDef pLayerCfg1 = {0}; +  LTDC_LayerCfgTypeDef pLayerCfg1 = {0}; 
- hltdc.Instance = LTDC; +  hltdc.Instance = LTDC; 
- hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;​ //​水平同步极性 +  hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;​ //​水平同步极性 
- hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;​ //​垂直同步极性 +  hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;​ //​垂直同步极性 
- hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;​ //​数据使能极性 +  hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;​ //​数据使能极性 
- hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;​ //​像素时钟极性 +  hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;​ //​像素时钟极性 
- hltdc.Init.HorizontalSync = 0;       //​水平同步宽度 +  hltdc.Init.HorizontalSync = 0;       //​水平同步宽度 
- hltdc.Init.VerticalSync = 0;         //​垂直同步宽度 +  hltdc.Init.VerticalSync = 1;         //​垂直同步宽度 
- hltdc.Init.AccumulatedHBP = 20;     //​水平同步后沿宽度 +  hltdc.Init.AccumulatedHBP = 45;     //​水平同步后沿宽度 
- hltdc.Init.AccumulatedVBP = 9;       //​垂直同步后沿高度 +  hltdc.Init.AccumulatedVBP = 22;       //​垂直同步后沿高度 
- hltdc.Init.AccumulatedActiveW = 500;//​有效宽度 +  hltdc.Init.AccumulatedActiveW = 845;//​有效宽度 
- hltdc.Init.AccumulatedActiveH = 281;//​有效高度 +  hltdc.Init.AccumulatedActiveH = 502;//​有效高度 
- hltdc.Init.TotalWidth = 524;          //​总宽度 +  hltdc.Init.TotalWidth = 1055;          //​总宽度 
- hltdc.Init.TotalHeigh = 287;          //​总高度 +  hltdc.Init.TotalHeigh = 525;          //​总高度 
- hltdc.Init.Backcolor.Blue = 255;     //​背景RGB数值,白色 +  hltdc.Init.Backcolor.Blue = 255;     //​背景RGB数值,白色 
- hltdc.Init.Backcolor.Green = 255; +  hltdc.Init.Backcolor.Green = 255; 
- hltdc.Init.Backcolor.Red = 255; +  hltdc.Init.Backcolor.Red = 255; 
- if (HAL_LTDC_Init(&​hltdc) != HAL_OK) +  if (HAL_LTDC_Init(&​hltdc) != HAL_OK) 
- {Error_Handler();​} +  {Error_Handler();​} 
- pLayerCfg.WindowX0 = 0;    //​屏幕像素宽 +  pLayerCfg.WindowX0 = 0;    //​屏幕像素宽 
- pLayerCfg.WindowX1 = 480+  pLayerCfg.WindowX1 = 800
-   pLayerCfg.WindowY0 = 0;    //​屏幕像素高 +  pLayerCfg.WindowY0 = 0;    //​屏幕像素高 
- pLayerCfg.WindowY1 = 272+  pLayerCfg.WindowY1 = 480
- pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;​ //​屏幕格式 +  pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;​ //​屏幕格式 
-   pLayerCfg.Alpha = 0xff;    //​透明度,不透明 +  pLayerCfg.Alpha = 0xff;    //​透明度,不透明 
- pLayerCfg.Alpha0 = 0;      //​默认透明度 +  pLayerCfg.Alpha0 = 0;      //​默认透明度 
- pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;​ +  pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;​ 
- pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;​ +  pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;​ 
- pLayerCfg.FBStartAdress = 0xC0000000; ​ //​帧缓冲区起始地址 +  pLayerCfg.FBStartAdress = 0xC0000000; ​ //​帧缓冲区起始地址 
- pLayerCfg.ImageWidth = 480;  //​图层宽 +  pLayerCfg.ImageWidth = 800;  //​图层宽 
- pLayerCfg.ImageHeight = 272;  //​图层高 +  pLayerCfg.ImageHeight = 480;  //​图层高 
- pLayerCfg.Backcolor.Blue = 255;    //​图层背景RGB数值,白色 +  pLayerCfg.Backcolor.Blue = 255;    //​图层背景RGB数值,白色 
- pLayerCfg.Backcolor.Green = 255; +  pLayerCfg.Backcolor.Green = 255; 
- pLayerCfg.Backcolor.Red = 255; +  pLayerCfg.Backcolor.Red = 255; 
- if (HAL_LTDC_ConfigLayer(&​hltdc,​ &​pLayerCfg,​ 0) != HAL_OK) +  if (HAL_LTDC_ConfigLayer(&​hltdc,​ &​pLayerCfg,​ 0) != HAL_OK) 
- { Error_Handler();​}+  { Error_Handler();​}
 } }
- 
 </​code>​ </​code>​
 === 4.画点函数 === === 4.画点函数 ===
行 307: 行 307:
 int draw_circle(int x, int y, int r, int color, int fill) { int draw_circle(int x, int y, int r, int color, int fill) {
  int i,j;  int i,j;
- if(x<0 || x>480 || y<0 || y>272)return 0;+ if(x<0 || x>LCD_WIDTH ​|| y<0 || y>LCD_HEIGHT)return 0;
  for(j = x-r;j < x+r;j ++){  for(j = x-r;j < x+r;j ++){
  for(i = y-r;i < y+r;i ++){  for(i = y-r;i < y+r;i ++){
icore4t_61.1603245501.txt.gz · 最后更改: 2020/10/21 09:58 由 zgf