stm32H7 hal库错误内容汇总:
1.
HAL_StatusTypeDef HAL_I2S_Transmit_IT(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size)
函数内部有一个判断
if (hi2s->State == HAL_I2S_STATE_READY) {
__HAL_UNLOCK(hi2s);
return HAL_BUSY;
}
函数
HAL_StatusTypeDef HAL_I2SEx_TransmitReceive_IT(I2S_HandleTypeDef *hi2s, uint16_t *pTxData, uint16_t *pRxData, uint16_t Size)
{
if (hi2s->State == HAL_I2S_STATE_READY)
{
__HAL_UNLOCK(hi2s);
return HAL_BUSY;
}
中同样有
应该改为:
if (hi2s->State != HAL_I2S_STATE_READY)
2.我用的HAL库版本为V1.2.0;
其中Device中的STM32H743XX.h中寄存器定义错误。
#define SPI_I2SCFGR_WSINV_Pos (12U)
#define SPI_I2SCFGR_WSINV_Msk (0x1U << SPI_I2SCFGR_WSINV_Pos) /*!< 0x00001000 */
#define SPI_I2SCFGR_WSINV SPI_I2SCFGR_WSINV_Msk /*!<Word select inversion */
#define SPI_I2SCFGR_FIXCH_Pos (13U)
#define SPI_I2SCFGR_FIXCH_Msk (0x1U << SPI_I2SCFGR_FIXCH_Pos) /*!< 0x00002000 */
#define SPI_I2SCFGR_FIXCH SPI_I2SCFGR_FIXCH_Msk /*!<Fixed channel length in SLAVE */
#define SPI_I2SCFGR_DATFMT_Pos (12U)
#define SPI_I2SCFGR_DATFMT_Msk (0x3U << SPI_I2SCFGR_DATFMT_Pos) /*!< 0x00003000 */
#define SPI_I2SCFGR_DATFMT SPI_I2SCFGR_DATFMT_Msk /*!<Data format
跟寄存器定义不同。
所以最好使用新的固件库,但项目之前用的旧固件库,并且没有用到I2s。