81 lines
2.2 KiB
C++
Executable File
81 lines
2.2 KiB
C++
Executable File
/*
|
|
* This file is for ov2640 camera
|
|
*/
|
|
|
|
#include "ov2640.h"
|
|
#include "bsp.h"
|
|
#include "delay.h"
|
|
//#include "i2c.h"
|
|
//#include "uart.h"
|
|
#include <stdio.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include "prepherials.h"
|
|
|
|
#define PICTURE_BUFFER_SIZE 60000
|
|
uint32_t picture[PICTURE_BUFFER_SIZE];
|
|
|
|
|
|
//void usart_event_handler(uart_s *usart);
|
|
|
|
int main() {
|
|
system_init(); // init_old for stm32 chip
|
|
setup_prepherials();
|
|
|
|
pe.init(9, AF, 1); // PE9 ------> TIM1_CH1 for camera clock
|
|
pa.init(USART1_TX_Pin, AF, 7); // PA9 ------> USART1_TX
|
|
pa.init(USART1_RX_Pin, AF, 7); // PA10 ------> USART1_RX
|
|
pg.init(13, AF, 4, OPEN_DRAIN, LL_PULLUP); // PG13 ------> I2C1_SDA
|
|
pg.init(14, AF, 4, OPEN_DRAIN, LL_PULLUP); // PG14 ------> I2C1_SCL
|
|
dcmi_gpio_setup();
|
|
|
|
|
|
tim1.init_default();
|
|
tim1.set_pwm(CH1, 4, 4);
|
|
tim1.enable_output(CH1);
|
|
usart1.init();
|
|
|
|
i2c1.i2c_init(&i2c_init_default); // i2c1 init_old
|
|
|
|
ov2640_start();
|
|
|
|
|
|
if (dma10.init(86,
|
|
DMA_DATA_WIDTH_32_BITS, DMA_DATA_WIDTH_32_BITS,
|
|
DMA_ADDR_FIX, DMA_ADDR_INC,
|
|
DMA_TYPE_PREPHERIAL, DMA_TYPE_MEMORY, 4) != HAL_OK)
|
|
while (1);
|
|
|
|
|
|
// enable(dcmi_p);
|
|
if (dma10.dma_start((uint32_t) DCMI->DR, (uint32_t) picture, 2 * PICTURE_BUFFER_SIZE) != HAL_OK)
|
|
printf("dma start error\n");
|
|
|
|
while (1) {
|
|
// enable(dcmi_p);
|
|
dcmi.init_old();
|
|
dcmi.enable();
|
|
dcmi.capture_enable();
|
|
delay_s(5, true); // wait for picture to be captured then stop dma
|
|
// dma_stop(dcmi_dma);
|
|
// disable(dcmi_p);
|
|
uint8_t *tmp = (uint8_t *) picture;
|
|
uint32_t i = 0;
|
|
for (i = 0; i < 4 * PICTURE_BUFFER_SIZE - 1; i++) {
|
|
if (tmp[i] == 0xff && tmp[i + 1] == 0xd9) {
|
|
printf("%lu\n", i);
|
|
break;
|
|
}
|
|
}
|
|
if (i == 4 * PICTURE_BUFFER_SIZE - 1)
|
|
i = 0;
|
|
// if (uart_send_massive(usart1_p, (uint8_t *) picture, i + 5) != HAL_OK)
|
|
// printf("no enough space in uart buffer\n");
|
|
memset(picture, 0, sizeof(picture));
|
|
// delay_s(2, true);
|
|
printf("%lu\n", i);
|
|
}
|
|
}
|
|
|