具体bug点在HAL_SPI_TransmitReceive这个函数里面。具体表现是莫名其妙会进入hardfault,但是,也不排除直接debug跑死没反应的情况。
因为在最初的时候,程序调试异常都是直接调试卡死。这其中的具体原因还没搞清楚。
既然是bug,那肯定是满足了一定条件下的错误。但是很遗憾,具体条件我没找到。但是解决方法找到了。
代码中这一段改成:
while((hspi->TxXferCount > 0) || (hspi->RxXferCount > 0)) { /* check TXE flag */ if((hspi->TxXferCount > 0) && ((hspi->Instance->SR & SPI_FLAG_TXE) == SPI_FLAG_TXE)) { // if(hspi->TxXferCount > 1) // { // hspi->Instance->DR = *((uint16_t*)hspi->pTxBuffPtr); // hspi->pTxBuffPtr += sizeof(uint16_t); // hspi->TxXferCount -= 2; // } // else // { *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr++); hspi->TxXferCount--; // } /* Enable CRC Transmission */ if((hspi->TxXferCount == 0) && (hspi->I