cancel
Showing results for 
Search instead for 
Did you mean: 

STM32H743vit SAI ADC, TC behaviour changes after resetting MCU

SeyyedMohammad
Senior III

I've written a code to trigger(toggle) GPIO_C1 by ADC_TC interrupt. And the GPIO_C13 by MDMA through SAItx_TC request.

I've programmed to both GPIO toggle together in-phase. But GPIO in-phase behaviour can be achieved in first time I program in MCU without debug mode. Resetting MCU causes out-of-phase behaviour:


_legacyfs_online_stmicro_images_0693W00000biUVeQAM.pngThe project is uploaded in STM32cubeIDE 1.12.

Main code:

MX_GPIO_Init();
  MX_DMA_Init();
  MX_MDMA_Init();
  MX_LPTIM3_Init();
  MX_SAI2_Init();
  MX_LPTIM2_Init();
  MX_ADC1_Init();
  MX_SAI1_Init();
  /* USER CODE BEGIN 2 */
  MX_MDMA_Init();
 
  HAL_SAI_Transmit(&hsai_BlockA1, (uint8_t*)&noisebuf[0], 1,100);
  dummy=0;
  /////////////////////////////////////////////////////////////////////////////////////////////////////
  /*DElY
   * SEQUENCE OF SYNCHRONIZED DELAY
   * MDMA0 -> LPTIM2 -> DMA req gen0 -> GPIO
   */
#define	WORD_SIZE 2
//disabling MDMA causes GPIO to trigger on tc interrupt
  HAL_MDMA_Start(&hmdma_mdma_channel40_dma1_stream0_tc_0,
		  (uint32_t)&const_lptim_onePulse, (uint32_t)&(hlptim2.Instance->CR),
		  4, 1);
 /////////////////////////////////////////////////////////////////////////////////////////////////////
 
  /* Enable external trigger interrupt */
  __HAL_LPTIM_ENABLE_IT(&hlptim3, LPTIM_IT_EXTTRIG);
  HAL_LPTIM_OnePulse_Start(&hlptim3, 100, 0);
  HAL_LPTIM_OnePulse_Start(&hlptim2, 660, 0);
 
 
  	HAL_GPIO_WritePin(test_GPIO_Port, test_Pin,GPIO_PIN_RESET);
  	HAL_GPIO_WritePin(test1_GPIO_Port, test1_Pin,GPIO_PIN_RESET);
	tok_copy=tok;
	while(tok==tok_copy);
  HAL_ADC_Start_DMA(&hadc1,				(uint32_t*)&adcbuf[0],		BLOCK_SIZE*BUFFER_BLOCK_COUNT);
  HAL_SAI_Transmit_DMA(&hsai_BlockA1,	(uint8_t*) &noisebuf[0],	BLOCK_SIZE*BUFFER_BLOCK_COUNT);
 
  HAL_SAI_DMAPause(&hsai_BlockA1);
  for(uint32_t volatile i=0;i<14000;i++);
  HAL_SAI_DMAResume(&hsai_BlockA1);
 
  __HAL_LPTIM_DISABLE_IT(&hlptim3, LPTIM_IT_EXTTRIG);

 Interrupt code:

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
//	HAL_GPIO_TogglePin(test1_GPIO_Port, test1_Pin);
 
	if(dummy==0)
	{
		HAL_GPIO_WritePin(test1_GPIO_Port, test1_Pin,GPIO_PIN_SET);
		dummy=1;
	}
	else
	{
		HAL_GPIO_WritePin(test1_GPIO_Port, test1_Pin,GPIO_PIN_RESET);
		dummy=0;
	}
 
 
 
 
//	HAL_GPIO_WritePin(test1_GPIO_Port, test1_Pin,GPIO_PIN_RESET);
}
 
void HAL_LPTIM_TriggerCallback(LPTIM_HandleTypeDef *hlptim)
{
	if(tok==0)
	{
		tok=1;
	}
	else
	{
		tok=0;
	}
}

 MDMA setting:


_legacyfs_online_stmicro_images_0693W00000biUavQAE.pngThough exact scoping showed:


_legacyfs_online_stmicro_images_0693W00000biV3vQAE.pngThat ADC have one TC before SAItx, the block size is 8. I can't understand why SAI is responsing 8 block after ADC conversion!

0 REPLIES 0