113 lines
2.3 KiB
C
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();
|
|
}
|
|
|