voilier/Drivers/MyTimer.c
2025-12-03 08:19:23 +01:00

113 lines
2.3 KiB
C

#include "MyTimer.h"
#include "stm32f10x.h"
void (*pointeur_fonction_Timer1)(void);
void (*pointeur_fonction_Timer2)(void);
void (*pointeur_fonction_Timer3)(void);
void (*pointeur_fonction_Timer4)(void);
void MyTimer_Base_Init(TIM_TypeDef *Timer, unsigned short ValARR, unsigned short ValPSC)
{
if (Timer == TIM2)
{
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
}
else if (Timer == TIM3)
{
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
}
else if (Timer == TIM4)
{
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
}
else if (Timer == TIM1)
{
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
}
MyTimer_Base_Start(Timer);
Timer->ARR=ValARR-1;
Timer->PSC=ValPSC-1;
}
void MyTimer_ActiveIT(TIM_TypeDef * Timer, char Prio, void (*interrupt) (void))
{
if (Timer == TIM2)
{
NVIC->IPR[28] = Prio<<4;
pointeur_fonction_Timer2=interrupt;
}
else if (Timer == TIM3)
{
NVIC->IPR[29] = Prio<<4;
pointeur_fonction_Timer3=interrupt;
}
else if (Timer == TIM4)
{
NVIC->IPR[30] = Prio<<4;
pointeur_fonction_Timer4=interrupt;
}
else if (Timer == TIM1)
{
NVIC->IPR[25] = Prio<<4;
pointeur_fonction_Timer1=interrupt;
}
}
void MyTimer_PWM(TIM_TypeDef * Timer, char Channel)
{
if (Timer == TIM2 || Timer == TIM3 || Timer == TIM4)
{
if (Channel == 1 || Channel == 2)
{
Timer->CCMR1 &= ~(0x1 << 8*(Channel - 1));
Timer->CCMR1 |= (6 << 4);
Timer->CCER |= (1 << 4*(Channel - 1));
}
else if (Channel == 3 || Channel == 4)
{
Timer->CCMR2 &= ~(0x1 << 8*(Channel - 3));
Timer->CCMR2 |= (6 << 4);
Timer->CCER |= (1 << 4*(Channel - 3));
}
}
}
void MyTimer_PWM_Setup(TIM_TypeDef * Timer, char dutycycle, char channel)
{
if (channel ==1){
Timer->CCR1 = ((Timer->ARR)*(dutycycle))/100;
}else if (channel ==2){
Timer->CCR2 = (Timer->ARR*(dutycycle))/100;
}else if (channel ==3){
Timer->CCR3 = (Timer->ARR*(dutycycle))/100;
}else if (channel ==4){
Timer->CCR4 = (Timer->ARR*(dutycycle))/100;
}
}
void TIM1_UP_IRQHandler(void)
{
TIM1->SR &= ~TIM_SR_UIF;
pointeur_fonction_Timer1();
}
void TIM2_IRQHandler(void)
{
TIM2->SR &= ~TIM_SR_UIF;
pointeur_fonction_Timer2();
}
void TIM3_IRQHandler(void)
{
TIM3->SR &= ~TIM_SR_UIF;
pointeur_fonction_Timer3();
}
void TIM4_IRQHandler(void)
{
TIM4->SR &= ~TIM_SR_UIF;
pointeur_fonction_Timer4();
}