SPI状态未更新

时间:2019-12-10 06:01:15

标签: stm32 spi

我正在使用STM32L496微控制器,在其中按以下方式初始化hspi3-

HAL_SPI_Init(&hspi3)

在我的hspi3函数中,hspi->State = HAL_SPI_STATE_READY;没有给出任何错误代码,并且转到hspi3 IMAGE。但是在监视窗口中,HAL_SPI_STATE_RESET状态不会更新;它保持在void TIM3_IRQHandler(void) { static uint16_t sinTableIndex = 0; uint8_t data_on_spi[3]; SysTime_mainFunction(); if (getOperatingState() == CONTROL){ data_on_spi[0]=sinTable[sinTableIndex] & MASK_LOW_BYTE; data_on_spi[1]=sinTable[sinTableIndex] & MASK_MID_BYTE; data_on_spi[2]=sinTable[sinTableIndex] & MASK_HIGH_BYTE; HAL_GPIO_WritePin(SPI3_Chip_Select_DAC_GPIO_Port,SPI3_Chip_Select_DAC_Pin,GPIO_PIN_RESET); if(HAL_SPI_Transmit(&hspi3, (uint8_t*)data_on_spi, 3,1) != HAL_OK) { /* Transfer error in transmission process */ Error_Handler(); } HAL_GPIO_WritePin(SPI3_Chip_Select_DAC_GPIO_Port,SPI3_Chip_Select_DAC_Pin,GPIO_PIN_SET); sinTableIndex++; if (sinTableIndex >= maxTableSize) { sinTableIndex = 0; } } HAL_TIM_IRQHandler(&htim3); } 。因此,当我尝试如下所示使用SPI发送一些数据时,它会失败-

HAL_SPI_Transmit(&hspi3, (uint8_t*)data_on_spi, 3,1)

当我HAL_SPI_STATE_RESET时,它进入错误处理程序,因为它将SPI状态识别为HAL_SPI_Transmit(&hspi3, (uint8_t*)data_on_spi, 3,1)。 需要帮助以了解发生这种情况的原因。

编辑:我认为问题是,当我尝试执行__HAL_LOCK(hspi)时,即使{{1}}完成,LOCK仍保持解锁状态。

1 个答案:

答案 0 :(得分:1)

  1. 请勿在中断处理程序中以轮询模式进行传输。 原因:因为它消耗大量时间。那些HAL函数根据滴答值进行中继,该滴答值在另一个中断中增加,由于中断优先级可能不会发生。