通过串口传输比特流

52视图(30天)
便雅悯
便雅悯 2023年5月14日16:27
评论道: 沃尔特·罗伯森 2023年5月15日在三点半结束
嗨,Matlab enthusiats,
我目前想发送数据(从matlab计算)通过计算机的串口板用小微控制器。串行通信的工作原理,但我第一次想把简单的数字从浮到定点数字单片机处理。转换到定点工作但我想matlab想要发送数据的精确变量写命令中收益率matlab解释数据,并将每一个位转换为数字给定精度的类型。
我的问题是有可能的方式直接传输比特流(砍8位包)通过串行端口?(我知道我可以运行char数组通过for循环和将其转换为一个整数数量和传输,但我想知道是否有一个更简单的解决方案)。
提前谢谢!
问候
便雅悯
PS:我的测试代码:
设备=串口(“COM5”,9600)
q =量化器(“固定”,“最近的”,“饱和”[8]16日);
写(设备,num2bin (q,π),“uint8”);

答案(2)

Shaik
Shaik 2023年5月14日16:46
你好,
%打开串口
设备=串口(“COM5”,9600);
%将浮点数转换为定点
q =量化器(“固定”,“最近的”,“饱和”[8]16日);
fixedData = num2bin (q,π);
uint8 %转换为比特流
(fixedData binaryData =重塑。“1 []);
binaryData = binaryData -' 0 ';%转换字符' 0 ' / ' 1 '数字0/1
binaryData = uint8 (binaryData);
%传输比特流
写入文件(设备,binaryData);
%关闭串口
删除(设备);
清晰的设备;
3评论
沃尔特·罗伯森
沃尔特·罗伯森 2023年5月15日在三点半结束
问题特别有使用定点工具箱创建一个表示的数据。给出的例子是代表π在16位8位的分数。你不能只是int16()一个浮点数和定型uint8 ()。
8[16]的特定情况下您可以使用定型(int16(值* 256)、“uint8”)——尽管这将是一个好主意来检查边界条件,以确保接近边界值相同的方式对待这段代码相比我显示的代码使用num2int ()

登录置评。


沃尔特·罗伯森
沃尔特·罗伯森 2023年5月14日19:26
字节=定型(swapbytes (int16 (num2int (q值))),“uint8”)
注意:这是故意安排的高阶字节第一——例如,36[3]传输顺序对应3 * 256 + 36 = 804。没有swapbytes,默认是使用“内存”秩序,所有支持的cpu和内存中的订单目前“低位优先”,低字节其次是高字节在内存中。万博1manbetx如果你是发送到另一个MATLAB系统重建定点数的意图那么swapbytes增加开销,可能不是技术上必要(但根据我的经验,特别是“大端法”比“低位优先”)更容易调试

s manbetx 845


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!