硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1282|回复: 0
收起左侧

[emWin] emWin实现摄像头图像动态更新的关键说明

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115834
QQ
发表于 2022-1-10 01:04:41 | 显示全部楼层 |阅读模式

完整例子下(第56章及其配套例子):
https://www.armbbs.cn/forum.php?mod=viewthread&tid=98429

实现框图:
QQ截图20220110010311.png

摄像头传输完成中断发消息:
  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: CAM_Stop
  4. *        功能说明: 停止DMA和DCMI
  5. *        形    参: 无
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. #include "MainTask.h"
  10. void CAM_Stop(void)
  11. {
  12.         HAL_DCMI_Stop(&hdcmi);
  13. }

  14. void DMA1_Stream7_IRQHandler(void)
  15. {
  16.         HAL_DMA_IRQHandler(&hdma_dcmi);
  17. }

  18. void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
  19. {
  20.         /* 关闭摄像 */
  21.         CAM_Stop();
  22.     WM_SendMessageNoPara(hWinMainTask, MSG_CAMERA);
  23.         g_tCam.CaptureOk = 1;                /* 表示DMA传输结束 */
  24. }
复制代码


窗口回调函数处理:
  1. *********************************************************************************************************
  2. *        函 数 名: _cbDialog
  3. *        功能说明: 对话框回调函数               
  4. *        形    参: pMsg  回调参数
  5. *        返 回 值: 无
  6. *********************************************************************************************************
  7. */
  8. static void _cbDialog(WM_MESSAGE * pMsg)
  9. {
  10.         static  WM_HTIMER hTimerCAMERA;

  11.         switch (pMsg->MsgId)
  12.         {
  13.                 /* 接收到摄像头数据 */
  14.                 case MSG_CAMERA:
  15.                         hTimerCAMERA = WM_CreateTimer(pMsg->hWin, ID_TimerCAMERA, 2, 0);        
  16.                         break;
  17.                
  18.                 case WM_TIMER:
  19.                         /* 删除定时器 */
  20.                         WM_DeleteTimer(hTimerCAMERA);
  21.                
  22.                         /* 选择操作窗口 */
  23.                         WM_SelectWindow(hWinMainTask);
  24.                
  25.                         /* Cache Clean和无效化 */
  26.                         SCB_CleanInvalidateDCache();
  27.                
  28.                         /* 绘制到多缓冲里面 */
  29.                         GUI_MULTIBUF_Begin();
  30.                         //g_tCam.CaptureOk = 0;
  31.                         GUI_MEMDEV_WriteAt(hMem, 0, 0);
  32.                         GUI_MULTIBUF_End();
  33.                
  34.                         WM_SelectWindow(WM_HBKWIN);
  35.                
  36.                         /* 开始下次绘制 */
  37.                         CAM_Start1(uiDispMemAddr);        
  38.                         break;

  39.                 default:
  40.                         WM_DefaultProc(pMsg);
  41.                         break;
  42.         }
  43. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-22 04:34 , Processed in 0.276085 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表