اطلاعیه

Collapse
No announcement yet.

برد STM32F7 تصویر رو خراب نشون میده

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    برد STM32F7 تصویر رو خراب نشون میده

    با سلام
    من این بورد STM32F746 DISCOVERY رو گرفتم . می خوام عکس روی ال سی دی آن نشان بدم ولی عکسو نشون نمی ده و به هم ریزه . داخل برنامه هم هیچ اروری نمیده.
    لطفا میشه راهنمایی کنید؟؟؟

    #2
    پاسخ : stm32f7

    نوشته اصلی توسط sara_soniya68 نمایش پست ها
    با سلام
    من این بورد STM32F746 DISCOVERY رو گرفتم . می خوام عکس روی ال سی دی آن نشان بدم ولی عکسو نشون نمی ده و به هم ریزه . داخل برنامه هم هیچ اروری نمیده.
    لطفا میشه راهنمایی کنید؟؟؟
    نه، اینجوری نمیشه کمک کرد. خییییییلییییی اطلاعات کم دادید. شما باید برنامه تون رو بذارید و بگید که دقیقا چیکار کردید. دوستانی که اطلاع دارند بهتون میگن که مشکل از کجا بوده. همچنین پیشنهاد میکنم یه تاپیک جداگانه بزنید.

    دیدگاه


      #3
      پاسخ : stm32f7

      من از مثال های خود بورد که در سایت دیسکاوری گذاشته استفاده می کنم ، می خوام عکسی که خودش گذاشته رو با یه عکس دیگه جایگزین کنم ، ولی وقتی فایل هگز عکس جدید و میزارم ، به هم میریزه و فقط خطهای آبی که دارای اعوجاج زیادی هست نشون میده.

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      از مثال های خود بورد که در سایت st ; که برای بورد دیسکاوری گذاشته استفاده می کنم ،

      دیدگاه


        #4
        پاسخ : stm32f7

        نوشته اصلی توسط sara_soniya68 نمایش پست ها
        من از مثال های خود بورد که در سایت دیسکاوری گذاشته استفاده می کنم ، می خوام عکسی که خودش گذاشته رو با یه عکس دیگه جایگزین کنم ، ولی وقتی فایل هگز عکس جدید و میزارم ، به هم میریزه و فقط خطهای آبی که دارای اعوجاج زیادی هست نشون میده.
        نوشته اصلی توسط sara_soniya68 نمایش پست ها
        از مثال های خود بورد که در سایت st ; که برای بورد دیسکاوری گذاشته استفاده می کنم ،


        اگه اینجوریه پس به احتمال زیاد تصویراتون رو خراب تبدیل میکنید؟ مد RGB تصویر شما چیه؟ 888؟ یا 565؟ یا...
        اگه نمی دونید یه تیکه از HEX تصویر اصلی(همونی که مال برد هستش و شما ایجادش نکردید) و یه تیکه هم از تصویری که ایجاد کردید بذارید تا ببینیم.

        دیدگاه


          #5
          پاسخ : برد STM32F7 تصویر رو خراب نشون میده

          0x42,0x4d,0xd6,0x23,0x00,0x00,0x00,0x00,0x00,0x00, 0x36,0x00,0x00,0x00,0x28,0x00,

          این یک خط از گز تصویر اصلی


          0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x0F,
          اینم یک خط از هگز تصویری که من تبدیل کردم.
          ممنون

          دیدگاه


            #6
            پاسخ : برد STM32F7 تصویر رو خراب نشون میده

            من با بررسی هایی که انجام دادم ظاهرا مد کاریش ARGB هستش. اولی واسه آلفا هستش و اون سه تا هم RGB-888 . شما یه تابع واسه پاک کردن نمایشگر ندارید؟ اگه اونو بذارید شاید بشه نظر داد.

            دیدگاه


              #7
              پاسخ : برد STM32F7 تصویر رو خراب نشون میده

              void BSP_LCD_Clear(uint32_t Color)
              {
              /* Clear the LCD */
              LL_FillBuffer(ActiveLayer, (uint32_t *)(hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize(), BSP_LCD_GetYSize(), 0, Color);
              }

              دیدگاه


                #8
                پاسخ : برد STM32F7 تصویر رو خراب نشون میده

                نوشته اصلی توسط sara_soniya68 نمایش پست ها
                void BSP_LCD_Clear(uint32_t Color)
                {
                /* Clear the LCD */
                LL_FillBuffer(ActiveLayer, (uint32_t *)(hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize(), BSP_LCD_GetYSize(), 0, Color);
                }
                بسیار عالی!
                الان شما از این تابع استفاده کردید؟ چه مقداری بهش دادید؟ اگه بخوایید مثلا نمایشگر کاملا یه رنگ بشه چیکار میکنید؟ مثلا کل نمایشگر سبز یا قرمز یا آبی بشه چیکار میکنید؟
                اگه دقت کنید این تابع از یه تابع دیگه تشکیل شده که رم نمایشگر رو با یه رنگ پر میکنه.شما الان باید تابع LL_FillBuffer رو یه نگاهی بندازی. آرگومان آخریش که بخش Color رو دادی باید ببینی توی تابع کجاهاش و چطوری ازش استفاده شده.

                دیدگاه


                  #9
                  پاسخ : برد STM32F7 تصویر رو خراب نشون میده

                  کد PHP:
                  static void LL_FillBuffer(uint32_t LayerIndexvoid *pDstuint32_t xSizeuint32_t ySizeuint32_t OffLineuint32_t ColorIndex
                  {
                    
                  /* Register to memory mode with ARGB8888 as color Mode */ 
                    
                  hDma2dHandler.Init.Mode         DMA2D_R2M;
                    if(
                  hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
                    { 
                  /* RGB565 format */ 
                      
                  hDma2dHandler.Init.ColorMode    DMA2D_RGB565;
                    }
                    else
                    { 
                  /* ARGB8888 format */
                      
                  hDma2dHandler.Init.ColorMode    DMA2D_ARGB8888;
                    }
                    
                  hDma2dHandler.Init.OutputOffset OffLine;      
                    
                    
                  hDma2dHandler.Instance DMA2D;
                    
                    
                  /* DMA2D Initialization */
                    
                  if(HAL_DMA2D_Init(&hDma2dHandler) == HAL_OK
                    {
                      if(
                  HAL_DMA2D_ConfigLayer(&hDma2dHandlerLayerIndex) == HAL_OK
                      {
                        if (
                  HAL_DMA2D_Start(&hDma2dHandlerColorIndex, (uint32_t)pDstxSizeySize) == HAL_OK)
                        {
                          
                  /* Polling For DMA transfer */  
                          
                  HAL_DMA2D_PollForTransfer(&hDma2dHandler10);
                        }
                      }
                    } 
                  }
                  HAL_StatusTypeDef HAL_DMA2D_Init(DMA2D_HandleTypeDef *hdma2d)

                    
                  /* Check the DMA2D peripheral state */
                    
                  if(hdma2d == NULL)
                    {
                       return 
                  HAL_ERROR;
                    }


                    
                  /* Check the parameters */
                    
                  assert_param(IS_DMA2D_ALL_INSTANCE(hdma2d->Instance));
                    
                  assert_param(IS_DMA2D_MODE(hdma2d->Init.Mode));
                    
                  assert_param(IS_DMA2D_CMODE(hdma2d->Init.ColorMode));
                    
                  assert_param(IS_DMA2D_OFFSET(hdma2d->Init.OutputOffset));


                    if(
                  hdma2d->State == HAL_DMA2D_STATE_RESET)
                    {
                      
                  /* Allocate lock resource and initialize it */
                      
                  hdma2d->Lock HAL_UNLOCKED;
                      
                  /* Init the low level hardware */
                      
                  HAL_DMA2D_MspInit(hdma2d);
                    }
                  HAL_StatusTypeDef HAL_DMA2D_ConfigLayer(DMA2D_HandleTypeDef *hdma2duint32_t LayerIdx)

                    
                  DMA2D_LayerCfgTypeDef *pLayerCfg = &hdma2d->LayerCfg[LayerIdx];
                    
                    
                  uint32_t regMask 0regValue 0;


                    
                  /* Check the parameters */
                    
                  assert_param(IS_DMA2D_LAYER(LayerIdx));  
                    
                  assert_param(IS_DMA2D_OFFSET(pLayerCfg->InputOffset));  
                    if(
                  hdma2d->Init.Mode != DMA2D_R2M)
                    {  
                      
                  assert_param(IS_DMA2D_INPUT_COLOR_MODE(pLayerCfg->InputColorMode));
                      if(
                  hdma2d->Init.Mode != DMA2D_M2M)
                      {
                        
                  assert_param(IS_DMA2D_ALPHA_MODE(pLayerCfg->AlphaMode));
                      }
                    }
                  HAL_StatusTypeDef HAL_DMA2D_Start(DMA2D_HandleTypeDef *hdma2duint32_t pdatauint32_t DstAddressuint32_t Width,  uint32_t Height)
                  {
                    
                  /* Check the parameters */
                    
                  assert_param(IS_DMA2D_LINE(Height));
                    
                  assert_param(IS_DMA2D_PIXEL(Width));
                    
                    
                  /* Process locked */
                    
                  __HAL_LOCK(hdma2d);


                    
                  /* Change DMA2D peripheral state */
                    
                  hdma2d->State HAL_DMA2D_STATE_BUSY;
                    
                    
                  /* Configure the source, destination address and the data size */
                    
                  DMA2D_SetConfig(hdma2dpdataDstAddressWidthHeight);


                    
                  /* Enable the Peripheral */
                    
                  __HAL_DMA2D_ENABLE(hdma2d);


                    return 
                  HAL_OK;
                  }
                  HAL_StatusTypeDef HAL_DMA2D_CLUTLoading_Resume(DMA2D_HandleTypeDef *hdma2duint32_t LayerIdx)
                  {
                    
                  /* Check the SUSP and START bits for background or foreground CLUT loading */
                    
                  if(LayerIdx == 0)
                    {  
                      
                  /* Background CLUT loading suspension check */
                      
                  if (((hdma2d->Instance->CR DMA2D_CR_SUSP) == DMA2D_CR_SUSP)
                        && ((
                  hdma2d->Instance->BGPFCCR DMA2D_BGPFCCR_START) == DMA2D_BGPFCCR_START))
                      {
                        
                  /* Ongoing CLUT loading is suspended: change the DMA2D state before resuming */
                        
                  hdma2d->State HAL_DMA2D_STATE_BUSY;
                      }
                    }
                    else
                    {
                      
                  /* Foreground CLUT loading suspension check */
                      
                  if (((hdma2d->Instance->CR DMA2D_CR_SUSP) == DMA2D_CR_SUSP)
                        && ((
                  hdma2d->Instance->FGPFCCR DMA2D_FGPFCCR_START) == DMA2D_FGPFCCR_START))
                      {
                        
                  /* Ongoing CLUT loading is suspended: change the DMA2D state before resuming */
                        
                  hdma2d->State HAL_DMA2D_STATE_BUSY;
                      }  
                    }


                    
                  /* Resume the CLUT loading */
                    
                  CLEAR_BIT(hdma2d->Instance->CRDMA2D_CR_SUSP);  


                    return 
                  HAL_OK;
                  }




                  /**


                    * @brief  Polling for transfer complete or CLUT loading.
                    * @param  hdma2d: Pointer to a DMA2D_HandleTypeDef structure that contains
                    *                 the configuration information for the DMA2D. 
                    * @param  Timeout: Timeout duration
                    * @retval HAL status
                    */
                  HAL_StatusTypeDef HAL_DMA2D_PollForTransfer(DMA2D_HandleTypeDef *hdma2duint32_t Timeout)
                  {
                    
                  uint32_t tickstart 0;
                    
                  __IO uint32_t isrflags 0x0;  


                    
                  /* Polling for DMA2D transfer */
                    
                  if((hdma2d->Instance->CR DMA2D_CR_START) != RESET)
                    {
                     
                  /* Get tick */
                     
                  tickstart HAL_GetTick();


                      while(
                  __HAL_DMA2D_GET_FLAG(hdma2dDMA2D_FLAG_TC) == RESET)
                      {
                        
                  isrflags READ_REG(hdma2d->Instance->ISR); 
                        if ((
                  isrflags & (DMA2D_FLAG_CE|DMA2D_FLAG_TE)) != RESET)
                        {
                          if ((
                  isrflags DMA2D_FLAG_CE) != RESET)
                          {
                            
                  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CE;        
                          }
                          if ((
                  isrflags DMA2D_FLAG_TE) != RESET)        
                          {
                            
                  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TE;        
                          }
                          
                  /* Clear the transfer and configuration error flags */
                          
                  __HAL_DMA2D_CLEAR_FLAG(hdma2dDMA2D_FLAG_CE DMA2D_FLAG_TE);


                          
                  /* Change DMA2D state */
                          
                  hdma2d->State HAL_DMA2D_STATE_ERROR;


                          
                  /* Process unlocked */
                          
                  __HAL_UNLOCK(hdma2d);
                          
                          return 
                  HAL_ERROR;
                        }
                        
                  /* Check for the Timeout */
                        
                  if(Timeout != HAL_MAX_DELAY)
                        {
                          if((
                  Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
                          {
                            
                  /* Update error code */
                            
                  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;


                            
                  /* Change the DMA2D state */
                            
                  hdma2d->State HAL_DMA2D_STATE_TIMEOUT;
                           
                            
                  /* Process unlocked */
                            
                  __HAL_UNLOCK(hdma2d);
                             
                            return 
                  HAL_TIMEOUT;
                          }
                        }        
                      }
                    }
                    
                  /* Polling for CLUT loading (foreground or background) */
                    
                  if (((hdma2d->Instance->FGPFCCR DMA2D_FGPFCCR_START) != RESET)  || 
                        ((
                  hdma2d->Instance->BGPFCCR DMA2D_BGPFCCR_START) != RESET))
                    {
                      
                  /* Get tick */
                      
                  tickstart HAL_GetTick();
                     
                      while(
                  __HAL_DMA2D_GET_FLAG(hdma2dDMA2D_FLAG_CTC) == RESET)
                      {
                        
                  isrflags READ_REG(hdma2d->Instance->ISR);   
                        if ((
                  isrflags & (DMA2D_FLAG_CAE|DMA2D_FLAG_CE|DMA2D_FLAG_TE)) != RESET)        
                        {      
                          if ((
                  isrflags DMA2D_FLAG_CAE) != RESET)
                          {
                            
                  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CAE;        
                          }   
                          if ((
                  isrflags DMA2D_FLAG_CE) != RESET)             
                          {
                            
                  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_CE;        
                          }
                          if ((
                  isrflags DMA2D_FLAG_TE) != RESET)        
                          {
                            
                  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TE;        
                          }
                          
                  /* Clear the CLUT Access Error, Configuration Error and Transfer Error flags */
                          
                  __HAL_DMA2D_CLEAR_FLAG(hdma2dDMA2D_FLAG_CAE DMA2D_FLAG_CE DMA2D_FLAG_TE);
                          
                          
                  /* Change DMA2D state */
                          
                  hdma2d->StateHAL_DMA2D_STATE_ERROR;
                          
                          
                  /* Process unlocked */
                          
                  __HAL_UNLOCK(hdma2d);
                            
                          return 
                  HAL_ERROR;      
                        }      
                        
                  /* Check for the Timeout */
                        
                  if(Timeout != HAL_MAX_DELAY)
                        {
                          if((
                  Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
                          {
                            
                  /* Update error code */
                            
                  hdma2d->ErrorCode |= HAL_DMA2D_ERROR_TIMEOUT;
                      
                            
                  /* Change the DMA2D state */
                            
                  hdma2d->StateHAL_DMA2D_STATE_TIMEOUT;
                          
                            
                  /* Process unlocked */
                            
                  __HAL_UNLOCK(hdma2d);
                                      
                            return 
                  HAL_TIMEOUT;
                          }
                        }      
                      }
                    }


                    
                  /* Clear the transfer complete and CLUT loading flags */
                    
                  __HAL_DMA2D_CLEAR_FLAG(hdma2dDMA2D_FLAG_TC|DMA2D_FLAG_CTC);
                    
                    
                  /* Change DMA2D state */
                    
                  hdma2d->State HAL_DMA2D_STATE_READY;
                    
                    
                  /* Process unlocked */
                    
                  __HAL_UNLOCK(hdma2d);
                    
                    return 
                  HAL_OK
                  جدیدترین ویرایش توسط روح الامین; ۰۸:۴۸ ۱۳۹۵/۰۵/۱۸.

                  دیدگاه


                    #10
                    پاسخ : برد STM32F7 تصویر رو خراب نشون میده

                    دقیقا همون اول تابع یه بررسی کرده. این قسمت منظورم هستش:
                    /* Register to memory mode with ARGB8888 as color Mode */
                    hDma2dHandler.Init.Mode = DMA2D_R2M;
                    if(
                    hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
                    {
                    /* RGB565 format */
                    hDma2dHandler.Init.ColorMode = DMA2D_RGB565;
                    }
                    else
                    {
                    /* ARGB8888 format */
                    hDma2dHandler.Init.ColorMode = DMA2D_ARGB8888;
                    }


                    خب پس همه چیز روشن شد. البته اولش شما باید بگید فایل HEX تون رو با چی درست کردید. تنظیماتش رو هم بگید. شما دو راه حل دارید.
                    1- فکر میکنم تنظیم دیفالت روی ARGB8888 هستش. اگه اینجور باشه شما می تونید به یه برنامه فایل تصویر مورد نظرتون رو به ARGB8888 تبدیل کنید و استفاده کنید. اگه هم دیفالت روی DMA2D_ARGB8888 نبود، فکر میکنم شما می تونید به hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat مقدار DMA2D_ARGB8888 بدید تا مدش بره روی ARGB8888 و بتونید ازش استفاده کنید.
                    2- شما می تونید تصویرتون رو با مد RGB565 تولید کنید و به hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat مقدار DMA2D_RGB565 بدید تا مدش بره روی RGB565 و بتونید ازش استفاده کنید.

                    خلاص

                    دیدگاه


                      #11
                      پاسخ : برد STM32F7 تصویر رو خراب نشون میده

                      سلام
                      مثال ها رو چجوری از سایت st گرفتین؟
                      من هر چی گشتم پیدا نکردم، تازه اومدم سمت stm32 ها اطلاعات اولیم ضعیفه!
                      لطفا لینکش رو بزارید، ممنون
                      اي خدا ، من بايد از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از اين راه طعنه زنند. بايد به آن سنگدلاني که علم را بهانه کرده و به ديگران فخر ميآ*فروشند، ثابت کنم که خاک پاي من هم نخواهند شد. بايد همه آن تيره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترين و افتاده ترين مرد روي زمين باشم.
                      شهيد دکتر مصطفي چمران
                      اللهم صل علي محمد و ال محمد و عجل فرجهم
                      ; C is not for children

                      دیدگاه


                        #12
                        پاسخ : برد STM32F7 تصویر رو خراب نشون میده

                        سلام.من هم دقیقا به این مشکل برخوردم لطفا راهنماییم کنید.
                        با تبدیل تصویر به bmp 16bit rgb565 مشکل حل نشد.

                        دیدگاه

                        لطفا صبر کنید...
                        X