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:SPI 问题、代码中可能存在问题。

Guru**** 2581345 points
Other Parts Discussed in Thread: MSP430G2553, ENERGIA

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/607658/msp430g2553-issue-with-spi-problem-may-be-in-the-code

器件型号:MSP430G2553
主题中讨论的其他器件: Energia

我正在尝试在 Mac 上使用 Energia 对 MSP430G2553进行编程。 根据引脚图:SCK 应为引脚7、CS 引脚8、MOSI 引脚15、MISO 引脚14。  

我在板上上传了 Energia 示例代码中的以下代码

问题是、上载 SPI 设置的常规代码(在本例中为大气压力测量)后、当我使用逻辑分析仪进行检查时、会显示时钟和 CS 处于不同位置、波形对我来说毫无意义。 我已经用其他方法测试了示波器、它可以正常工作、因此我认为问题与 Energia 或 digram 有关。  

在我的项目中、我需要通过 SPI 将加速计(来自 STMicroelectronics 的 LIS2DH)连接到 MIC。 那么、您能不能帮助我呢?

或者告诉我如何编写代码、或者告诉我是否发生了错误、或者我所说的某些事情对您没有意义。  

非常感谢您的参与

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Edoardo、
    您能否发布示波器屏幕截图和代码、或许还能发布原理图?

    我将仔细检查它并帮助您找到问题的根源。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉、我更改了一些内容。 我为加速计编写了代码(使用 Energia)、但仍然无法正常工作。 基本上、它将 x y 和 z 值显示为0或-1、没有其他变化。 从代码开头的注释和下面两个链接中的原理图中、您可以看到我建立的连接。

    www.google.co.uk/url

    www.st.com/.../en.steval-mki135v1_schematic.pdf


    #include

    /*
    #define DATAOUT 15 //MOSI MSP430G2553引脚15;LIS2DH SDI 引脚21
    #define dataain 14 //mISO MSP430G2553 pin12;LIS2DH SDO pin22
    #define SPICLOCK 13 //SCK MSP430G2553引脚7;LIS2DH SCL 引脚20
    #define CS 8 /CS 引脚8;CS LIS2DH 引脚19、低电平有效、0:启用 SPI
    *

    //寄存器地址:
    CONST int OUT_X_L = 0x28;//X 轴加速度数据
    CONST int OUT_X_H = 0x29;
    CONST int OUT_Y_L = 0x2A;//Y 轴加速度数据
    CONST int OUT_Y_H = 0x2B;
    CONST int OUT_Z_L = 0x2C;//Z 轴加速度数据
    CONST int OUT_Z_H = 0x2D;

    INT CS = 8;

    int readRegister (byte x){
    int r=0;
    字节 b = x|(0b10000000);

    digitalWrite (CS、low);
    spi.transfer (b);
    R = SPI.transfer (0x00);
    digitalWrite (CS、HIGH);
    返回 r;



    int readval (int x){
    int val;
    字节 h、l;

    如果(x=1){
    L = readRegister (OUT_X_L);
    H = readRegister (OUT_X_H);

    如果(x = 2){
    L = readRegister (OUT_Y_L);
    H = readRegister (OUT_Y_H);

    如果(x = 3){
    L = readRegister (OUT_Z_L);
    H = readRegister (OUT_Z_H);

    Val =(h<8)| l;
    返回 val;



    void setup()

    延迟(500);
    引脚模式(CS、输出);

    SPI.begin();
    //我们的器件需要发送数据 MSB
    //(最高有效字节)首先、第23页
    SPI.setBitOrder(MSBFIRST);
    //时钟空闲高电平并且数据移入和移出
    //在数据时钟信号的上升沿,第23页
    SPI.setDataMode(SPI_MODE3);
    SPI.setClockDivider(SPI_CLOCK_DIV2);
    //创建串行连接以在终端上显示数据。
    Serial.begin(9600);
    延迟(500);


    void loop()

    serial.print (" x =");
    serial.print (readval (1));
    serial.print (" y =");
    serial.print (readval (2));
    serial.print (" z =");
    serial.println (readval (3));
    延迟(500);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用示波器、您是否在 SCK 线路上看到时钟? 我看到您在代码中选择了引脚13、但如果我没有弄错、Energia 库将引脚13用于 SCK。

    您是否在 MISO 和 MOSI 线路上看到任何数据? 如果是、哪些数据以及在哪些线路上?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 MISO 和 MOSI 中看不到 clk、也没有数据。
    我已根据此方法将 SCK 连接到引脚7 (P 1.5)。
    Energia.nu/.../

    是否有任何问题的想法?

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

    Edoardo、

    我使用逻辑分析仪运行您的代码、一切看起来都正常、我看到6个地址和响应帧(没有数据、因为我没有您的传感器)。 请参见下面的。 如果您的放大非常远、这些交流可能很容易错过...

    是否确定连接正确?

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