реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F407 + камера OV2640
Влад Р.
сообщение Dec 9 2015, 14:43
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511



Здравствуйте!
Использую контроллер STM32F407, захват картинки по DCMI. Пытаюсь настроить камеру в разрешение 640х480. Кто-нибудь может поделится настройками камеры?
Go to the top of the page
 
+Quote Post
ksv198
сообщение Dec 11 2015, 07:17
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Цитата(Влад Р. @ Dec 9 2015, 17:43) *
Здравствуйте! Использую контроллер STM32F407, захват картинки по DCMI. Пытаюсь настроить камеру в разрешение 640х480. Кто-нибудь может поделится настройками камеры?


Добрый день!

Вот: Прикрепленный файл  camera.zip ( 6.11 килобайт ) Кол-во скачиваний: 101
, пробуйте. У меня контроллер STM32F427 с внешней оперативкой.

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

Go to the top of the page
 
+Quote Post
Влад Р.
сообщение Dec 11 2015, 13:02
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511



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

Вот: Прикрепленный файл  camera.zip ( 6.11 килобайт ) Кол-во скачиваний: 101
, пробуйте. У меня контроллер STM32F427 с внешней оперативкой.

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


Спасибо, сейчас посмотрю. А в чем была проблема в получении бОльших разрешений?
Не могли бы Вы скинуть еще код снятия кадра?

Сообщение отредактировал Влад Р. - Dec 11 2015, 14:09
Go to the top of the page
 
+Quote Post
ksv198
сообщение Dec 11 2015, 16:52
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



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


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

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

Как это сделано можно посмотреть в примерах от ST, мне из проекта тяжело сейчас вытянуть только эту часть.
Go to the top of the page
 
+Quote Post
Влад Р.
сообщение Dec 11 2015, 17:59
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511



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

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


А можно только настройки DMA? Основной вопрос: какой установливать размер буфера? Вроде больше 65535 нельзя, а нужно.
Go to the top of the page
 
+Quote Post
ksv198
сообщение Dec 14 2015, 09:53
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Цитата(Влад Р. @ 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);


Go to the top of the page
 
+Quote Post
Влад Р.
сообщение Dec 14 2015, 19:26
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511



Доброго времени дня!

Разрешите еще пару вопросов. Если передавать данные в циклическом режиме по 8К слов, как задано в коде (если я все правильно понял), то после окончания передачи, данные начнут записываться по тому же адресу в памяти. Чтобы это предотвратить должна быть какая-то обработка в прерывании DMA, типа перезадать DMA_InitStructure.DMA_Memory0BaseAddr, так? И как, в случае циклической передачи отследить завершение передачи кадра? Счетчик переданных данных в прерывании DMA?

Сообщение отредактировал IgorKossak - Dec 15 2015, 11:56
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
Влад Р.
сообщение Dec 18 2015, 17:59
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511



В режиме опроса регистров DCMI удалось снять картинку 640x480. Хочется DMA и за счет этого постараться еще увеличить разрешение. Кто-то может поделится полным проектом DCMI+DMA в идеале для формата RGB565 (2 байта на пиксель, 2 пикселя в DCMI_DR)
!!! нужно пердать БОЛЕЕ 65535 элементов по DMA !!!
Не знаю как корректно это сделать.
PS кадр сохраняю во внешнюю SRAM

Сообщение отредактировал Влад Р. - Dec 18 2015, 20:22
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 02:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01429 секунд с 7
ELECTRONIX ©2004-2016