STM32F030 CubeMX中SPI主模式中断读SX1276两字节以上直接进hardfault

2019-07-14 14:45发布

最近用上了F030,在使用SPI的时候出现了一个问题,主模式中断读SX1276,一字节读没问题。两字节以上就直接进hardfault:void Sx1276_ReadNbytes(uint8_t addr, uint8_t *buffer, uint8_t size)
{
        uint8_t SendData=addr&0x7f;
        uint8_t i=0;
        RF_CS0;  
        HAL_SPI_Transmit_IT(&hspi1,&SendData,1);
        while (HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);
//       HAL_SPI_Receive_IT(&hspi1,buffer,size);                                    
//       while (HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);
        for(i=0;i<size;i++)
        {
                HAL_SPI_Receive_IT(&hspi1,buffer++,1);
                while (HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);
        }
        RF_CS1;  
}

上面程序注释部分是一次读多字节,这样会进hardfault,下面未注释的是一次读一字节,没有问题。
经过调试发现出问题在下面这个地方。

/* Check if packing mode is enabled and if there is more than 2 data to receive */
  if ((hspi->Init.DataSize > SPI_DATASIZE_8BIT) || (hspi->RxXferCount >= 2U))
  {
    /* Set fiforxthresold according the reception data length: 16 bit */
    CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD);        //运行到此处,立马进hardfault。
  }
  else
  {
    /* Set fiforxthresold according the reception data length: 8 bit */
    SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD);
  }


以前用L1都没有问题。有谁对F0比较熟的,能指点下是什么问题么,另外用了freeRTOS.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。