61 lines
1.6 KiB
C
61 lines
1.6 KiB
C
#include "stm32f10x.h"
|
||
|
||
void MyTimer_Base_Init (TIM_TypeDef * Timer , unsigned short ValARR , unsigned short ValPSC ){
|
||
Timer->ARR = ValARR;
|
||
Timer->PSC = ValPSC;
|
||
};
|
||
/*
|
||
TIM2_CH1
|
||
PWM mode 2 by writing OC1M=’111’ in the TIMx_CCMR1
|
||
|
||
he PWM mode can be selected independently on each channel (one PWM per OCx
|
||
output) by writing ‘110’ (PWM mode 1) or ‘111’ (PWM mode 2) in the OCxM bits in the
|
||
TIMx_CCMRx register. You must enable the corresponding preload register by setting the
|
||
OCxPE bit in the TIMx_CCMRx register, and eventually the auto-reload preload register (in
|
||
upcounting or center-aligned modes) by setting the ARPE bit in the TIMx_CR1 register
|
||
|
||
110: PWM mode 1 - In upcounting, channel 1 is active as long as TIMx_CNT<TIMx_CCR1
|
||
else inactive. In downcounting, channel 1 is inactive (OC1REF=‘0’) as long as
|
||
TIMx_CNT>TIMx_CCR1 else active (OC1REF=’1’).
|
||
|
||
void MyTimer_PWM( TIM_TypeDef * Timer, char Channel){
|
||
Timer->CCMR1
|
||
|
||
|
||
|
||
};
|
||
*/
|
||
|
||
|
||
void (*pFnc) (void);
|
||
|
||
void MyTimer_ActiveIT (TIM_TypeDef * Timer , char prio, void (*IT_function)(void)){
|
||
Timer->DIER |= TIM_DIER_UIE;
|
||
IRQn_Type IRQn;
|
||
if (Timer == TIM2) IRQn = TIM2_IRQn;
|
||
else if (Timer == TIM3) IRQn = TIM3_IRQn;
|
||
else if (Timer == TIM4) IRQn = TIM4_IRQn;
|
||
NVIC_EnableIRQ(IRQn);
|
||
NVIC_SetPriority(IRQn, prio);
|
||
|
||
pFnc = IT_function;
|
||
};
|
||
|
||
|
||
void TIM2_IRQHandler(void){
|
||
if (pFnc != 0){
|
||
(*pFnc) (); /* appel indirect de la fonction */
|
||
}
|
||
TIM2->SR &= ~TIM_SR_UIF;
|
||
};
|
||
|
||
|
||
void TIM3_IRQHandler(void){
|
||
TIM3->SR &= ~TIM_SR_UIF;
|
||
|
||
};
|
||
|
||
void TIM4_IRQHandler(void){
|
||
TIM4->SR &= ~TIM_SR_UIF;
|
||
|
||
};
|