激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

Windows 10 ARM64平臺MFC串口程序

 2025-3-26 17:06:13     作者:楊陽     聯系作者    

Windows 10 IoT ARM64平臺除了支持新的UWP框架,也兼容支持老框架MFC。使得用戶在Windows 10 IoT下可以對原MFC工程進行功能升級,不用在新框架下重寫整個工程。熟悉MFC開發的工程師也可以在Windows 10 IoT平臺下繼續使用MFC進行開發。

本文展示MFC串口程序開發,及需要注意的地方。

 1、創建MFC工程 

1.      打開visual studio 2022,點擊“創建新項目”。

2.      選擇篩選條件,語言C++,平臺選擇Windows,應用類型選擇桌面。

3.      選擇“MFC應用”,點擊下一步。

6.png

4.  應用程序類型選擇基于對話框,其它選項默認,創建好工程。

 2、界面設計 

拖動工具欄中控件到設計窗口中,設置好控件屬性,綁定好控件變量名及消息響應函數。此處與傳統MFC程序開發一樣。

 3、串口代碼 

可以參考文章《UWP串口程序開發》,使用新Devices庫查詢串口,打開串口,讀寫串口。本文依舊采用傳統的接口Createfile,WriteFile,ReadFile操作串口。

3.1 查詢串口 

已知串口名,可以直接通過CreateFile打開串口。或者通過API接口進行查詢。

#include <cfgmgr32.h>
#include <propkey.h>
#include <initguid.h>
#include <devpkey.h>
std::wstring devicePath;
devicePath = GetFirstDevice();
Handle serialHandle= CreateFileW(devicePath.c_str(),GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,NULL));
//Handle serialHandle= CreateFileW(L” \\\\?\\ACPI#NXP0113#2#{86e0d1e0-8089-11d0-9ce4-08003e301f73}\\SERCX”,GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,NULL));
 
std::wstring GetFirstDevice ()
{
    ULONG length;
    CONFIGRET cr = CM_Get_Device_Interface_List_SizeW(
            &length,
            const_cast<GUID*>(&GUID_DEVINTERFACE_COMPORT),
            nullptr,        // pDeviceID
            CM_GET_DEVICE_INTERFACE_LIST_PRESENT);
 
    if (cr != CR_SUCCESS) {
        throw wexception(
            L"Failed to get size of device interface list. (cr = 0x%x)",
            cr);
    }
 
    std::vector<WCHAR> buf(length);
    cr = CM_Get_Device_Interface_ListW(
            const_cast<GUID*>(&GUID_DEVINTERFACE_COMPORT),
            nullptr,        // pDeviceID
            buf.data(),
            static_cast<ULONG>(buf.capacity()),
            CM_GET_DEVICE_INTERFACE_LIST_PRESENT);
 
    if (cr != CR_SUCCESS) {
        throw wexception(
            L"Failed to get device interface list. (cr = 0x%x)",
            cr);
    }
 
    return std::wstring(buf.data());
}

3.2 打開串口 

與WINCE不同,Windows 10 IoT需要用FILE_FLAG_OVERLAPPED異步操作模式打開和讀寫串口,如果使用同步操作模式打開串口進行讀寫,讀寫效率會有影響。

HANDLE m_hComm = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 0);

設置串口參數

GetCommState(m_hComm, &dcb);                                  /* 讀取串口的DCB */
dcb.BaudRate = 115200;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = 0;
dcb.fBinary = TRUE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
SetCommState(m_hComm, &dcb);                                  /* 設置串口的DCB */

3.3 讀串口 

異步操作模式需要設置OVERLAPPED

#include <wrl.h>
using namespace Microsoft::WRL::Wrappers;
auto overlapped = OVERLAPPED();
overlapped.hEvent = overlappedEvent.Get();
 
DWORD bytesRead = 0;
if (!ReadFile(
       pDlg->m_hComm,
       reinterpret_cast<BYTE*>(recvBuf),
       1024,
       &bytesRead,
       &overlapped) && (GetLastError() != ERROR_IO_PENDING)) {
 
       DWORD error = GetLastError();
}
 
if (!GetOverlappedResult(
       pDlg->m_hComm,
       &overlapped,
       &bytesRead,
       TRUE)) {
       DWORD error = GetLastError();
}
 
if (bytesRead != 0)
{
       OnCommRecv(pDlg, recvBuf, bytesRead);                 /* 接收成功調用回調函數 */
}

3.4 寫串口 

用異步模式寫串口

auto overlapped = OVERLAPPED();
overlapped.hEvent = overlappedEvent.Get();
 
if (!WriteFile(
       m_hComm,
       psendbuf,
       len,
       &dwactlen,
       &overlapped) && (GetLastError() != ERROR_IO_PENDING)) {
       DWORD error = GetLastError();
}
 
if (!GetOverlappedResult(
       m_hComm,
       &overlapped,
       &dwactlen,
       TRUE)) {
       DWORD error = GetLastError();
}

3.5 串口關閉 

CloseHandle(m_hComm);

3.6 創建timer自動發送 


添加對話框的timer消息響應函數OnTimer

1.      啟動timer

SetTimer(1, m_period, NULL);

2.      退出時關閉timer

KillTimer(1);

 4、調試 

打開Win10 IoT板子上的調試助手。

3.png

選擇工程平臺為ARM64,編譯運行,示例如下。

7.png

需要程序源碼可以聯系英創工程師獲得。

主站蜘蛛池模板: 午夜淫片| 国产青榴社区91精品| 1024免费福利永久观看网站| 日韩毛片| 在线一区国产| 欧美午夜免费毛片a级| 久久久久久久久久鸭| 亚洲免费一区| a级国产视频| 久青草视频在线| 欧美a级影院| 国产成人精品本亚洲| 涩色网| 99riav国产| 国产欧美日韩精品高清二区综合区 | caoporen个人免费公开视频| 日本特黄特色大片免费视频 | 黄色影院在线观看视频| 国产乱色| 久久国产在线视频| 热99re久久精品2久久久| 亚洲影视一区| 91久久亚洲精品一区二区| 中国一级特黄特爽刺激大片| 成人精品一区二区久久久| 国产美女精品视频免费观看| 美国一级大黄大色毛片| 最新激情网站| 精品国产呦系列在线看| 极品色αv影院| 久久综合免费视频| 欧美啪啪毛片一区二区| 日韩伦理一区| 午夜视频在线观看视频| 亚洲国产精品久久久久久网站| 九九视频在线看精品| 久草毛片| 久久国产免费观看| 老司机观看精品一区二区| 亚洲精品色一区色二区色三区| 成人性生活免费视频|