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

STM32L496 - DCMI (JPEG MODE)

[复制链接]
frankstm32f 提问时间:2018-9-7 22:13 /
本帖最后由 frankstm32f 于 2018-9-7 22:14 编辑

各位前輩/高手 安安:

小弟不才,上來請教大家

1.請問有人有使用過STM32L496的DCMI來接收OV2640相機輸出的JPEG資料嗎?小弟參考了官方文檔AN5020 - Digital camera interface (DCMI) for STM32 MCUs
看的有不太懂

DCMI availability and features across STM32 MCUs (P.13)
STM32L4x6  - JPEG codec (NO)
可是在
ST的DCMI有支援 Capture of JPEG data: the data is captured in JPEG format to be stored in the SDRAM. (P.56)
因此想問問STM32L496或是stm32L4帶DCMI是否都可以支援Capture of JPEG data呢?

2.

另外小弟有嘗試使用STM32L496來收OV2640 JPEG資料,
但是卻一直進 HAL_DCMI_ErrorCallback
HAL_DCMI_ErrorCallback [2018-09-07 22:05:21.456]
ErrorCode:0x41 [2018-09-07 22:05:21.456]
pBuffPtr:0 [2018-09-07 22:05:21.456]
XferSize:0 [2018-09-07 22:05:21.456]
pCircularBuffer:0 [2018-09-07 22:05:21.456]
HalfCopyLength:0 [2018-09-07 22:05:21.456]

但是缺查部到 ErrorCode:0x41 是什麼意思...
有請各位前輩和高手幫忙解答

附上DCMI配置 與部分程式

#define  PIXEL_WIDTH    ((uint16_t)240)
#define  PIXEL_HEIGHT   ((uint16_t)320)

uint16_t pBuffer[PIXEL_WIDTH*PIXEL_WIDTH];

if(BSP_CAMERA_Init(CAMERA_J320x240) == CAMERA_OK)
{
        printf ("CAMERA_OK \r\n");
        #if 1
        /* Wait 1s before Camera snapshot */
        HAL_Delay(1000);
        if(HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT , (uint32_t)pBuffer, PIXEL_WIDTH*PIXEL_WIDTH) != HAL_OK)
        {
                printf ("HAL_DCMI_Start_DMA_FAIL  \r\n");
        }
        #endif
} else {
        printf ("CAMERA_FAIL \r\n");
}


/* DCMI init function */
static void MX_DCMI_Init(void)
{

  hdcmi.Instance = DCMI;
  hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;
  hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_RISING;
  hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_LOW;
  hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_LOW;
  hdcmi.Init.CaptureRate = DCMI_CR_ALL_FRAME;
  hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
  hdcmi.Init.JPEGMode = DCMI_JPEG_ENABLE;
  hdcmi.Init.ByteSelectMode = DCMI_BSM_ALL;
  hdcmi.Init.ByteSelectStart = DCMI_OEBS_ODD;
  hdcmi.Init.LineSelectMode = DCMI_LSM_ALL;
  hdcmi.Init.LineSelectStart = DCMI_OELS_ODD;
        HAL_DCMI_MspInit(&hdcmi);
  if (HAL_DCMI_Init(&hdcmi) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

/* DMA2D init function */
static void MX_DMA2D_Init(void)
{

  hdma2d.Instance = DMA2D;
  hdma2d.Init.Mode = DMA2D_M2M;
  hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB565;
  hdma2d.Init.OutputOffset = 0;
        hdma2d.Init.RedBlueSwap   = DMA2D_RB_REGULAR;      /* No R&B swap for the output image */
  hdma2d.Init.AlphaInverted = DMA2D_REGULAR_ALPHA;   /* No alpha inversion for the output image */

        
        /* DMA2D Callbacks Configuration */
  hdma2d.XferCpltCallback  = TransferComplete;
  hdma2d.XferErrorCallback = TransferError;
        
  hdma2d.LayerCfg[1].InputOffset = 0;
  hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_RGB565;
  hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
  hdma2d.LayerCfg[1].InputAlpha = 0xFF;
  hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA;
  hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR;
  if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}


/**
  * Enable DMA controller clock
  */
static void MX_DMA_Init(void)
{
  /* DMA controller clock enable */
  __HAL_RCC_DMA2_CLK_ENABLE();

  /* DMA interrupt init */
  /* DMA2_Channel6_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA2_Channel6_IRQn, 15, 0);
  HAL_NVIC_EnableIRQ(DMA2_Channel6_IRQn);

}


謝謝

收藏 评论3 发布时间:2018-9-7 22:13

举报

3个回答
feixiang20 回答时间:2018-9-7 22:58:05
打印机没激活?

评分

参与人数 1ST金币 -10 收起 理由
zero99 -10

查看全部评分

frankstm32f 回答时间:2018-9-7 23:23:53
請問打印機沒有激活是什麼意思
枫叶-400015 回答时间:2019-1-11 23:52:27
亲,搞定没,我也在整
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版