48 lines
1.6 KiB
C
Executable file
48 lines
1.6 KiB
C
Executable file
#include <stm32f10x.h>
|
|
#include <stdio.h>
|
|
#include <Horloge.h>
|
|
|
|
|
|
//Il faut trouver le signal
|
|
//On est à Timer 2
|
|
|
|
static void (*TIM2_Appel)(void) = 0;
|
|
|
|
void Timer_Init(TIM_TypeDef *Timer, unsigned short Autoreload, unsigned short Prescaler){
|
|
if (Timer == TIM1) {
|
|
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; //L'horloge est enabléd
|
|
} else if (Timer == TIM2) {
|
|
TIM2->CR1 |= TIM_CR1_CEN; //On enable l'horloge interne
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
|
|
} else if (Timer == TIM3) {
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
|
|
} else if (Timer == TIM4) {
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
|
|
}
|
|
Timer->ARR |= Autoreload;
|
|
Timer->PSC |= Prescaler;
|
|
}
|
|
|
|
//La fonction TIM2_IRQHandler s'utilise dans le processeur, on l'a juste redifint, tel qu'à chaque overflow on met un bit 1 dans GPIOA_ODR
|
|
void TIM2_IRQHandler(void) { //On redefinit le IRQHandler qui est déjà ecrit dans le code source
|
|
if (TIM2->SR & TIM_SR_UIF) { //On met le bit de overflow à un dès qu'on a overflow
|
|
TIM2->SR &= ~TIM_SR_UIF; //Remise à zero
|
|
|
|
if (TIM2_Appel){TIM2_Appel();}
|
|
}
|
|
}
|
|
|
|
|
|
void MyTimer_ActiveIT(TIM_TypeDef * Timer, char Prio, void(*Interrupt_fonc)(void)){ //On veut créer une fonction qui envoie un signal au cas où il y a debordement, avec une prioritaire, 0 plus importante 15 moins importante
|
|
if (Timer == TIM2){
|
|
|
|
TIM2_Appel = Interrupt_fonc;
|
|
|
|
NVIC_EnableIRQ(TIM2_IRQn);
|
|
NVIC_SetPriority(TIM2_IRQn, Prio);
|
|
TIM2->DIER |= TIM_DIER_UIE; //Le registre DIER(Interrupt Enable Register) est mis au bit Update Interrupt, qui se commute lors d'un overflow
|
|
TIM2->CR1 |= TIM_CR1_CEN; //Clock Enable
|
|
}
|
|
}
|
|
|
|
|