【发布时间】:2021-12-09 18:00:41
【问题描述】:
我在 SPI 从模式下编码 STM32F407 时遇到问题, 在我的例子中,Master是ADE7880 IC,Slave是STM32F407, .
我是初学者,我已经连接了 ADE7880 数据表中提到的相同引脚和使用 STM32cubeMX 生成的代码,
static void MX_SPI1_Init(void)
{
/* SPI1 parameter configuration*/
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_SLAVE;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN SPI1_Init 2 */
/* USER CODE END SPI1_Init 2 */
}
然后在main中
hal_status=HAL_SPI_Receive(&hspi1, (uint8_t *)spi_buf, 1, 100);
// hal_status = HAL_SPI_TransmitReceive(&hspi1, tx_data, rx_data, 2, 1000);
它返回超时错误, 我的编程方面还好吗????
【问题讨论】:
-
代码中的主要问题可能是 NSS 设置。设置它“硬件NSS输入信号”。否则,您必须通过寄存器告诉 SPI 外设 NSS 何时为高,何时为低。
-
您可能遇到的下一个问题是您会丢失数据,因为 MCU 并不总是准备好接收 SPI 数据。您可能需要在 DMA 模式下使用 SPI 来解决它。
标签: embedded spi keil stm32f4discovery stm32f4