电容触摸按键实验的计数频率的问题

2019-07-21 05:22发布

int main(void)
{                                          
        u8 t=0;         
        Stm32_Clock_Init(9);        //系统时钟设置
        uart_init(72,115200);        //串口初始化为115200
        delay_init(72);                            //延时初始化
        LED_Init();                                  //初始化与LED连接的硬件接口
        TPAD_Init(6);                        //初始化触摸按键
           while(1)
        {                                                                                                             
                if(TPAD_Scan(0))        //成功捕获到了一次上升沿(此函数执行时间至少15ms)
                {
                        LED1=!LED1;                //LED1取反
                }
                t++;
                if(t==15)                 
                {
                        t=0;
                        LED0=!LED0;                //LED0取反,提示程序正在运行
                }
                delay_ms(10);
        }
}

u8 TPAD_Init(u8 psc)
{
        u16 buf[10];
        u16 temp;
        u8 j,i;
        TIM5_CH2_Cap_Init(TPAD_ARR_MAX_VAL,psc-1);//以1Mhz的频率计数
        for(i=0;i<10;i++)//连续读取10次
        {                                 
                buf=TPAD_Get_Val();
                delay_ms(10);            
        }                                    
        for(i=0;i<9;i++)//排序
        {
                for(j=i+1;j<10;j++)
                {
                        if(buf>buf[j])//升序排列
                        {
                                temp=buf;
                                buf=buf[j];
                                buf[j]=temp;
                        }
                }
        }
        temp=0;
        for(i=2;i<8;i++)temp+=buf;//取中间的8个数据进行平均
        tpad_default_val=temp/6;
        printf("tpad_default_val:%d ",tpad_default_val);       
        if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1;//初始化遇到超过TPAD_ARR_MAX_VAL/2的数值,不正常!
        return 0;                                                                           
}



void TIM5_CH2_Cap_Init(u16 arr,u16 psc)
{
        //此部分需手动修改 IO口设置  
        RCC->APB1ENR|=1<<3;           //TIM5 时钟使能
        RCC->APB2ENR|=1<<2;            //使能PORTA时钟

        GPIOA->CRL&=0XFFFFFF0F;        //PA1  输入  
        GPIOA->CRL|=0X00000040;        //浮空输入               
          
        TIM5->ARR=arr;                  //设定计数器自动重装值//刚好1ms   
        TIM5->PSC=psc;                  //预分频器,1M的计数频率         

        TIM5->CCMR1|=1<<8;                //CC2S=01         选择输入端 IC2映射到TI2上
        TIM5->CCMR1|=0<<12;         //IC2F=0011 配置输入滤波器 8个定时器时钟周期滤波
        TIM5->CCMR1|=0<<10;         //IC2PS=00         配置输入分频,不分频

        TIM5->CCER|=0<<5;                 //CC2P=0        上升沿捕获
        TIM5->CCER|=1<<4;                 //CC2E=1         允许捕获计数器的值到捕获寄存器中
                                                                                                                                 
        TIM5->CR1|=0x01;            //使能定时器5
}

为什么会是1Mhz的计数频率,望各位大哥大姐赐教


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。