/* * This file is for ov2640 camera */ #include "ov2640.h" #include "bsp.h" #include "delay.h" //#include "i2c.h" //#include "uart.h" #include #include #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); } }