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.

[参考译文] MCT8316Z:无法使用"&quot"中的 SPI 读取或写入寄存器;MCT8316Z&quot 的 SPI 型号;

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1333544/mct8316z-unable-to-read-or-write-registers-using-spi-in-spi-variant-of-mct8316z

器件型号:MCT8316Z

我将 STM32G491VETX 微控制器用作主控制器、并将 MCT8316ZR 作为从控制器。 这些是我使用的配置、

void MX_SPI1_Init (void)
{

hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLICY_LOW;
hspi1.Init.clkPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = spi_nss_hard_output;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalrup = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 7;
hspi1.Init.CRCLlength = SPI_CRC_LENGTH_DATASIZE;
hspi1.Init.NSSPMode = SPI_NSS_puls_enable;
如果(HAL_SPI_Init (&hspi1)!= HAL_OK)
{
Error_Handler ();



void HAL_SPI_MspInit (SPI_HandleTypeDef* spiHandle)
{

GPIO_InitTypeDef GPIO_InitStruct ={0};
if (spiHandle->instance==SPI1)
{
/*用户代码开始 SPI1_MspInit 0 */

/*用户代码结束 SPI1_MspInit 0 */
/* SPI1时钟使能*/
__ HAL_RCC_SPI1_CLK_ENABLE ();

__ HAL_RCC_GPIOA_CLK_ENABLE ();
/**SPI1 GPIO 配置
第4页-------- > SPI1_NSS
第5页-------- > SPI1_SCK
第6页-------- > SPI1_MISO
第7章-------- > SPI1_MOSI
*/
GPIO_InitStruct.(GPIO_InitStructurt)。 Pin = GPIO_PIN_5|GPIO_PIN_7;
GPIO_InitStruct.(GPIO_InitStructurt)。 MODE = GPIO_MODE_AF_PP;
GPIO_InitStruct.(GPIO_InitStructurt)。 拉取= GPIO_NOPULL;
GPIO_InitStruct.(GPIO_InitStructurt)。 SPEED = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.(GPIO_InitStructurt)。 备选= GPIO_AF5_SPI1;
HAL_GPIO_Init (GPIOA、&GPIO_InitStructh);

GPIO_InitStruct.(GPIO_InitStructurt)。 Pin = GPIO_PIN_6;
GPIO_InitStruct.(GPIO_InitStructurt)。 MODE = GPIO_MODE_AF_PP;
GPIO_InitStruct.(GPIO_InitStructurt)。 下拉= GPIO_PULLUP;
GPIO_InitStruct.(GPIO_InitStructurt)。 SPEED = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.(GPIO_InitStructurt)。 备选= GPIO_AF5_SPI1;
HAL_GPIO_Init (GPIOA、&GPIO_InitStructh);

GPIO_InitStruct.(GPIO_InitStructurt)。 Pin = GPIO_PIN_4;
GPIO_InitStruct.(GPIO_InitStructurt)。 MODE = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.(GPIO_InitStructurt)。 拉取= GPIO_NOPULL;
GPIO_InitStruct.(GPIO_InitStructurt)。 SPEED = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.(GPIO_InitStructurt)。 备选= GPIO_AF5_SPI1;
HAL_GPIO_Init (GPIOA、&GPIO_InitStructh);

/*用户代码开始 SPI1_MspInit 1 */

/*用户代码 end SPI1_MspInit 1 */



我无法读取或写入寄存器。 使用此代码时,

HAL_GPIO_WritePin (DRV1_OFF_GPIO_Port、DRV1_OFF_Pin、GPIO_PIN_RESET);
HAL_GPIO_WritePin (DRV1_SLEEP_Port、DRV1_SLEEP_Pin、GPIO_PIN_SET);
uint8_t TxData[2]={0x13、0x01};
uint8_t RxData[2]={0、0};
//
HAL_GPIO_WritePin (GPIOA、GPIO_PIN_4、GPIO_PIN_RESET);
HAL_StatusTypeDef Txstatus = HAL_SPI_TransmitReceive (&hspi1、TxData、RxData、2、HAL_MAX_DELAY);
HAL_GPIO_WritePin (GPIOA、GPIO_PIN_4、GPIO_PIN_SET);

我尝试了改变电机方向、但没有发生任何情况。 我在示波器中检查了 SPI 线路、可以清楚地看到传输的数据。 微控制器的通信是否遗漏了任何东西?

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

    您好  

    我已经尝试过添加外部电阻器5.1k 作为 SDO 引脚的上拉值。 但同样的问题、无法与 SPI 通信。

    请让我知道我在这里遗漏了什么。

    提前感谢

    ABU

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

    尊敬的 Abu:

    我将对此进行深入研究、并在本周结束时向您通报最新情况。

    谢谢、此致、

    文卡塔德里

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

    尊敬的 Venkatadri:
          您能否提供有关该问题的任何更新

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

    尊敬的 Abu:

    很抱歉让它保持打开状态、我需要一些时间来了解您的代码。 或者、我也会查找一些文档供您比较您所做的工作。 请等待2或3天,我会回来给你。  产品说明书中将提供一些详细信息、如果这仍然没有帮助、我将为您查看一些示例。

    谢谢、此致、

    文卡塔德里

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

    尊敬的 Abu:

    SPI 模式应与第4行项目相同。 在主机推出数据时、请检查示波器?

    请验证突出显示的行并检查其是否兼容。

    有效帧必须满足以下条件:

    当 nSCS 引脚从高电平转换为低电平、以及从低电平转换为高电平时、SCLK 引脚应该为低电平。

    •nSCS 引脚在两个字之间被拉为高电平的时间至少应为400ns。

    •当该 nSCS 引脚 被拉高时、SCLK 和 SDI 引脚上的任何信号都将被忽略、SDO 引脚处于 Hi-Z 状态。

    •数据会在 SCLK 引脚的下降沿被捕捉、并在 SCLK 引脚的上升沿传播。

    •最高有效位(MSB)最先移入和移出。

    •必须进行完整的16个 SCLK 周期、事务才有效。

    •如果发送到 SDI 引脚的数据字不到16位或多于16位、则会发生帧错误并且数据字会被忽略。

    •对于写入命令、要写入的寄存器中的现有数据会在8位状态数据之后在 SDO 引脚上移出。

    谢谢、此致、

    文卡塔德里