你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于stm32f429 DMA2D使用?

[复制链接]
tt4566 提问时间:2015-11-18 18:50 /
这是我的代码,已经在其他地方使能时钟了,我的是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)
        {
        }
}

收藏 评论9 发布时间:2015-11-18 18:50

举报

9个回答
tt4566 回答时间:2015-11-18 18:57:13
没人回答的了吗
creep 回答时间:2015-11-18 22:16:45
本帖最后由 creep 于 2015-11-18 22:20 编辑
  1. /**
  2.   * @brief  Displays a line.
  3.   * @param Xpos: specifies the X position, can be a value from 0 to 240.
  4.   * @param Ypos: specifies the Y position, can be a value from 0 to 320.
  5.   * @param Length: line length.
  6.   * @param Direction: line direction.
  7.   *   This parameter can be one of the following values: LCD_DIR_HORIZONTAL or LCD_DIR_VERTICAL.
  8.   * @retval None
  9.   */
  10. void LCD_DrawLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction,uint16_t LineColor)
  11. {
  12.   DMA2D_InitTypeDef      DMA2D_InitStruct;
  13.   
  14.   uint32_t  Xaddress = 0;
  15.   uint16_t Red_Value = 0, Green_Value = 0, Blue_Value = 0;
  16.   
  17.         if(Length == 0) return;
  18.   Xaddress = g_CurrentFrameBuffer + 2*(LCD_PIXEL_WIDTH*Ypos + Xpos);

  19.   Red_Value = (0xF800 & LineColor) >> 11;
  20.   Blue_Value = 0x001F & LineColor;
  21.   Green_Value = (0x07E0 & LineColor) >> 5;
  22.        
  23.   /* Configure DMA2D */   
  24.   DMA2D_DeInit();  
  25.   DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M;      
  26.   DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565;      
  27.   DMA2D_InitStruct.DMA2D_OutputGreen = Green_Value;      
  28.   DMA2D_InitStruct.DMA2D_OutputBlue = Blue_Value;     
  29.   DMA2D_InitStruct.DMA2D_OutputRed = Red_Value;               
  30.   DMA2D_InitStruct.DMA2D_OutputAlpha = 0xFF        ;                  
  31.   DMA2D_InitStruct.DMA2D_OutputMemoryAdd = Xaddress;                  
  32.   
  33.   if(Direction == LCD_DIR_HORIZONTAL)
  34.   {                                                      
  35.     DMA2D_InitStruct.DMA2D_OutputOffset = 0;               
  36.     DMA2D_InitStruct.DMA2D_NumberOfLine = 1;            
  37.     DMA2D_InitStruct.DMA2D_PixelPerLine = Length;
  38.   }
  39.   else
  40.   {                                                            
  41.     DMA2D_InitStruct.DMA2D_OutputOffset = LCD_PIXEL_WIDTH - 1;               
  42.     DMA2D_InitStruct.DMA2D_NumberOfLine = Length;            
  43.     DMA2D_InitStruct.DMA2D_PixelPerLine = 1;  
  44.   }
  45.   
  46.   DMA2D_Init(&DMA2D_InitStruct);  
  47.   /* Start Transfer */
  48.   DMA2D_StartTransfer();  
  49.   /* Wait for CTC Flag activation */
  50.   while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET)
  51.   {
  52.   }
  53.   
复制代码

tt4566 回答时间:2015-11-19 10:20:13

我主要是不知道 下面4个配置的含义,关键是我随意写 但是画不出来啊
DMA2D_Inits.DMA2D_OutputMemoryAdd ?
        DMA2D_Inits.DMA2D_OutputOffset = ?;
        DMA2D_Inits.DMA2D_NumberOfLine = ?;
        DMA2D_Inits.DMA2D_PixelPerLine = ?;
tt4566 回答时间:2015-11-19 10:20:39

我主要是不知道 下面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  不是可以直接划线的吗(原里是向指定区域内填充颜色),可是就是不行 ,有没有这方面的经验

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版