osSemaphoreId sem_TakePhoto;//收到开始拍照信号量 osSemaphoreId sem_GetPhoto;//接收拍照完成信号量
void StartUartTask(void const * argument) { /* USER CODE BEGIN 5 */ /* Infinite loop */ HAL_UART_Receive_IT(UartHandle, RxTemp, 2); for(;;) { //osDelay(1); if (osSemaphoreWait(osSemaphore , osWaitForever) == osOK) { //HAL_UART_Transmit(UartHandle,RxTemp,1,0XFFFFF); if(RxTemp[0] == 'a' && RxTemp[1] == 'a') { //启用拍照,释放拍照的信号量 ov2640_realseTakePhotoSem(); } memset(RxTemp,0,2); HAL_UART_Receive_IT(UartHandle,RxTemp, 2); } } /* USER CODE END 5 */ }
void StartOV2640Task(void const * argument)//拍照的线程 { for(;;) { if (osSemaphoreWait(sem_TakePhoto , osWaitForever) == osOK)//等待串口释放拍照信号量 { __HAL_DCMI_ENABLE_IT(DCMI_hdcmi, DCMI_IT_FRAME);//使用帧中断 memset((void *)JpegBuffer,0,sizeof(JpegBuffer));//把接收BUF清空 HAL_DCMI_Start_DMA(DCMI_hdcmi, DCMI_MODE_SNAPSHOT,(uint32_t)JpegBuffer, pictureBufferLength);//启动拍照 if(osSemaphoreWait(sem_GetPhoto , osWaitForever) == osOK)//等待DCMI释放一帧图像信号量 { HAL_DCMI_Suspend(DCMI_hdcmi);//拍照完成,挂起DCMI HAL_DCMI_Stop(DCMI_hdcmi);//拍照完成,停止DMA传输 int pictureLength =pictureBufferLength; while(pictureLength > 0)//循环计算出接收的JPEG的大小 { if(JpegBuffer[pictureLength-1] != 0x00000000) { break; } pictureLength--; } pictureLength*=4;//buf是uint32_t,下面发送是uint8_t,所以长度要*4 Uart_Send((uint8_t*)JpegBuffer, pictureLength); } } } }
使用特权
pinglinmomo 发表于 2019-3-17 01:10 楼主,你好,之前那个STM32F446+OV2640采集JPEG的百度云链接失效了,请问可不可以重新分享一下,万分感谢! ...
gygp 发表于 2019-3-18 22:46 在FreeRTOS支持DCMI?
mituzu 发表于 2019-3-18 22:48 是楼主自己开发的这个例程吗?
wangdezhi 发表于 2019-3-18 22:47 JPEG的格式是不是压缩了呢?
发表回复 本版积分规则 回帖后跳转到最后一页
时间类勋章
人才类勋章
发帖类勋章
等级类勋章
144
533
8
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号
很好的资源,学习啦~~