|
完整例子下(第56章及其配套例子):
https://www.armbbs.cn/forum.php?mod=viewthread&tid=98429
实现框图:
摄像头传输完成中断发消息:
- /*
- *********************************************************************************************************
- * 函 数 名: CAM_Stop
- * 功能说明: 停止DMA和DCMI
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- #include "MainTask.h"
- void CAM_Stop(void)
- {
- HAL_DCMI_Stop(&hdcmi);
- }
- void DMA1_Stream7_IRQHandler(void)
- {
- HAL_DMA_IRQHandler(&hdma_dcmi);
- }
- void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
- {
- /* 关闭摄像 */
- CAM_Stop();
- WM_SendMessageNoPara(hWinMainTask, MSG_CAMERA);
- g_tCam.CaptureOk = 1; /* 表示DMA传输结束 */
- }
复制代码
窗口回调函数处理:
- *********************************************************************************************************
- * 函 数 名: _cbDialog
- * 功能说明: 对话框回调函数
- * 形 参: pMsg 回调参数
- * 返 回 值: 无
- *********************************************************************************************************
- */
- static void _cbDialog(WM_MESSAGE * pMsg)
- {
- static WM_HTIMER hTimerCAMERA;
- switch (pMsg->MsgId)
- {
- /* 接收到摄像头数据 */
- case MSG_CAMERA:
- hTimerCAMERA = WM_CreateTimer(pMsg->hWin, ID_TimerCAMERA, 2, 0);
- break;
-
- case WM_TIMER:
- /* 删除定时器 */
- WM_DeleteTimer(hTimerCAMERA);
-
- /* 选择操作窗口 */
- WM_SelectWindow(hWinMainTask);
-
- /* Cache Clean和无效化 */
- SCB_CleanInvalidateDCache();
-
- /* 绘制到多缓冲里面 */
- GUI_MULTIBUF_Begin();
- //g_tCam.CaptureOk = 0;
- GUI_MEMDEV_WriteAt(hMem, 0, 0);
- GUI_MULTIBUF_End();
-
- WM_SelectWindow(WM_HBKWIN);
-
- /* 开始下次绘制 */
- CAM_Start1(uiDispMemAddr);
- break;
- default:
- WM_DefaultProc(pMsg);
- break;
- }
- }
复制代码
|
|