SPI

关于L071HAI库使用硬件SPI出现的死循环等问题?

问题描述,最初使用F103系列,使用硬件SPI没有出现过任何问题,且稳定高效率,然后使用L071单片机使用HAI库对SPI进行调试的时候发现以下几点问题。

第一,出现void HardFault_Handler(void)问题,直接卡死。

第二,从机回复端MISO只是一直高电平,不管你发送什么,只会收到0XFF.

备注:F103与L071使用P2P,更换成F103后直接正常,但是使用L071后就出现这些问题。


下面我的一些代码

SPI初始化

void MX_SPI1_Init(void)

{


hspi1.Instance               = SPI1; 

hspi1.Init.Mode              = SPI_MODE_MASTER;  

hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;

hspi1.Init.Direction         = SPI_DIRECTION_2LINES;

hspi1.Init.CLKPhase          = SPI_PHASE_2EDGE;

hspi1.Init.CLKPolarity       = SPI_POLARITY_LOW; 

hspi1.Init.CRCCalculation    = SPI_CRCCALCULATION_DISABLED;

hspi1.Init.CRCPolynomial     = 7;

hspi1.Init.DataSize          = SPI_DATASIZE_8BIT;

hspi1.Init.FirstBit          = SPI_FIRSTBIT_MSB;

hspi1.Init.NSS               = SPI_NSS_SOFT;

hspi1.Init.TIMode            = SPI_TIMODE_DISABLED

HAL_SPI_MspInit(&hspi1);

 __HAL_SPI_ENABLE(&hspi1);

if(HAL_SPI_Init(&hspi1) != HAL_OK)

{

/* Initialization Error */

}   

/* SPI */        

      

  

}

IO口初始化

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)

{


  GPIO_InitTypeDef GPIO_InitStruct = {0};

  if(hspi->Instance==SPI1)

  {

  /* USER CODE BEGIN SPI1_MspInit 0 */


  /* USER CODE END SPI1_MspInit 0 */

    /* Peripheral clock enable */

    __HAL_RCC_SPI1_CLK_ENABLE();

  

    __HAL_RCC_GPIOA_CLK_ENABLE();

    /**SPI1 GPIO Configuration    

    PA5     ------> SPI1_SCK

    PA6     ------> SPI1_MISO

    PA7     ------> SPI1_MOSI 

    */

GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Pull = GPIO_PULLUP;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    GPIO_InitStruct.Alternate = GPIO_AF0_SPI1;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

CE_OFF;

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_SET);

  /* USER CODE BEGIN SPI1_MspInit 1 */

  

  /* USER CODE END SPI1_MspInit 1 */

  }


}

读写

uint8_t SPI1_ReadWriteByte(uint8_t TxData)

{

   uint8_t ReData;


HAL_SPI_TransmitReceive(&hspi1,&TxData,&ReData,1,1000);

return ReData;

}


死循环处

void HardFault_Handler(void)

{

  /* USER CODE BEGIN HardFault_IRQn 0 */


  /* USER CODE END HardFault_IRQn 0 */

  while (1)

  {

    /* USER CODE BEGIN W1_HardFault_IRQn 0 */

    /* USER CODE END W1_HardFault_IRQn 0 */

  }

}


下面附带使用L071抓的时序图,使用F103均正常微信图片_20190426151327.png

已邀请:

SXYDDD

赞同来自:

你好,我们也遇到这个问题了,请问你解决了吗?

caoenq - 硬件设计大师

赞同来自:

HAL库的bug?

要回复问题请先登录注册