工具与软件:
大家好、
我有一个关于 DRV8301我试图与驱动器通信以将其置于3 PWM 模式的问题、我没有得到任何响应。
我的 MCU 是一个连接 SPI 端口的 STM32G431CBU。
如果这是一个错误的地方,我在高级抱歉
很好的待遇
Ruben Konings
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.
尊敬的 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 通信在这些器件之间可能有很多相似之处。