Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: sımışka - 21 Haziran 2020, 12:21:35

Başlık: Stm32 Harici Kesme Sorunu
Gönderen: sımışka - 21 Haziran 2020, 12:21:35
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]
(https://i.ibb.co/3MM8q2k/Ekran-Al-nt-s.jpg) (https://ibb.co/3MM8q2k)
Başlık: Ynt: Stm32 Harici Kesme Sorunu
Gönderen: tunayk - 21 Haziran 2020, 17:48:27
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]
(https://i.ibb.co/3MM8q2k/Ekran-Al-nt-s.jpg) (https://ibb.co/3MM8q2k)

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.