 unsigned invar;
  unsigned DigFil(unsigned invar)
{
    long sumnum=0, sumden=0, newin=0;
    static long states[2][2] = {
        {0,0},
        {0,0}
    };
        newin = invar*200000/101833;
            sumnum = sumden = 0;
            sumden += states[0][0]-states[0][0]/227;
            sumnum -= states[0][0];
             states[0][0] = states[0][1];
             sumden -= states[0][1]*2-states[0][1]/18;
            states[0][1] = (newin-sumden);
            sumnum += states[0][1];
            newin = sumnum;
            sumnum = sumden = 0;
            sumden += states[1][0]-states[1][0]/222;
            sumnum -= states[1][0];
             states[1][0] = states[1][0+1];
             sumden -= states[1][1]*2-states[1][1]/18;
            states[1][1] = (newin-sumden);
            sumnum += states[1][1];
            newin = sumnum/200000;
         if(newin>2045)  newin=2045 ;
         if(newin<-2045)  newin=-2045 ;
        return newin;
    }
 void Timer2_interrupt() iv IVT_INT_TIM2 {
  TIM2_SR.UIF = 0;
  invar =  ADC1_Get_Sample(6);
   GPIOB_ODR = 2045 + DigFil( invar);
}
void main() {
  GPIO_Digital_Output(&GPIOB_BASE, _GPIO_PINMASK_ALL );
AFIOEN_bit=1;
SWJ_CFG0_bit=0;
SWJ_CFG1_bit=1;
SWJ_CFG2_bit=0;
  ADC_Set_Input_Channel(6);
  ADC1_Init();
 RCC_APB1ENR.TIM2EN = 1;
  TIM2_CR1.CEN = 0;
  TIM2_PSC = 0;
  TIM2_ARR = 479;
  NVIC_IntEnable(IVT_INT_TIM2);
  TIM2_DIER.UIE = 1;
  TIM2_CR1.CEN = 1;
}