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

关于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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版