MFC下对串口的操作以及定时器的调用

最近研究了一下MFC下对串口的操作,测试了一下对设备的读写。

1.打开串口

 1     GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(FALSE);
 2     m_hComm = CreateFile("COM1",
 3         GENERIC_READ | GENERIC_WRITE,
 4         0,
 5         NULL,
 6         OPEN_EXISTING,
 7         0,
 8         NULL);
 9     if (m_hComm == INVALID_HANDLE_VALUE)
10     {
11         TCHAR szBuf[1024];
12         wsprintf(szBuf,_T("打开COM1失败,代码:%d"),GetLastError());
13         return;
14     }

2.设置串口通讯参数

 1 DCB dcb;
 2     memset(&dcb,0,sizeof(dcb));
 3     if (!::GetCommState(m_hComm,&dcb))
 4     {
 5         return;
 6     }
 7     dcb.BaudRate = 9600;
 8     dcb.fParity = 1;
 9     dcb.Parity = 0;
10     dcb.ByteSize = 8;
11     dcb.StopBits = 0;
12     SetCommState(m_hComm,&dcb);
13
14     if (!::SetupComm(m_hComm,1024,1024))
15     {
16         return;
17     }

3.设定超时

 1                    //设定读超时
 2     m_CommTimeOuts.ReadIntervalTimeout=MAXDWORD;
 3     m_CommTimeOuts.ReadTotalTimeoutMultiplier=0;
 4     m_CommTimeOuts.ReadTotalTimeoutConstant=0;
 5     //在读一次输入缓冲区的内容后读操作就立即返回,
 6     //而不管是否读入了要求的字符。
 7     //设定写超时
 8     m_CommTimeOuts.WriteTotalTimeoutMultiplier=100;
 9     m_CommTimeOuts.WriteTotalTimeoutConstant=500;
10     ::SetCommTimeouts(m_hComm,&(m_CommTimeOuts)); //设置超时
11     ::PurgeComm(m_hComm,PURGE_RXCLEAR | PURGE_TXABORT);

4.开一个线程
 1 m_pScanThread = AfxBeginThread(ScanThreadProc,this);

5.设置定时器

快捷键Ctrl+W在MessageMaps添加消息响应

 1 void CTestDAMDADlg::OnTimer(UINT nIDEvent)
 2 {
 3     // TODO: Add your message handler code here and/or call default
 4     //AfxMessageBox("Begin");
 5     switch (nIDEvent)
 6     {
 7         case TIMER_2:
 8             {
 9                 //AfxMessageBox("Begin");
10                 OnButton2v();
11                 WriteComm(LENID,offlen);
12                 KillTimer(TIMER_2);
13                 SetTimer(TIMER_4,5000,NULL);
14                 break;
15             }
16         case TIMER_4:
17             {
18                 OnButton4v();
19                 WriteComm(LENID,offlen);
20                 KillTimer(TIMER_4);
21                 SetTimer(TIMER_6,5000,NULL);
22                 break;
23             }
24         case TIMER_6:
25             {
26                 OnButton6v();
27                 WriteComm(LENID,offlen);
28                 KillTimer(TIMER_6);
29                 SetTimer(TIMER_8,5000,NULL);
30                 break;
31             }
32
33         case TIMER_8:
34             {
35                 OnButton8v();
36                 WriteComm(LENID,offlen);
37                 KillTimer(TIMER_8);
38                 SetTimer(TIMER_10,5000,NULL);
39                 break;
40             }
41         case TIMER_10:
42             {
43                 OnButton10v();
44                 WriteComm(LENID,offlen);
45                 KillTimer(TIMER_10);
46                 SetTimer(TIMER_2,5000,NULL);
47                 break;
48             }
49
50         default:
51             {
52                 OnButton6v();
53                 WriteComm(LENID,offlen);
54                 KillTimer(TIMER_2);
55                 SetTimer(TIMER_4,5000,NULL);
56                 break;
57             }
58     }
59     CDialog::OnTimer(nIDEvent);
60 }

线程里开启定时器
 1 dlg->SetTimer(TIMER_2,5000,NULL);

6.调用写串口操作

 1 BOOL CTestDAMDADlg::WriteComm(BYTE *lpByte,DWORD dwBytes)
 2 {
 3     DWORD dwBytesWrite = 20;
 4     COMSTAT ComStat;
 5     DWORD dwErrorFlags;
 6     BOOL bWriteStat;
 7     ClearCommError(m_hComm,&(dwErrorFlags),&(ComStat));
 8     bWriteStat = WriteFile(m_hComm,lpByte,dwBytes,
 9                             &dwBytesWrite,NULL);
10     if (!bWriteStat)
11     {
12         return FALSE;
13     }
14     else
15     {
16         return TRUE;
17     }
18 }

