242 lines
6.0 KiB
C
242 lines
6.0 KiB
C
|
/**
|
|||
|
******************************************************************************
|
|||
|
* @file bsp_touchpad.c
|
|||
|
* @author fire
|
|||
|
* @version V1.0
|
|||
|
* @date 2015-xx-xx
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
******************************************************************************
|
|||
|
* @attention
|
|||
|
*
|
|||
|
* ʵ<EFBFBD><EFBFBD>ƽ̨:Ұ<EFBFBD><EFBFBD> STM32 H750 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>̳ :http://www.firebbs.cn
|
|||
|
* <EFBFBD>Ա<EFBFBD> :https://fire-stm32.taobao.com
|
|||
|
*
|
|||
|
******************************************************************************
|
|||
|
*/
|
|||
|
#include "./touch_pad/bsp_touchpad.h"
|
|||
|
#include "./delay/core_delay.h"
|
|||
|
|
|||
|
TIM_HandleTypeDef TIM_Handle;
|
|||
|
//<2F><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
__IO uint16_t tpad_default_val=0;
|
|||
|
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
#define TPAD_ARR_MAX_VAL 0XFFFF
|
|||
|
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(tpad_default_val + TPAD_GATE_VAL),<2C><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>.
|
|||
|
#define TPAD_GATE_VAL 100
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ纯<EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
static void TPAD_Reset(void)
|
|||
|
{
|
|||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitStructure.Pin = TPAD_TIM_CH_PIN;
|
|||
|
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
|
|||
|
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
|
|||
|
GPIO_InitStructure.Pull = GPIO_PULLDOWN;
|
|||
|
HAL_GPIO_Init(TPAD_TIM_CH_PORT, &GPIO_InitStructure);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ,<2C>ŵ<EFBFBD>
|
|||
|
HAL_GPIO_WritePin(TPAD_TIM_CH_PORT, TPAD_TIM_CH_PIN ,GPIO_PIN_RESET);
|
|||
|
//<2F><><EFBFBD><EFBFBD>һС<D2BB><D0A1>ʱ<EFBFBD><CAB1><EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>֤<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>ȫ
|
|||
|
HAL_Delay(5);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>־
|
|||
|
__HAL_TIM_CLEAR_FLAG(&TIM_Handle,TIM_FLAG_CC1);
|
|||
|
__HAL_TIM_CLEAR_FLAG(&TIM_Handle,TIM_FLAG_UPDATE);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
|||
|
__HAL_TIM_SET_COUNTER(&TIM_Handle,0);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ù<EFBFBD><C3B9>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitStructure.Pin = TPAD_TIM_CH_PIN;
|
|||
|
GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
|
|||
|
GPIO_InitStructure.Alternate = TPAD_TIMx_AF;
|
|||
|
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
|
|||
|
GPIO_InitStructure.Pull = GPIO_NOPULL;
|
|||
|
HAL_GPIO_Init(TPAD_TIM_CH_PORT,&GPIO_InitStructure);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>TIMx<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void TIM_Mode_Config(void)
|
|||
|
{
|
|||
|
TIM_IC_InitTypeDef TIM_IC_Config;
|
|||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|||
|
|
|||
|
TPAD_TIM_CLK_ENABLE();
|
|||
|
TPAD_TIM_GPIO_CLK_ENABLE();
|
|||
|
|
|||
|
//<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitStructure.Pin = TPAD_TIM_CH_PIN;
|
|||
|
//<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>
|
|||
|
GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
|
|||
|
GPIO_InitStructure.Alternate = TPAD_TIMx_AF;
|
|||
|
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
GPIO_InitStructure.Pull = GPIO_NOPULL;
|
|||
|
HAL_GPIO_Init(TPAD_TIM_CH_PORT, &GPIO_InitStructure);
|
|||
|
|
|||
|
TIM_Handle.Instance = TPAD_TIMx;
|
|||
|
TIM_Handle.Init.RepetitionCounter = 0;
|
|||
|
|
|||
|
TIM_Handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
|||
|
TIM_Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|||
|
TIM_Handle.Init.Period = TPAD_ARR_MAX_VAL;
|
|||
|
//<2F>趨<EFBFBD><E8B6A8>ʱ<EFBFBD><CAB1>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5>Ŀ<EFBFBD><C4BF>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD><CEAA>9MHz(200Mhz/22)
|
|||
|
TIM_Handle.Init.Prescaler = 23 - 1;
|
|||
|
|
|||
|
HAL_TIM_IC_Init(&TIM_Handle);
|
|||
|
|
|||
|
TIM_IC_Config.ICFilter = 0;
|
|||
|
TIM_IC_Config.ICPolarity = TIM_ICPOLARITY_RISING;
|
|||
|
TIM_IC_Config.ICPrescaler = TIM_ICPSC_DIV1;
|
|||
|
TIM_IC_Config.ICSelection = TIM_ICSELECTION_DIRECTTI;
|
|||
|
HAL_TIM_IC_ConfigChannel(&TIM_Handle, &TIM_IC_Config, TPAD_TIM_Channel_X);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>TIM
|
|||
|
HAL_TIM_IC_Start(&TIM_Handle, TPAD_TIM_Channel_X);
|
|||
|
}
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval TIMx_CCRx<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
*/
|
|||
|
static uint16_t TPAD_Get_Val(void)
|
|||
|
{
|
|||
|
uint16_t temp;
|
|||
|
/* <20>ȷŵ<C8B7><C5B5><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
TPAD_Reset();
|
|||
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
while(__HAL_TIM_GET_FLAG(&TIM_Handle,TIM_FLAG_CC1) == RESET )
|
|||
|
{
|
|||
|
//<2F><>ʱ<EFBFBD><CAB1>,ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>CNT<4E><54>ֵ
|
|||
|
if(__HAL_TIM_GET_COUNTER( &TIM_Handle)>TPAD_ARR_MAX_VAL-500)
|
|||
|
return __HAL_TIM_GET_COUNTER(&TIM_Handle);
|
|||
|
};
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>TIMx_CCRx<52>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ */
|
|||
|
temp = HAL_TIM_ReadCapturedValue(&TIM_Handle, TPAD_TIM_Channel_X);
|
|||
|
// printf("scan_rval=%d\n",temp);
|
|||
|
return temp;
|
|||
|
}
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>β<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
* @param n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval n<EFBFBD>ζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
*/
|
|||
|
static uint16_t TPAD_Get_MaxVal(uint8_t n)
|
|||
|
{
|
|||
|
uint16_t temp=0;
|
|||
|
uint16_t res=0;
|
|||
|
while(n--)
|
|||
|
{
|
|||
|
temp=TPAD_Get_Val();//<2F>õ<EFBFBD>һ<EFBFBD><D2BB>ֵ
|
|||
|
if(temp>res)res=temp;
|
|||
|
};
|
|||
|
return res;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @note <EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>ص<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval 0,<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>;1,<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
|
|||
|
uint8_t TPAD_Init(void)
|
|||
|
{
|
|||
|
uint16_t buf[10];
|
|||
|
uint32_t temp=0;
|
|||
|
uint8_t j,i;
|
|||
|
|
|||
|
TIM_Mode_Config();
|
|||
|
|
|||
|
for(i=0;i<10;i++)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ10<31><30>
|
|||
|
{
|
|||
|
buf[i]=TPAD_Get_Val();
|
|||
|
HAL_Delay(10);
|
|||
|
}
|
|||
|
for(i=0;i<9;i++)//<2F><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
for(j=i+1;j<10;j++)
|
|||
|
{
|
|||
|
if(buf[i]>buf[j])//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
temp=buf[i];
|
|||
|
buf[i]=buf[j];
|
|||
|
buf[j]=temp;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
temp=0;
|
|||
|
//ȡ<>м<EFBFBD><D0BC><EFBFBD>6<EFBFBD><36><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>ƽ<EFBFBD><C6BD>
|
|||
|
for(i=2;i<8;i++)
|
|||
|
{
|
|||
|
temp+=buf[i];
|
|||
|
}
|
|||
|
|
|||
|
tpad_default_val=temp/6;
|
|||
|
/* printf<74><66>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ֵTPAD_GATE_VAL<41><4C><EFBFBD><EFBFBD>Ӧ<EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD>Ӧע<D3A6>͵<EFBFBD> */
|
|||
|
//printf("tpad_default_val:%d\r\n",tpad_default_val);
|
|||
|
|
|||
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TPAD_ARR_MAX_VAL/2<><32><EFBFBD><EFBFBD>ֵ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
|||
|
if(tpad_default_val>TPAD_ARR_MAX_VAL/2)
|
|||
|
{
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>躯<EFBFBD><EFBFBD>
|
|||
|
* @note <EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>ص<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ
|
|||
|
* @param mode:0,<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>α<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܰ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>);1,֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
* @retval 0,û<EFBFBD>а<EFBFBD><EFBFBD><EFBFBD>;1,<EFBFBD>а<EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
*/
|
|||
|
uint8_t TPAD_Scan(uint8_t mode)
|
|||
|
{
|
|||
|
//0,<2C><><EFBFBD>Կ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>;>0,<2C><><EFBFBD><EFBFBD><EFBFBD>ܿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
static uint8_t keyen=0;
|
|||
|
//ɨ<><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint8_t res=0;
|
|||
|
//Ĭ<>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ3<CEAA><33>
|
|||
|
uint8_t sample=3;
|
|||
|
//<2F><><EFBFBD><EFBFBD>ֵ
|
|||
|
uint16_t rval;
|
|||
|
|
|||
|
if(mode)
|
|||
|
{
|
|||
|
//֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ6<CEAA><36>
|
|||
|
sample=6;
|
|||
|
//֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
keyen=0;
|
|||
|
}
|
|||
|
/* <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ֵ(<28><><EFBFBD><EFBFBD> sample <20><>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ) */
|
|||
|
rval=TPAD_Get_MaxVal(sample);
|
|||
|
/* printf<74><66>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ֵTPAD_GATE_VAL<41><4C><EFBFBD><EFBFBD>Ӧ<EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD>Ӧע<D3A6>͵<EFBFBD> */
|
|||
|
// printf("scan_rval=%d\n",rval);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>tpad_default_val+TPAD_GATE_VAL,<2C><>С<EFBFBD><D0A1>10<31><30>tpad_default_val,<2C><><EFBFBD><EFBFBD>Ч
|
|||
|
if(rval>(tpad_default_val+TPAD_GATE_VAL)&&rval<(10*tpad_default_val))
|
|||
|
{
|
|||
|
//keyen==0,<2C><>Ч
|
|||
|
if(keyen==0)
|
|||
|
{
|
|||
|
res=1;
|
|||
|
}
|
|||
|
keyen=3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ٹ<EFBFBD>3<EFBFBD><33>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD>ܰ<EFBFBD><DCB0><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
}
|
|||
|
|
|||
|
if(keyen)
|
|||
|
{
|
|||
|
keyen--;
|
|||
|
}
|
|||
|
return res;
|
|||
|
}
|
|||
|
/*********************************************END OF FILE**********************/
|