在做项目的时候需要实现这样一个功能,在网上没有找到很好的答案,突然有一天误打误撞实现了。这里记录一下,方便大家也能够实现。
1、单片机使用模块:HC-05蓝牙模块;
2、蓝牙通信其实也是利用了串口,所以这里先介绍一下对串口的读写:
3、主要使用API:CreateFile(),WriteFile(),ReadFile()。
(这里提供对串口进行读写操作的函数定义,可直接移植)
# ifndef __uart_
#define __uart_
#include
#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
#define ZeroMemory RtlZeroMemory
BOOL Write(char *write_data, DWORD contentLen, DCB &dcb);
BOOL Read(char *read_data, DCB &dcb);
void DCB_init(DCB &dcb);
#endif // !__uart_
#include "uart.h"
#include
void DCB_init(DCB &dcb)
{
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = 1;
}
BOOL Write(char *write_data, DWORD contentLen,DCB &dcb)
{
HANDLE hcom;
char *tmpBuf;
DWORD dwBytesWrite = 0;
int dwBytesToWrite;
hcom = CreateFile(L"COM6", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hcom == INVALID_HANDLE_VALUE)
{
printf("create file error!\n");
CloseHandle(hcom);
return FALSE;
}
SetupComm(hcom, 1024, 1024);
GetCommState(hcom, &dcb);
SetCommState(hcom, &dcb);
dwBytesToWrite = contentLen;
dwBytesWrite = 0;
tmpBuf = write_data;
do { //循环写文件,确保完整的文件被写入
WriteFile(hcom, tmpBuf, dwBytesToWrite, &dwBytesWrite, NULL);
dwBytesToWrite -= dwBytesWrite;
tmpBuf += dwBytesWrite;
} while (dwBytesToWrite > 0);
if (hcom != INVALID_HANDLE_VALUE)
{
CloseHandle(hcom);
hcom = INVALID_HANDLE_VALUE;
}
return TRUE;
}
BOOL Read(char *read_data,DCB &dcb)
{
HANDLE hcom;
DWORD fileSize;
char *buffer;
DWORD dwBytesRead, dwBytesToRead, tmpLen;
hcom = CreateFile(L"COM5", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hcom == INVALID_HANDLE_VALUE)
{
printf("open file error!\n");
CloseHandle(hcom);
return FALSE;
}
fileSize = GetFileSize(hcom, NULL); //得到文件的大小
buffer = (char *)malloc(fileSize);
ZeroMemory(buffer, fileSize);
dwBytesToRead = fileSize;
dwBytesRead = 0;
read_data = buffer;
do { //循环读文件,确保读出完整的文件
ReadFile(hcom, read_data, dwBytesToRead, &dwBytesRead, NULL);
if (dwBytesRead == 0)
break;
dwBytesToRead -= dwBytesRead;
read_data += dwBytesRead;
} while (dwBytesToRead > 0);
// TODO 处理读到的数据 buffer
free(buffer);
CloseHandle(hcom);
return TRUE;
}
2、勾选下面箭头指向的选项
3、点击添加
4、设置一个传入和传出的虚拟串口
最后记得设置的串口要与上面代码中CreateFile指定的串口相符!
希望对读者有所帮助,喜欢的话可以关注一下我的公众号,我会把学习笔记发在上面,大家可以一起共同学习!