60 lines
1.6 KiB
C
60 lines
1.6 KiB
C
#include "Driver_Timer.h"
|
|
|
|
|
|
void (*Ptrfct)(void);
|
|
|
|
//-----------------------INITIALISATION TIMER---------------------//
|
|
void MyTimer_Base_Init(MyTimer_Struct_TypeDef * Timer, void (*fct)(void)){
|
|
|
|
Ptrfct=fct;
|
|
|
|
if(Timer->Timer == TIM1){
|
|
//RCC->APB2ENR |= 0x0001<<11;
|
|
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
|
|
}
|
|
else if(Timer->Timer == TIM2){
|
|
//RCC->APB1ENR |= 0x0001;
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
|
|
}
|
|
else if(Timer->Timer == TIM3){
|
|
//RCC->APB1ENR |= 0x0001 <<1;
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
|
|
}
|
|
else if(Timer->Timer == TIM4){
|
|
//RCC->APB1ENR |= 0x0001 <<2;
|
|
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
|
|
}
|
|
|
|
Timer->Timer->ARR = Timer->ARR;
|
|
Timer->Timer->PSC = Timer->PSC;
|
|
|
|
}
|
|
|
|
|
|
//-----------------------START----------------------//
|
|
void MyTimer_Base_Start(TIM_TypeDef * Timer){
|
|
Timer->CR1 |= TIM_CR1_CEN; //Masque OU pour placer un 1 décalé avec des 0
|
|
}
|
|
|
|
//------------------------STOP----------------------//
|
|
void MyTimer_Base_Stop(TIM_TypeDef * Timer){
|
|
Timer->CR1 |= ~TIM_CR1_CEN; //Masque ET pour placer un 0 décalé avec des 1 (~)
|
|
}
|
|
|
|
|
|
//------------------------PWM----------------------//
|
|
void MyTimer_PWM( MyTimer_Struct_TypeDef * Timer, uint16_t cycle){
|
|
Timer->Timer->CCMR1 &= ~TIM_CCMR1_OC1M_0; //Configuration du canal CH1
|
|
Timer->Timer->CCMR1 |= TIM_CCMR1_OC1M_1| TIM_CCMR1_OC1M_2; // Ajouter 110 aux bits OC1M (registre CCMR1)
|
|
|
|
Timer->Timer->CCER |= TIM_CCER_CC1E; // Canal CH1 validé par bit CC1E (registre CCER)
|
|
Timer->Timer->CCR1 = (cycle * Timer->ARR) / 100; // Fixer la durée à 20%
|
|
}
|
|
|
|
|
|
//------------------------HANDLER--------------------//
|
|
void TIM2_IRQHandler (void)
|
|
{
|
|
TIM2->SR &= ~(1<<0);
|
|
Ptrfct();
|
|
}
|