91 lines
No EOL
2.2 KiB
C
91 lines
No EOL
2.2 KiB
C
#include <stm32f10x.h>
|
|
#include <MyTimer.h>
|
|
|
|
void (*Ptr_fct_t1) (void);
|
|
void (*Ptr_fct_t2) (void);
|
|
void (*Ptr_fct_t3) (void);
|
|
void (*Ptr_fct_t4) (void);
|
|
|
|
void MyTimer_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);}
|
|
Timer->ARR=ValARR-1;
|
|
Timer->PSC=ValPSC-1;
|
|
}
|
|
|
|
void MyTimer_ActiveIT (TIM_TypeDef *Timer, char Prio, void (*IT_function) (void)){
|
|
if (Timer == TIM2){
|
|
Ptr_fct_t2 = IT_function;
|
|
NVIC->ISER[0] |= 1<<28;
|
|
NVIC->IPR[35] = Prio<<4;
|
|
}
|
|
else if (Timer == TIM3){
|
|
Ptr_fct_t3 = IT_function;
|
|
NVIC->ISER[0] |= 1<<29;
|
|
NVIC->IPR[36] = Prio<<4;
|
|
}
|
|
else if (Timer == TIM4){
|
|
Ptr_fct_t4 = IT_function;
|
|
NVIC->ISER[0] |= 1<<30;
|
|
NVIC->IPR[37] = Prio<<4;
|
|
}
|
|
else if (Timer == TIM1){
|
|
Ptr_fct_t1 = IT_function;
|
|
NVIC->ISER[0] |= 1<<25;
|
|
NVIC->IPR[32] = Prio<<4;
|
|
}
|
|
Timer->DIER|=TIM_DIER_UIE;
|
|
}
|
|
|
|
void Mytimer_PWM(TIM_TypeDef *Timer, char Channel){
|
|
if (Channel == 1) {
|
|
Timer->CCMR1 &=~ TIM_CCMR1_OC1M;
|
|
Timer->CCMR1 |= 0x6 << 4;
|
|
Timer->CCER |= TIM_CCER_CC1E;
|
|
}
|
|
else if (Channel == 2) {
|
|
Timer->CCMR1 &=~ TIM_CCMR1_OC2M;
|
|
Timer->CCMR1 |= 0x6 << 12;
|
|
Timer->CCER |= TIM_CCER_CC2E;
|
|
}
|
|
else if (Channel == 3) {
|
|
Timer->CCMR2 &=~ TIM_CCMR2_OC3M;
|
|
Timer->CCMR2 |= 0x6 << 4;
|
|
Timer->CCER |= TIM_CCER_CC3E;
|
|
}
|
|
else if (Channel == 4) {
|
|
Timer->CCMR2 &=~ TIM_CCMR2_OC4M;
|
|
Timer->CCMR2 |= 0x6 << 12;
|
|
Timer->CCER |= TIM_CCER_CC4E;
|
|
}
|
|
}
|
|
|
|
void Mytimer_PWM_cycle(TIM_TypeDef *Timer, char Channel, int pulse){
|
|
if (Channel == 1) Timer->CCR1 = Timer->ARR*pulse/100;
|
|
else if (Channel == 2) Timer->CCR2 = Timer->ARR*pulse/100;
|
|
else if (Channel == 3) Timer->CCR3 = (Timer->ARR)*pulse/100;
|
|
else if (Channel == 4) Timer->CCR4 = Timer->ARR*pulse/100;
|
|
}
|
|
|
|
|
|
void TIM2_IRQHandler(void){
|
|
TIM2->SR&=~TIM_SR_UIF;
|
|
Ptr_fct_t2();
|
|
}
|
|
|
|
void TIM1_UP_IRQHandler(void){
|
|
TIM1->SR&=~TIM_SR_UIF;
|
|
Ptr_fct_t1();
|
|
}
|
|
|
|
void TIM3_IRQHandler(void){
|
|
TIM3->SR&=~TIM_SR_UIF;
|
|
Ptr_fct_t3();
|
|
}
|
|
|
|
void TIM4_IRQHandler(void){
|
|
TIM4->SR&=~TIM_SR_UIF;
|
|
Ptr_fct_t4();
|
|
} |