This repository has been archived on 2024-05-28. You can view files and clone it, but cannot push or open issues or pull requests.
2023-11-14 16:25:09 -05:00

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);
}
}