1. 串口怎么发送数组
假定乐的textbox里就是20 13 04 15这种格式的,用这个函数转为byte数组发出去就行了
public static byte[] HexStringToByteArray(string s){
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
return buffer;
}
2. 串口发送数组出问题
HAL_UART_RECEIVE (&HAL串口句柄,数组地址,接收字符数(2) ,最长等待时间);
这种?
执行此句之后,线程会阻塞,时间到之前收到2个字符,就返回ok, 没收到或收到一个就返回超时(还有其他返回,都不对),ok字符就在数组了。
缺点是你要知道,大概什么时候会收到(比如说询问,答复),不然只能一直卡这。或设个超时不断执行这句,但有可能运气不好一直收不完整。
要不就中断吧,记得配置。
HAL_UART_RECEIVE_IT (&HAL串口句柄,数组地址,接收字符数(2) );
执行这句之后,会立刻返回,然后执行后续语句。在收到2个字符之后,字符会存在数组里,并执行“收完回调”(要自己补充,以_it.c那文件中的入口跟踪下就知道是什么形式了,是个_weak修饰的,要自己重写掉)用来通知你收到,或者判断对不对。当然如果在不合适的时间启动,可能会一直收不到,或者收到2个但是错位了,如不能确定,只好改一次收一个就回调判断一下了,自己填入数组了。
再有就有Dma了,直接将串口指向一个DMA,收到两个产生DMA中断再回调。和上面差不多情况。不过两个数据用Dma也有点浪费。
不用Hal的话,就是一直查看有没收到,收到就填到数组。或者等串口中断了,再看下是否是收到中断,然后填入数组返回。
3. 串口发送数组初始乱码
解决方法:
1、把所有的中文转为UTF-8编码(本身是utf8的话无须转)
$data="JSON中文";
$newData=iconv("GB2312","UTF-8//IGNORE",$data);
2、把中文的urlencode一下
$testJSON=array('name'=>'中文字符串','value'=>'test');
//echo json_encode($testJSON);
foreach ( $testJSON as $key => $value ) {
$testJSON[$key] = urlencode ( $value );
}
3、然后json_encode之后再urldecode一下转回来
$test_json_str = json_encode ($testJSON )
echo urldecode ($test_json_str);
查看输出结果为:
{“name”:”中文字符串”,”value”:”test”}
这样可以很好的解决中文JSON乱码问题。
4. 串口发送数组数据程序
先用sscanf或swscanf把字符串转换成整型,再赋值给一个double类型变量。不理解赋值给某个数组是什么意思。
5. 串口发送数组数据
7E是通知下位机的指令吗?在一个循环中不断的进行发送,读取数据,你的程序这样写不行的,应该是发送指令之后,不断查询缓存区字节数,够数了之后才去读出来!
6. 串口发送数组的代码
接收数组也可以定义成不定长度的,没有想要寻找你要的字符串可以用strstr 函数,如果想清零可以用memset函数全部赋值为0
7. 串口发送数组函数
添加引用:microsoft.visualbasic(是c#代码,只是需要引用下。。)
用以下遍历serialportnames,获得所有的串口
microsoft.visualbasic.devices.computerpc=newmicrosoft.visualbasic.devices.computer();
foreach(stringsinpc.ports.serialportnames)
{
this.combobox1.items.add(s);
}
然后对应显示的串口名称comname,获取操作对象。就可以对这个串口进行打开了:
system.io.ports.serialportcom=newsystem.io.ports.serialport(comname);
com.open();
然后可以对串口写数据
向串口发送数据:
com.writeline(this.textbox1.text);
也可以写byte数组
com.write(barray,0,5);//是指写byte数组barray的,从0开始的5个byte
也可以接受数据:
com.readline()
也可以读byte
com.readbyte();
最后就是关闭了:
com.close();
另外将16进制string转byte
byteb=convert.tobyte("1a",16);
8. 串口怎么发送数组信息
方法/步骤1
1
打开Microsoft Visual Studio 2010, 新建名字为【串口连接】的程序。
2
在新程序界面空白窗口上放置合适的控件:包括,
显示操作流程和串口接收数据的textbox控件;
用于发送数据的【发送】button按钮;
用于输入发送数据的【发送】textbox文本框。
3
添加变量:
新增串口、缓存变量。
4
点击窗体,在代码列表中找到【load】,双击进入代码编辑界面
5
添加程序load时的代码
初始化串口参数,包括端口、波特率等,
连接串口。
6
编辑串口连接类:
如果串口已连接,提示连接成功,
如果连接失败则程序退出。
7
添加timerReadCom定时接收串口信息
添加记录缓存数量的变量;
声明一个临时数组存储当前来的串口数据;
读取缓冲数据;
清除字符串构造器的内容;
直接按ASCII规则转换成字符串;
在界面中显示接收到的串口信息;
如果接收出现错误,则提示错误信息。
8
添加【发送】按钮代码
获取要发送的数据,并添加回车符;
使用串口发送数据;
如果发送出现错误,则提示错误信息。
9
生成exe文件进行测试,
程序启动完成后,日志框中提示串口已连接;
10
输入要发送的数据,点击【发送】,可以将数据发送给串口。
11
收到串口数据后,在日志框中会提示新数据。
9. 串口怎么发送数组数据
可以通过程序把数组中的字符输出到终端,或者通过串口发送到电脑或者其它设备的串口。也可以通过程序把数组保存到存储器里。