2025-07-23 11:05 PM
Hello,
If DCMIPP parallel mode is selected then CubeMX do not generate HAL_DCMIPP_MspInit function to initialize and enable DCMIPP CLK, pinout, IRQ, there is only weak empty declaration in stm32n6xx_hal_dcmipp.c, without initialization settings nothing works...
I do not checked other modes.
2025-07-24 6:13 AM
Maybe it helps, I created HAL_DCMIPP_MspInit initialization settings, now DCMIPP is working, adjust by you HW.
/* USER CODE BEGIN 4 */
void HAL_DCMIPP_MspInit(DCMIPP_HandleTypeDef *hdcmipp) {
GPIO_InitTypeDef GPIO_InitStruct = { 0 };
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = { 0 };
//if (hdcmi->Instance == DCMIPP) {
__HAL_RCC_DCMIPP_CLK_ENABLE();
__HAL_RCC_DCMIPP_FORCE_RESET();
__HAL_RCC_DCMIPP_RELEASE_RESET();
HAL_NVIC_SetPriority(DCMIPP_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(DCMIPP_IRQn);
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_DCMIPP;
PeriphClkInitStruct.DcmippClockSelection = RCC_DCMIPPCLKSOURCE_IC17;
PeriphClkInitStruct.ICSelection[RCC_IC17].ClockSelection = RCC_ICCLKSOURCE_PLL3;
PeriphClkInitStruct.ICSelection[RCC_IC17].ClockDivider = 4;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
Error_Handler();
}
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPION_CLK_ENABLE();
/**DCMI GPIO Configuration
PF1 ------> DCMI_D7
PA1 ------> DCMI_D0
PG3 ------> DCMI_HSYNC
PG15 ------> DCMI_D4
PA10 ------> DCMI_D1
PG1 ------> DCMI_PIXCLK
PG10 ------> DCMI_D2
PG2 ------> DCMI_D6
PB4(NJTRST) ------> DCMI_VSYNC
PN9 ------> DCMI_D5
PA4 ------> DCMI_D3
*/
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF9_DCMIPP;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_10 | GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF9_DCMIPP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_3 | GPIO_PIN_15 | GPIO_PIN_1 | GPIO_PIN_10 | GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF9_DCMIPP;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF9_DCMIPP;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF10_DCMIPP;
HAL_GPIO_Init(GPION, &GPIO_InitStruct);
}