Bonjour,
Sur Arduino ou STM32duino, j'ai créé un timer de base dont le bit prévu à cet effet dans le registre du timer est bien régulièrement modifié. Donc le timer fonctionne.
Dans le loop, je détecte l'overflow avec :Code:#define tim TIM1 void setup() { uint16_t Prescaler = (uint16_t) (SystemCoreClock / 1000000) - 1; activer le circuit du timer, a faire avant de définir les variables du timer : RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // pour TIM1 RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; // pour TIM3 tim->ARR = 60000; tim->PSC = Prescaler; tim->CR1 = tim->CR1 | ( 1 << 0); // le BIT 0 du registre CR1 (appelé CEN) active le compteur }
Ce que je voudrais maintenant, c'est déclencher une interruption quand ce bit change (donc quand il y a un overflow) au lieu de le détecter comme ici dans le main().Code:void loop() { if (tim->SR & TIM_SR_UIF) { // overflow détecté tim->SR = tim->SR & ~TIM_SR_UIF; // Remise à zéro de UIF // ici switcher une led par exemple } }
Sur arduino+AVR, on avait des fonctions ISR toute prête.
La, en cherchant, je lis qu'il faut charger une table de vecteur depuis la mémoire flash pour trouver le pointeur de la fonction déclenché par l'interruption, mettre du sang de poulet sur le clavier et invoquer le malin. Tout ce que je voulais moi, c'était exécuter 2 lignes de code à l'overflow... Bref, je crois comprendre qu'il faut donc - en gros - que je déclare ma fonction et que je renseigne son adresse dans une table dont je découvre l'existence théorique aujourd'hui... C'est bien ça ?
Déclarer une fonction et mettre son adresse dans une case, je devrais y arriver. Mais trouver la case, là, j'ai pas compris.
Je me permet donc de solliciter votre aide pour m'aider à comprendre ce qu'il faut faire - dans la vraie vie - pour atteindre ce modeste objectif...
En vous remerciant
Le mpu est un stm32f103c8t6
-----