J'ai le problème suivant: J'ai 2 entrées sur mon carte électronique:STM32 HAL GPIO interrompez compte trop Mutch
#define TOR1_IN_uC_Port GPIOC
#define TOR1_IN_uC_Pin GPIO_PIN_5
#define TOR2_IN_uC_Port GPIOE
#define TOR2_IN_uC_Pin GPIO_PIN_6
J'ai cette initialisation:
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
GPIO_InitStruct.Pin = TOR1_IN_uC_Pin;
HAL_GPIO_Init(TOR1_IN_uC_Port, &GPIO_InitStruct);
GPIO_InitStruct.Pin = TOR2_IN_uC_Pin;
HAL_GPIO_Init(TOR2_IN_uC_Port, &GPIO_InitStruct);
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 2, 1);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
J'ai deux thèses fonctions d'interruption:
void EXTI9_5_IRQHandler(void)
{
if(__HAL_GPIO_EXTI_GET_IT(TOR1_IN_uC_Pin) != RESET)
{
HAL_GPIO_EXTI_IRQHandler(TOR1_IN_uC_Pin);
__HAL_GPIO_EXTI_CLEAR_IT(TOR1_IN_uC_Pin);
}
if(__HAL_GPIO_EXTI_GET_IT(TOR2_IN_uC_Pin) != RESET)
{
HAL_GPIO_EXTI_IRQHandler(TOR2_IN_uC_Pin);
__HAL_GPIO_EXTI_CLEAR_IT(TOR2_IN_uC_Pin);
}
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == TOR1_IN_uC_Pin)
Input1.Count++;
else if (GPIO_Pin == TOR2_IN_uC_Pin)
Input2.Count++;
}
J'ai pluged sur les entrées d'un GBF à 10Hz, mais le les compteurs comptent trop mutch. Lorsque j'imprime les compteurs sur le port série, il affiche environ 5kHz
Lorsque je lis manuellement l'état des entrées, je ne peux pas demander si le nombre d'entrées est trop élevé.
Voyez-vous quelque chose qui ne va pas dans mon code? Quelqu'un a une idée?
Qu'est-ce que TOR4_IN_uC_Pin? Je ne vois que les définitions pour 1 et 2. – Yunnosch
C'est un décalage, j'ai corrigé mon poste, merci – Grokiff
Faites un peu de caoutchouc et expliquez comment votre code fonctionne en détail. Peut-être que vous voulez ajouter plus de code, il me semble qu'il doit y avoir plus de code que vous avez montré. Je pense au lien entre HAL_GPIO_EXTI_IRQHandler et HAL_GPIO_EXTI_Callback. Avez-vous besoin de reconnaître/consommer des interruptions? Un facteur de 5kHz/10Hz ressemble moins à une erreur d'algorithme (par exemple, un par un), plus à la fréquence maximale qu'un ISR en boucle peut imprimer en série ... Y at-il quelque chose comme un choix entre déclenchement sur front et niveau? déclenchement? – Yunnosch