tt4566 发表于 2015-11-18 18:50:15

关于stm32f429 DMA2D使用?

这是我的代码,已经在其他地方使能时钟了,我的是rgb888,没有a线
配置成功了,但就是在界面上不显示我要的 直线,
我知道是下面的4个配置错了,但不知道怎么配置,480*272,4.3寸数字rgb屏
DMA2D_Inits.DMA2D_OutputMemoryAdd = 0;//3*(480*10 + 10);
      DMA2D_Inits.DMA2D_OutputOffset = 480-100;
      DMA2D_Inits.DMA2D_NumberOfLine = 100;
      DMA2D_Inits.DMA2D_PixelPerLine = 100;
以下是代码:
void LCD_DrawLinePoint(void)
{
      DMA2D_InitTypeDef DMA2D_Inits;
//      DMA2D_DeInit();
      DMA2D_Inits.DMA2D_Mode = DMA2D_R2M;
      DMA2D_Inits.DMA2D_CMode = DMA2D_RGB888;
      DMA2D_Inits.DMA2D_OutputGreen = 0x00;
      DMA2D_Inits.DMA2D_OutputBlue = 0x00;
      DMA2D_Inits.DMA2D_OutputRed = 0xff;
      DMA2D_Inits.DMA2D_OutputAlpha = 0xff;
      DMA2D_Inits.DMA2D_OutputMemoryAdd = 0;//3*(480*10 + 10);
      DMA2D_Inits.DMA2D_OutputOffset = 480-100;
      DMA2D_Inits.DMA2D_NumberOfLine = 100;
      DMA2D_Inits.DMA2D_PixelPerLine = 100;
      DMA2D_Init(&DMA2D_Inits);
      /* Start Transfer */
      DMA2D_StartTransfer();
      /* Wait for CTC Flag activation */
      while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET)
      {
      }
}

tt4566 发表于 2015-11-18 18:57:13

没人回答的了吗

creep 发表于 2015-11-18 22:16:45

本帖最后由 creep 于 2015-11-18 22:20 编辑

/**
* @briefDisplays a line.
* @param Xpos: specifies the X position, can be a value from 0 to 240.
* @param Ypos: specifies the Y position, can be a value from 0 to 320.
* @param Length: line length.
* @param Direction: line direction.
*   This parameter can be one of the following values: LCD_DIR_HORIZONTAL or LCD_DIR_VERTICAL.
* @retval None
*/
void LCD_DrawLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction,uint16_t LineColor)
{
DMA2D_InitTypeDef      DMA2D_InitStruct;

uint32_tXaddress = 0;
uint16_t Red_Value = 0, Green_Value = 0, Blue_Value = 0;

        if(Length == 0) return;
Xaddress = g_CurrentFrameBuffer + 2*(LCD_PIXEL_WIDTH*Ypos + Xpos);

Red_Value = (0xF800 & LineColor) >> 11;
Blue_Value = 0x001F & LineColor;
Green_Value = (0x07E0 & LineColor) >> 5;
       
/* Configure DMA2D */   
DMA2D_DeInit();
DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M;      
DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565;      
DMA2D_InitStruct.DMA2D_OutputGreen = Green_Value;      
DMA2D_InitStruct.DMA2D_OutputBlue = Blue_Value;   
DMA2D_InitStruct.DMA2D_OutputRed = Red_Value;               
DMA2D_InitStruct.DMA2D_OutputAlpha = 0xFF        ;                  
DMA2D_InitStruct.DMA2D_OutputMemoryAdd = Xaddress;                  

if(Direction == LCD_DIR_HORIZONTAL)
{                                                      
    DMA2D_InitStruct.DMA2D_OutputOffset = 0;               
    DMA2D_InitStruct.DMA2D_NumberOfLine = 1;            
    DMA2D_InitStruct.DMA2D_PixelPerLine = Length;
}
else
{                                                            
    DMA2D_InitStruct.DMA2D_OutputOffset = LCD_PIXEL_WIDTH - 1;               
    DMA2D_InitStruct.DMA2D_NumberOfLine = Length;            
    DMA2D_InitStruct.DMA2D_PixelPerLine = 1;
}

DMA2D_Init(&DMA2D_InitStruct);
/* Start Transfer */
DMA2D_StartTransfer();
/* Wait for CTC Flag activation */
while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET)
{
}


tt4566 发表于 2015-11-19 10:20:13

creep 发表于 2015-11-18 22:16


我主要是不知道 下面4个配置的含义,关键是我随意写 但是画不出来啊
DMA2D_Inits.DMA2D_OutputMemoryAdd ?
        DMA2D_Inits.DMA2D_OutputOffset = ?;
        DMA2D_Inits.DMA2D_NumberOfLine = ?;
        DMA2D_Inits.DMA2D_PixelPerLine = ?;

tt4566 发表于 2015-11-19 10:20:39

creep 发表于 2015-11-18 22:16


我主要是不知道 下面4个配置的含义,关键是我随意写 但是画不出来啊
DMA2D_Inits.DMA2D_OutputMemoryAdd ?
DMA2D_Inits.DMA2D_OutputOffset = ?;
DMA2D_Inits.DMA2D_NumberOfLine = ?;
DMA2D_Inits.DMA2D_PixelPerLine = ?;

creep 发表于 2015-11-19 11:05:41

tt4566 发表于 2015-11-19 10:20
我主要是不知道 下面4个配置的含义,关键是我随意写 但是画不出来啊
DMA2D_Inits.DMA2D_OutputMemoryAdd...

给你的代码你参考下,或者直接使用就可以,具体的设置可以看下结构体参数的宏定义,这个很简单。

tt4566 发表于 2015-11-19 11:10:06

creep 发表于 2015-11-19 11:05
给你的代码你参考下,或者直接使用就可以,具体的设置可以看下结构体参数的宏定义,这个很简单。 ...

我都看了就是画不出来 也不知道问题出在哪了

tt4566 发表于 2015-11-19 11:10:57

tt4566 发表于 2015-11-19 11:10
我都看了就是画不出来 也不知道问题出在哪了

是不是和输出的那个地址有关

creep 发表于 2015-11-19 13:46:49

tt4566 发表于 2015-11-19 11:10
是不是和输出的那个地址有关

时钟打开了吗?

tt4566 发表于 2015-11-19 17:02:56

creep 发表于 2015-11-19 13:46
时钟打开了吗?

打开了,要不退不出while();
用DMA2D不是可以直接划线的吗(原里是向指定区域内填充颜色),可是就是不行 ,有没有这方面的经验
页: [1]
查看完整版本: 关于stm32f429 DMA2D使用?