关于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)
{
}
}
没人回答的了吗 本帖最后由 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)
{
}
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-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
我主要是不知道 下面4个配置的含义,关键是我随意写 但是画不出来啊
DMA2D_Inits.DMA2D_OutputMemoryAdd...
给你的代码你参考下,或者直接使用就可以,具体的设置可以看下结构体参数的宏定义,这个很简单。 creep 发表于 2015-11-19 11:05
给你的代码你参考下,或者直接使用就可以,具体的设置可以看下结构体参数的宏定义,这个很简单。 ...
我都看了就是画不出来 也不知道问题出在哪了 tt4566 发表于 2015-11-19 11:10
我都看了就是画不出来 也不知道问题出在哪了
是不是和输出的那个地址有关 tt4566 发表于 2015-11-19 11:10
是不是和输出的那个地址有关
时钟打开了吗?
creep 发表于 2015-11-19 13:46
时钟打开了吗?
打开了,要不退不出while();
用DMA2D不是可以直接划线的吗(原里是向指定区域内填充颜色),可是就是不行 ,有没有这方面的经验
页:
[1]