2022-05-10 01:21 AM
2022-05-10 06:06 AM
This is an English language forum. Please don't exclude others from your conversation.
JW
2022-05-10 01:31 AM
Buenos dias,
Que IDE estas utilizando para tu desarrollo?
has probado a usar el modo "live expression" en tu sesion de debug?
2022-05-10 01:35 AM
j'ai utilise keil V5 mais on peut utilise IDE
Merci pour votre réponse.
2022-05-10 02:05 AM
keilV5 tiene una funcionalidad parecida.
Tambien te puede ser muy util STMStudio
https://www.st.com/en/development-tools/stm-studio-stm32.html
o su primo mas joven
STM32CubeMonitor
https://www.st.com/en/development-tools/stm32cubemonitor.html
2022-05-10 02:33 AM
La 4ème ligne de votre code ne fait rien:
TIM1->CR1 = TIM1->CR1 | (0 << 0) ;
Pour arrêter le compteur il faut
TIM1->CR1 = TIM1->CR1 & ~(1 << 0) ;
Ou mieux (c'est plus clair):
TIM1->CR1 &= ~TIM_CR1_CEN ;
Grâce au fichier CMSIS chaque bit des registres du MCU a un nom.
Pour lire la valeur du compteur:
N = TIM1->CNT ; // Pas besoin de la HAL...
Pour voir la valeur de N il faut mettre un point d'arêt après la lecture de CNT.
2022-05-10 02:43 AM
Merci pour votre réponse.
Maintenait si on remplace le vtaskdelay par un interruption pour temporisation est ce que mon code est vrai :
2022-05-10 02:44 AM
merci.
2022-05-10 04:33 AM
Pour démarrer le compteur:
TIM1->CR1 |= TIM_CR1_CEN ;
La notation (1 <<0) ressemble à ce qui se faisait en AVR, mais avec les STM32 chaque bit a un nom.
Je ne comprend pas ce que vous cherchez à faire.
Votre code ci dessus va compter de 0 jusqu'au débordement du compteur (dépend de TIM1->ARR) qui déclenchera l'interruption. Donc toujours compter le même nombre.
Et pourquoi utilisez vous le timer en mode ETR?
D'autre par il ne faut pas utiliser printf() dans un handler d'interruptions.
Vous utilisez TIM1 mais vous utilisez le handler d'interruption de TIM2!!!!!
Et hrtim2 dans les appels de fonction de la HAL: beau mélange.
Il n'est pas bon de mélanger une utilisation directe par registre et l'utilisation de la HAL. Par exemple dans la boucle for vous démarrez le timer, et vous le faites de nouveau avec HAL_TIM_Base_Start_It().
D'autre part cette boucle for tourne en continu: comme HAL_TIM_Base_Start_It() revient immédiatement après avoir démarré le timer, vous êtes en permanence en train de mettre le compteur à 0 et à démarrer le timer. Il n'y aura donc jamais d'interruption.
Je pense que vous devez lire plus attentivement le manuel de référence.
Si vous voulez utiliser la HAL pour le timer, lisez les exemples fournis pour les timers.
Définissez exactement ce que vous voulez obtenir avant d'écrire du code.
Cette note d'application sur les timers pourrait vous être utile:
2022-05-10 05:10 AM
j'ai utiliser le timer en mode ETR pour calcule les nombre d'impulsion de signal , le lecture de nombre d'impulsion est chaque 40 ms pour cela j'ai fait une routine d'interruption avec une autre timer pour gêner le temps de lecture N
2022-05-10 05:24 AM