stm32 spi做从机时,调用开始传输函数,如下: if (HAL_SPI_Transmit_DMA(&spihdl, (uint8_t *)&op_cmd, sizeof(op_cmd)) != HAL_OK)
{
spi_halted();
}
如果主机没响应此次传输,spi 从机想结束此次传输,调用结束函数,如下:
HAL_StatusTypeDef errorcode = HAL_SPI_Abort(&spihdl);
但是会有问题,SPI的状态寄存器 TXE 发送缓冲区非空,会导致后面传输异常。
目前尝试了很多办法,只有将SPI RESET才能清空,函数如下:
HAL_SPI_DeInit(&spihdl);
__HAL_RCC_SPI3_FORCE_RESET();
__HAL_RCC_SPI3_RELEASE_RESET();
HAL_SPI_Init(&spihdl);
请问有什么其它好的办法将SR->TXE清空? |