STM32H750VBT6 DCMI USART
使用 STM32H750VBT6 通过 DCMI 驱动 OV2640,获取 JPEG 数据,然后用 USART 发送到 PC。
设备:
Device Name | Note |
---|---|
STM32H750VBT6 | YD-STM32VBT6 Core Board |
OV2640 | OV2640 Module |
CH340 | USB-Serial adapter |
Result
DCMI
就是 STM32CubeMX 的 DCMI 默认配置,选择外部同步自动配引脚。
DCMI_PIXCLK | DCMI_HSYNC | DCMI_VSYNC | DCMI_PWDN | DCMI_RESET |
---|---|---|---|---|
PA6 | PA4 | PB7 | PD1 | PD2 |
DCMI_D0 | DCMI_D1 | DCMI_D2 | DCMI_D3 | DCMI_D4 |
PC6 | PC7 | PC8 | PC9 | PE4 |
DCMI_D5 | DCMI_D6 | DCMI_D7 | ||
PD3 | PE5 | PE6 |
DCMI param
DCMI NVIC
DCMI DMA
USART
使用的是 USAR1
USART Param
USART NVIC
USART DMA
Core Code
/* USER CODE BEGIN PM */
#define JPEG_BUFFER_LENGTH 10*1024/4
#define USART_BUFFER_LENGTH JPEG_BUFFER_LENGTH*4
#define JPEG_BUFFER_NUM 2
/* USER CODE END PM */
......
/* USER CODE BEGIN PV */
uint32_t jpeg_buffer[JPEG_BUFFER_NUM][JPEG_BUFFER_LENGTH] = { 0 };
uint32_t *pjpeg_buffer = jpeg_buffer[0];
__IO uint8_t jpeg_new_frame = 0;
uint8_t *pusart_buffer = (uint8_t*) jpeg_buffer[1];
/* USER CODE END PV */
int main(void) {
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MPU Configuration--------------------------------------------------------*/
MPU_Config();
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
MX_DCMI_Init();
/* USER CODE BEGIN 2 */
OV2640_Init();
HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_CONTINUOUS, (uint32_t) pjpeg_buffer,
JPEG_BUFFER_LENGTH);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1) {
if (jpeg_new_frame) {
uint8_t *ptemp_buffer = (uint8_t*) jpeg_buffer[0];
memcpy(pusart_buffer, ptemp_buffer, USART_BUFFER_LENGTH);
HAL_UART_Transmit_DMA(&huart1, pusart_buffer, USART_BUFFER_LENGTH);
jpeg_new_frame = 0;
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
/* USER CODE BEGIN 4 */
void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi) {
jpeg_new_frame = 1;
}
/* USER CODE END 4 */