Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F407 + камера OV2640
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Влад Р.
Здравствуйте!
Использую контроллер STM32F407, захват картинки по DCMI. Пытаюсь настроить камеру в разрешение 640х480. Кто-нибудь может поделится настройками камеры?
ksv198
Цитата(Влад Р. @ Dec 9 2015, 17:43) *
Здравствуйте! Использую контроллер STM32F407, захват картинки по DCMI. Пытаюсь настроить камеру в разрешение 640х480. Кто-нибудь может поделится настройками камеры?


Добрый день!

Вот: Нажмите для просмотра прикрепленного файла , пробуйте. У меня контроллер STM32F427 с внешней оперативкой.

Максимально, что удалось с OV2640 получить, это 800х600 jpeg потоком и 1072х768 снапшот.

Влад Р.
Цитата(ksv198 @ Dec 11 2015, 09:17) *
Добрый день!

Вот: Нажмите для просмотра прикрепленного файла , пробуйте. У меня контроллер STM32F427 с внешней оперативкой.

Максимально, что удалось с OV2640 получить, это 800х600 jpeg потоком и 1072х768 снапшот.


Спасибо, сейчас посмотрю. А в чем была проблема в получении бОльших разрешений?
Не могли бы Вы скинуть еще код снятия кадра?
ksv198
Цитата(Влад Р. @ Dec 11 2015, 16:02) *
Спасибо, сейчас посмотрю. А в чем была проблема в получении бОльших разрешений?
Не могли бы Вы скинуть еще код снятия кадра?


Проблемы не было, как не было и изображения :-)
При попытке установить разрешение больше чем 1024х768 просто не отдаёт камера ничего.
Правда, я работал только с режимом jpeg, возможно в RAW получится, но тут уже будут проблемы со скоростью перелопачивания потока,
меня снапшоты мало интересовали.

Получение кадра несложно:
-настраиваем DCMI для работы с DMA;
-запускаем получение снапшота;

Как это сделано можно посмотреть в примерах от ST, мне из проекта тяжело сейчас вытянуть только эту часть.
Влад Р.
Цитата(ksv198 @ Dec 11 2015, 18:52) *
Получение кадра несложно:
-настраиваем DCMI для работы с DMA;
-запускаем получение снапшота;

Как это сделано можно посмотреть в примерах от ST, мне из проекта тяжело сейчас вытянуть только эту часть.


А можно только настройки DMA? Основной вопрос: какой установливать размер буфера? Вроде больше 65535 нельзя, а нужно.
ksv198
Цитата(Влад Р. @ Dec 11 2015, 20:59) *
А можно только настройки DMA? Основной вопрос: какой установливать размер буфера? Вроде больше 65535 нельзя, а нужно.


Добрый день!

Вот:

CODE


/* DCMI configuration *******************************************************/
DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_SnapShot;//DCMI_CaptureMode_Continuous
//DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_Continuous;
DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware;//DCMI_SynchroMode_Hardware
DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Rising;//DCMI_PCKPolarity_Falling
DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_Low; //DCMI_VSPolarity_High
DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_Low; //DCMI_HSPolarity_High
DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_All_Frame;//DCMI_CaptureRate_All_Frame
DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b;

DCMI_Init(&DCMI_InitStructure);

DCMI_JPEGCmd(ENABLE);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/* DCMI Interrupts config ***************************************************/
DCMI_ITConfig(DCMI_IT_FRAME, ENABLE);

/* Configures the DMA2 to transfer Data from DCMI to the memory ****************/
/* Enable DMA2 clock */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);

/* DMA2 Stream1 Configuration */
DMA_DeInit(DMA2_Stream1);

DMA_InitStructure.DMA_Channel = DMA_Channel_1;
DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS;
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)Jbuff;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize = 1024*8;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

DMA_Init(DMA2_Stream1, &DMA_InitStructure);


Влад Р.
Доброго времени дня!

Разрешите еще пару вопросов. Если передавать данные в циклическом режиме по 8К слов, как задано в коде (если я все правильно понял), то после окончания передачи, данные начнут записываться по тому же адресу в памяти. Чтобы это предотвратить должна быть какая-то обработка в прерывании DMA, типа перезадать DMA_InitStructure.DMA_Memory0BaseAddr, так? И как, в случае циклической передачи отследить завершение передачи кадра? Счетчик переданных данных в прерывании DMA?
Влад Р.
В режиме опроса регистров DCMI удалось снять картинку 640x480. Хочется DMA и за счет этого постараться еще увеличить разрешение. Кто-то может поделится полным проектом DCMI+DMA в идеале для формата RGB565 (2 байта на пиксель, 2 пикселя в DCMI_DR)
!!! нужно пердать БОЛЕЕ 65535 элементов по DMA !!!
Не знаю как корректно это сделать.
PS кадр сохраняю во внешнюю SRAM
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.