打印
[应用相关]

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

[复制链接]
272|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2022-4-14 09:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
AI, pi
问题描述,最初使用F103系列,使用硬件SPI没有出现过任何问题,且稳定高效率,然后使用L071单片机使用HAI库对SPI进行调试的时候发现以下几点问题。
第一,出现void HardFault_Handler(void)问题,直接卡死。
第二,从机回复端MISO只是一直高电平,不管你发送什么,只会收到0XFF.
备注:F103与L071使用P2P,更换成F103后直接正常,但是使用L071后就出现这些问题。

使用特权

评论回复
沙发
cr315|  楼主 | 2022-4-14 09:22 | 只看该作者
下面我的一些代码
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 */
  }

}

使用特权

评论回复
板凳
cr315|  楼主 | 2022-4-14 09:24 | 只看该作者
读写

uint8_t SPI1_ReadWriteByte(uint8_t TxData)
{       
   uint8_t ReData;

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

使用特权

评论回复
地板
cr315|  楼主 | 2022-4-14 09:27 | 只看该作者
死循环处
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 */
  }
}

使用特权

评论回复
5
cr315|  楼主 | 2022-4-14 09:30 | 只看该作者
下面附带使用L071抓的时序图,使用F103均正常

使用特权

评论回复
6
elephant00| | 2022-4-14 09:35 | 只看该作者
HAL库的bug?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1344

主题

3924

帖子

0

粉丝