读串口操作类似,这样就完成了定时对串口的读写操作,测试通过!

MFC下对串口的操作以及定时器的调用

时间: 2024-10-11 16:18:23

MFC下对串口的操作以及定时器的调用的相关文章

Android通过JNI实现与C语言的串口通讯操作蓝牙硬件模块

一直想写一份技术文档,但因为自感能力有限而无从下笔,近期做了个关于Android平台下实现与C语言的通讯来操作蓝牙模块的项目,中间碰到了很多问题,也在网上查了很多资料,在完毕主要功能后.也有一些人在网上问我一些问题.这里写下这篇文档算是一个阶段性的总结. 假设反响好.兴许将会发上Android Stub与新版Android HAL的学习文档. 因为蓝牙模块是串口通讯机制.使用C语言来訪问,而Android的应用层採用Java.无法直接操作硬件.故使用JNI的技术实现主要功能.Android的JN

Linux下的串口编程

打开串口 在Linux系统下,打开串口是通过使用标准的文件打开函数操作的. #include <fcntl.h> /* 以读写的方式打开 */ int fd = open( "/dev/ttyUSB0",O_RDWR); 设置串口 所有对串口的操作都是通过结构体 struct termios 和 几个函数实现的. tcgetattr //获取属性 tcsetattr //设置属性 cfgetispeed //得到输入速度 cfsetispeed //设置输入速度 cfget

【转载】使用Win32API实现Windows下异步串口通讯

一,异步非阻塞串口通讯的优点 读写串行口时,既可以同步执行,也可以重叠(异步)执行.在同步执行时,函数直到操作完成后才返回.这意味着在同步执行时线程会被阻塞,从而导致效率下降.在重叠执行时,即使操作还未完成,调用的函数也会立即返回.费时的I/O操作在后台进行,这样线程就可以干别的事情.例如,线程可以在不同的句柄上同时执行I/O操作,甚至可以在同一句柄上同时进行读写操作."重叠"一词的含义就在于此. 二,异步非阻塞串口通讯的基本原理首先,确定要打开的串口名.波特率.奇偶校验方式.数据位.

UNICODE环境下读写txt文件操作

内容转载自http://blog.sina.com.cn/s/blog_5d2bad130100t0x9.html UNICODE环境下读写txt文件操作 (2011-07-26 17:40:05) 标签: 杂谈 分类: MFC程序设计 自己动手整理了一下,写了几个函数,用于UNICODE环境下对txt文本文件的操作,针对txt文本的ANSIC编码格式,进行了字符编码格式的转换.***********************************************************

MFC下CSocket编程详解

MFC下CSocket编程详解 分类: C/C++2008-03-13 09:01 34465人阅读 评论(34) 收藏 举报 mfc编程socket服务器socketsstream MFC下CSocket编程详解: 1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN): CSocket::Create 初始化(一般写服务器程序都不要用为好,用下面的 CSocket::Socket 初始化) CSocket::Socket初始化 CSocket::SetSockOpt 设置socket

linux下的串口通信

 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但是这个完整的程序里面本来有语法错误的,现在让我改过来了************/ 今天的主角àUART0串口.因此对他的一切操作都和文件的操作一样(涉及到了open,read,write,close等文件的基本操作). 一.Linux下的串口编程又那几部分组成 1.    打开串口 2.    串口初始化 3.    读串口或写串口 4.    关闭串口 二.串口的打开 既然串口在linux中被看作了文件,那么在对文件

Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误

Linux的 C系统调用操作  ,下面我们就来练习下 简单的系统调用操作 read系统调用测试 /************************************************************************* > File Name: read.c > Author: > Mail: > Created Time: Tue 10 Feb 2015 01:23:58 AM PST **********************************

.NET环境下,通过LINQ操作SQLite数据库

//对应数据库中的某个表 [Table(Name = "main.Student")]    public class Student    {        [Column(Name = "StuName", DbType = "varchar(50)")]        public string StuName { get; set; }        [Column(Name = "StuNo", DbType = &

Windows下安装MySQLdb, Python操作MySQL数据库的增删改查

这里的前提是windows上已经安装了MySQL数据库,且配置完毕,能正常建表能操作.在此基础上只需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了,只有1M多.这个有点类似jdbc里的那个jar包. 下载链接:http://sourceforge.net/projects/mysql-python/ , 百度云盘 :http://pan.baidu.com/s/1dDgnfpR 密码:7bna 接着import MySQLdb就能使用了,下面给出测试代码: