This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430G2553:MSP430和 Matlab 之间的通信

Guru**** 2253270 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/753232/msp430g2553-communication-between-msp430-and-matlab

器件型号:MSP430G2553

你好
我正在做一些介绍来了解 MSP430的通信方式、我需要使用 MATLAB。
因此、该程序是一个具有电位器的简单 ADC 转换器。 在 CCS 中一切正常、我可以将正确的位传递给 UCA0TXBUF、但在 Matlab 中、我接收到的结果是不同的。

删除(instrfind)%删除打开的端口
清除
关闭
CLC


%%%%%%%%%%%%%% 串行特定属性%%%%%%%%%%%%%%%%%%%%%%%%%%

Dados =串行('COM7');% define serial port object
Dados。InputBufferSize = 2;
Dados。baudrate = 9600;
Dados。DataBits = 8;
Dados。StopBit = 1;
Dados。Timeout = 10;
Pause (0.1)
fopen (Dados)%将串行端口对象连接到器件

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


对于 I = 1:1:1000
、而 Dados.BytesAvailable < Dados.InputBufferSize

结束
价目表= fread (Dados);从器件读取二进制数据的百分比(数值)
暂停(0.001)
%read (obj、Nintdata、'uint16');
aux (1、I)= typecast ([uint8 (valores (1、1))))、uint8 (valores (2、1)]、'uint16
(aux);disp);
%teste = cast (aux (1、i)、'uint16');
disp (aux);
end
delete (instrfind)




我有具有交叉跳接连接器的 REV 1..4

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    需要考虑的一些事项:

    • MSP430侧的波特率、位数/停止位是否正确设置?
    • 如何将 MSP430的 UART 连接到计算机? 是否正确连接了 GND、RX 和 TX? 您是否正在使用电压电平在3.3V 至 RS-232之间转换的适配器(或可能是 USB 适配器)?
    • 您能否使用"putty"等不同软件来建立链接而不是 LabView?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    I m 使用的波特率为9600、位/停止位在两个位置都是正确的。
    即使使用 USB 适配器、我也无法接收到正确的数字、而使用 PuTTy、我也能以 ASCII 格式接收到。
    我怀疑问题来自 MATLAB、因为 UCA0TXBUF 正在按照我的需要发送字节、但 MATLAB 不会转换为正确的值。
    我的问题可能与 USB/调试功能有关?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是以 ASCII 还是二进制格式发送数据?
    如果要以二进制形式发送数据、请注意 Matlab 中使用的字节序。 您必须以 Matlab 要求的相同字节序发送数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。 查看完 Matlab 代码后、我认为您的问题是数据的字节序。 您的解决方案正在修改以下行:

    aux(1,i) = typecast([uint8(valores(1,1)), uint8(valores(2,1))], 'uint16');

    更改为

    aux(1,i) = typecast([uint8(valores(2,1)), uint8(valores(1,1))], 'uint16');



    按照您从 MSP430发送的顺序正确地重新构建数据。 我个人可以这样做:
    *获取 ADC 读数的最高有效字节。 使用 Matlab 命令"typecast"键入转换为 uint16。
    *使用"bitsll" Matlab 命令将其向左移位。
    *获取 ADC 读取的最低有效字节、并使用逻辑 OR 将其添加到 ADC 的16位 MSB 数据中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 CSS 中、我具有以下内容:
    UCA0TXBUF = adcbyte2;//首先发送 MSB
    while (!(IFG2&UCA0TXIFG)); //等待小位以发送值
    UCA0TXBUF = adcbyte1;//发送第二个字节
    while (!(IFG2&UCA0TXIFG)); //等待小位以发送值

    UCA0TXBUF = UCA0RXBUF;
    是否需要插入 FIFO?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Diogo、

    您是否在 Putty 中看到数据正确? 您是发送二进制还是 asscii?

    我会先按预期在 Putty 中正常工作、然后尝试导入 Matlab。

    谢谢、
    JD
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现了问题。 MSP 上的波特率不正确  
     在我校正波特率后、我尝试仅发送"255"和"125"、 这使我能够查看位是如何发送的。

    感谢大家