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.

[参考译文] DRV8301:STM32 DRV8301 SPI 通信

Guru**** 2394305 points
Other Parts Discussed in Thread: DRV8301

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1442920/drv8301-stm32-drv8301-spi-communication

器件型号:DRV8301

工具与软件:

大家好、

我有一个关于 DRV8301我试图与驱动器通信以将其置于3 PWM 模式的问题、我没有得到任何响应。

我的 MCU 是一个连接 SPI 端口的 STM32G431CBU。

如果这是一个错误的地方,我在高级抱歉

很好的待遇

Ruben Konings

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

    尊敬的 Ruben:

    SPI 通信调试可能有点棘手、但一个开始的好地方是检查您是否能够读取器件的所有寄存器以及您是否看到数据表中提到的默认值。 您是否能够使用逻辑分析仪发布 SPI 读取?

    请记住 SPI 时序要求以及 SPI 帧要求:

    此致、

    Yara

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

    感谢您的回复、这是逻辑分析仪的源、但我尝试配置 clk、但却没成功。 我真的很难理解我必须使用的 CPol 和这样的 clk 设置。

    反正谢谢。

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

    尊敬的 Ruben:

    是的、看起来 SCLK 可能是个问题、这里是一些来自 SPI 配置的有传感器 TRAP 代码的代码

    void Config_evm_spi(void)
    {
        //Pin Config
        EALLOW;
        // SPI_MOSI
        GPIO_SetupPinOptions(16, GPIO_INPUT, GPIO_ASYNC | GPIO_PULLUP);
        // SPI_MISO
        GPIO_SetupPinOptions(17, GPIO_INPUT, GPIO_ASYNC | GPIO_PULLUP);
        // SPI_CS
        GPIO_SetupPinOptions(56, GPIO_INPUT, GPIO_ASYNC | GPIO_PULLUP);
        // SPI_CLK
        GPIO_SetupPinOptions(57, GPIO_INPUT, GPIO_ASYNC | GPIO_PULLUP);
    
        GPIO_SetupPinMux(16, GPIO_MUX_CPU1, 1);
        GPIO_SetupPinMux(17, GPIO_MUX_CPU1, 1);
        GPIO_SetupPinMux(56, GPIO_MUX_CPU1, 1);
        GPIO_SetupPinMux(57, GPIO_MUX_CPU1, 1);
        EDIS;
    
        EALLOW;
        ClkCfgRegs.LOSPCP.all = 0;
        EDIS;
    
        // Initialize SPI FIFO registers
        SpiaRegs.SPIFFTX.all=0xE040;
        SpiaRegs.SPIFFRX.all=0x2044;
        SpiaRegs.SPIFFCT.all=0x0;
    
        //SPI Settings
        SpiaRegs.SPICCR.bit.SPISWRESET = 0;     //SPI Reset On
        SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;    //SCLK Active High
        SpiaRegs.SPICCR.bit.SPICHAR = 0x7;      //16-bit SPI char
        SpiaRegs.SPICCR.bit.SPILBK = 0;
    
        SpiaRegs.SPICTL.bit.OVERRUNINTENA = 0;  //No overrun interrupt
        SpiaRegs.SPICTL.bit.CLK_PHASE = 0;      //Phase 0
        SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;   //Master mode
        SpiaRegs.SPICTL.bit.TALK = 1;           //nSCS enabled
        SpiaRegs.SPICTL.bit.SPIINTENA = 0;      //TX/RX Interrupt Disabled
    
        SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = ((25000000 / 1000000) - 1);              //Set baud rate to 1MHz
        SpiaRegs.SPIPRI.bit.FREE = 1;           //Set so breakpoints don't disturb transmission
        SpiaRegs.SPICCR.bit.SPISWRESET = 1;   //Exit SPI reset
    
    }

    您还可以在 EVM 页面上找到我们大多数器件的固件、尽管我认为 DRV8301可能有点过时、但只要我们的器件在接近同一 SPI 帧的位置使用、SPI 通信在这些器件之间可能有很多相似之处。

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

    感谢您、我将对此进行详细介绍。

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

    您好!

    我的时钟工作现在,我发送数据到 drv ,但我没有得到一个良好的响应 Im 仍然不确定,无法找到一个好的答案应该是什么波特率为 CPOL 和 CHPA 设置

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

    尊敬的 Ruben:

    正确的、如果我错了、但 SDI 为红色、SDO 为橙色/黄色、您尝试读取寄存器地址0x00是否正确? 是否似乎遇到 GVDD_UV 故障?

    您是否能够测量 GVDD?

    此外、您是否可以读取所有寄存器以查看它们是否使用默认值进行响应?

    此外、我不确定这是否是您所需的、但在 SPI 配置期间设置的波特率是1MHz

    此致、

    Yara

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

    我已配置您必须等待整个 SPI 序列、下一个序列得到答案、感谢您的帮助