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的计数频率,望各位大哥大姐赐教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>