Половина обратного вызова STM32 не вызывается - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь реализовать DFSDM в режиме DMA, поэтому я использовал CubeMX для генерации кода и настроил DFSDM DMA в циклическом режиме.

Всякий раз, когда я запускаю код в режиме отладки, я вижу, чтовнутри обработчика IRQ DMA он вызывает CpltCallback, а не HalfCpltCallback.

Мой вопрос: почему он вызывает CpltCallback, а не HalfCpltCallback?и как мне справиться с этим?

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_DFSDM1_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_UART_Transmit(&huart2, "\r\nHello\r\n", sizeof("\r\nHello\r\n"), HAL_MAX_DELAY);
  uint8_t cr = 1;
  HAL_UART_Receive_IT(&huart2, cr, 1);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  if(flag == 1)
	  {
		for (int j = 0; j<taille; j++)
		{
			sprintf(tab, "%05d", (int)val[j]/256);
			HAL_UART_Transmit(&huart2, tab, 5, HAL_MAX_DELAY);
			HAL_UART_Transmit(&huart2, ",", 1, HAL_MAX_DELAY);
		}
		HAL_UART_Transmit(&huart2, "\r\n", 2, HAL_MAX_DELAY);
		flag = 0;
		HAL_UART_Receive_IT(&huart2, cr, 1);
	  }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */

void HAL_DFSDM_FilterRegConvCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter)
{
	HAL_DFSDM_FilterRegularStop_DMA(&hdfsdm1_filter0);
	HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin);
	flag = 1;
}

void HAL_DFSDM_FilterRegConvHalfCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter)
{
	HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin);
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin);
	HAL_DFSDM_FilterRegularStart_DMA(&hdfsdm1_filter0, &val, taille);
}
...