返回首页

单片机串口发送数组(串口怎么发送数组)

来源:www.haichao.net  时间:2022-12-14 20:43   点击:122  编辑:admin   手机版

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. 串口怎么发送数组数据

可以通过程序把数组中的字符输出到终端,或者通过串口发送到电脑或者其它设备的串口。也可以通过程序把数组保存到存储器里。

顶一下
(0)
0%
踩一下
(0)
0%