SerialPort类对于蓝牙串口通信的问题

宁缺毋滥灬 2019-07-12 04:00:41
首先本人基于SerialPort类编写了串口通信,能够打开两个串口的,经虚拟串口与串口调试助手实验没问题,通过串口调试舵机板子也能很好运行,就是完全没有问题。
后来想把串口通信改成蓝牙的,买了蓝牙板子,和电脑配对后,经过他们给的上位机(上位机打开的是串口)运行后也没有一点问题。
照理说,我程序没问题,蓝牙没问题,应该能用啊,然后我遇到第一个问题是,我用我自己编写的程序打开蓝牙串口,发送数据只能发送一次,然后在怎么点发送不出去,CSDN上说是改优先级的问题骂我照着改了,果然能用了。第二个问题又出现了,我点第一次间隔4S发送完两个数据后,在点一次,就是时灵时不灵的,多点几次也能发送,间隔时间也乱了,程序有时候就跑一半。
用串口助手调试的话又没有一点问题。。。。怎么办,不知道哪里出问题了。

放一点伪代码
char cr=13;
Sleep(1);
if(!m_bSerialPortOpended2) return;
UpdateData(TRUE);
CString m_SendMsgOne;
m_SendMsgOne="T1000#0P1000T0#1P1500TO";
m_SendMsgOne=m_SendMsgOne+cr;
m_SerialPort2.WriteToPort((LPCTSTR)m_SendMsgOne);
Sleep(4000);//延时5秒

CString stop;
stop="T1000#0P1500T0#1P1500T0";
stop=stop+cr;
m_SerialPort2.WriteToPort((LPCTSTR)stop);
...全文
424 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
宁缺毋滥灬 2019-08-17
  • 打赏
  • 举报
回复
问题解决了,把所有程序放在ONTIMER中,延时的话就再ontimer中设置循环等待
走好每一步 2019-07-15
  • 打赏
  • 举报
回复
新手不建议去改CSerialPort开源库的程序,你用最新版本就可以了 https://blog.csdn.net/itas109/article/details/84282860 我自己有写了一个例子 https://download.csdn.net/download/tajon1226/11102637
zgl7903 2019-07-15
  • 打赏
  • 举报
回复
宁缺毋滥灬 2019-07-15
  • 打赏
  • 举报
回复
如何编写程序,使一个串口对应一个线程啊,现在的程序是一个串口在SLEEP时,另一个串口也不执行了
zgl7903 2019-07-13
  • 打赏
  • 举报
回复
如果必须要延迟 那建议启动一个后台线程来操作
宁缺毋滥灬 2019-07-12
  • 打赏
  • 举报
回复
这个延迟是必须的而且很重要,不能去掉,换成delay行吗,可能不是这方面的问题
zgl7903 2019-07-12
  • 打赏
  • 举报
回复
Sleep(4000) 不要或尽量短一点, 容易阻塞消息环
宁缺毋滥灬 2019-07-12
  • 打赏
  • 举报
回复
第一次这么改的
m_hEventArray[0] = m_hShutdownEvent; // highest priority
m_hEventArray[1] = m_hWriteEvent;
m_hEventArray[2] = m_ov.hEvent;
后面两个case换个位置
宁缺毋滥灬 2019-07-12
  • 打赏
  • 举报
回复
第一次出现的问题是,打开串口,发送数据一次,然后发不了了;然后关闭串口,再打开串口,又能发一次了

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