我将 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 线路、可以清楚地看到传输的数据。 微控制器的通信是否遗漏了任何东西?