急求!c++关于16进制的串口发送问题。

wereeeeeee 2017-08-15 08:30:21
小弟在某宝买了数字舵机及其控制板,利用usb转ttl串口控制,根据卖家提供的协议小弟在vs2010编写了一个简单的c++的16进制串口发送程序如下。
#include<Windows.h>
#include<iostream>
int main()
{
HANDLE hcom;

hcom=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if(hcom==INVALID_HANDLE_VALUE)
{
return -1;
}
SetupComm(hcom,1024,1024);
DCB dcb;

GetCommState(hcom,&dcb);
dcb.BaudRate=9600;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=1;
SetCommState(hcom,&dcb);

char data[]={0x55,0x55,0x08,0x03,0x01,0xE8,0x03,0x01,0xD0,0x07};

DWORD dwWrittenLen=0;

if(!WriteFile(hcom,data,8,&dwWrittenLen,NULL))
{
return -1;
}
CloseHandle(hcom);
return 0;

}
利用此发送程序发送无法控制舵机
而选择串口调试工具发送数据却可以达到控制效果
如下图所示

两者发送的数据都是根据协议来的,都是正确的,相关设置一样为什么会出现在vs2010上无法达到串口控制效果。希望得到各位解答
...全文
1214 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
简单生活JYBH 2020-08-24
  • 打赏
  • 举报
回复
发送数据长度和数据不一致吧
赵4老师 2017-08-16
  • 打赏
  • 举报
回复
推荐使用portmon软件辅助调试串口通信程序。
赵4老师 2017-08-16
  • 打赏
  • 举报
回复
小心驶得万年船。
sevancheng 2017-08-16
  • 打赏
  • 举报
回复
if(!WriteFile(hcom,data,8,&dwWrittenLen,NULL)) 应该是10个字节吧 if(!WriteFile(hcom,data,10,&dwWrittenLen,NULL)) 试试看
wereeeeeee 2017-08-16
  • 打赏
  • 举报
回复
串口助手上面是已经勾选16进制的。所以只发了数据部分。在vs2010上加了0x。串口助手和vs2010发送数据不同,但都是满足协议要求写的。
zgl7903 2017-08-16
  • 打赏
  • 举报
回复
程序发的数据和串口的数据不一样,
wereeeeeee 2017-08-16
  • 打赏
  • 举报
回复
指令都是按照他们的协议写的,下图是他们协议截图,按控制板的反馈来说,确实应该数据发错了。这样写char data[]={0x55,0x55,0x08,0x03,0x01,0xE8,0x03,0x01,0xD0,0x07};
是有问题的吗?
woshi_hujunjun 2017-08-16
  • 打赏
  • 举报
回复
把接收线和发送线短接,就好了,看看发出去的是什么数据
worldy 2017-08-16
  • 打赏
  • 举报
回复
0x55,0x55,0x08,0x03,0x01,0xE8,0x03,0x01,0xD0,0x07}; 你这个数据和串口里的数据都不一样
wereeeeeee 2017-08-16
  • 打赏
  • 举报
回复
各位,在vs2010上的程序编译出现上面这个警告信息。
gd6321374 2017-08-15
  • 打赏
  • 举报
回复
你确定,你自己写的程序,发出的16进制数据是正确的???? 从编辑框中,获取的是字符串,你确定,你自己转换后的数据是对的????
wereeeeeee 2017-08-15
  • 打赏
  • 举报
回复
无法达到控制效果的意思,舵机没有任何响应,usb转ttL模块上显示已有数据发出。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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