Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Stm32 Harici Kesme Sorunu

Başlatan sımışka, 21 Haziran 2020, 12:21:35

sımışka

Merhaba,

Tek bir puls kaynağını 4 adet girişime bağlıyorum ve dış kesme ile sayım işlemi yapıyorum. Belli bir sayıya çıktıktan sonra aynı handleri kullanan 2 portum geri kalmaya başlıyor. HSC1 ve HSC2 bir süre sonra geri kalmaya başlıyor. Öncelikleri hepsinin 0 olarak ayarlı. Saniyede 50 puls veriyorum. Neden olabilir acaba ?

void EXTI3_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI3_IRQn 0 */
	HSC0_TOTAL++;
  /* USER CODE END EXTI3_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
  /* USER CODE BEGIN EXTI3_IRQn 1 */
  if(HSC0_TOTAL>=2147483647)
  {
	  HSC0_TOTAL=0;
  }
  /* USER CODE END EXTI3_IRQn 1 */
}


[b]void EXTI9_5_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI9_5_IRQn 0 */

  /* USER CODE END EXTI9_5_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
  /* USER CODE BEGIN EXTI9_5_IRQn 1 */
	if(HSC1_TOTAL>=2147483647)
	 {
		 HSC1_TOTAL=0;
	 }
	if(HSC2_TOTAL>=2147483647)
	 {
		 HSC2_TOTAL=0;
	 }

  /* USER CODE END EXTI9_5_IRQn 1 */
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(HSC1_Pin==GPIO_Pin)
	{
		HSC1_TOTAL++;
	}
	else if(HSC2_Pin==GPIO_Pin)
	{
		HSC2_TOTAL++;
	}
}[/b]


tunayk

Alıntı yapılan: sımışka - 21 Haziran 2020, 12:21:35Merhaba,

Tek bir puls kaynağını 4 adet girişime bağlıyorum ve dış kesme ile sayım işlemi yapıyorum. Belli bir sayıya çıktıktan sonra aynı handleri kullanan 2 portum geri kalmaya başlıyor. HSC1 ve HSC2 bir süre sonra geri kalmaya başlıyor. Öncelikleri hepsinin 0 olarak ayarlı. Saniyede 50 puls veriyorum. Neden olabilir acaba ?

void EXTI3_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI3_IRQn 0 */
	HSC0_TOTAL++;
  /* USER CODE END EXTI3_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
  /* USER CODE BEGIN EXTI3_IRQn 1 */
  if(HSC0_TOTAL>=2147483647)
  {
	  HSC0_TOTAL=0;
  }
  /* USER CODE END EXTI3_IRQn 1 */
}


[b]void EXTI9_5_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI9_5_IRQn 0 */

  /* USER CODE END EXTI9_5_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
  /* USER CODE BEGIN EXTI9_5_IRQn 1 */
	if(HSC1_TOTAL>=2147483647)
	 {
		 HSC1_TOTAL=0;
	 }
	if(HSC2_TOTAL>=2147483647)
	 {
		 HSC2_TOTAL=0;
	 }

  /* USER CODE END EXTI9_5_IRQn 1 */
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(HSC1_Pin==GPIO_Pin)
	{
		HSC1_TOTAL++;
	}
	else if(HSC2_Pin==GPIO_Pin)
	{
		HSC2_TOTAL++;
	}
}[/b]


Saniyede 50 puls herhangi bir işlemci için çok düşük bir değer. Pals süresinin çok kısa olması veya programda/ konfigürasyonda bir filtreleme olması nedeniyle puls kaçırıyor olabilirsiniz.