Touch STM32 TSC滑块\u 3 Chu电容式触摸\u STM32F072发现\u 0…255范围内的分辨率和位置计算
为了理解基于电容触摸/TSC库的应用程序,我一直在研究AN5105中针对STM32F072B Disco评估板给出的基于轮询的示例代码。在调整代码以定制应用程序后,我有几个问题,如下所示,我无法理解,即使在查看了ST的各种应用说明后,也找不到任何解释。您的输入将非常感谢,并将非常有助于我澄清TSC的概念Touch STM32 TSC滑块\u 3 Chu电容式触摸\u STM32F072发现\u 0…255范围内的分辨率和位置计算,touch,stm32,stm32f0,Touch,Stm32,Stm32f0,为了理解基于电容触摸/TSC库的应用程序,我一直在研究AN5105中针对STM32F072B Disco评估板给出的基于轮询的示例代码。在调整代码以定制应用程序后,我有几个问题,如下所示,我无法理解,即使在查看了ST的各种应用说明后,也找不到任何解释。您的输入将非常感谢,并将非常有助于我澄清TSC的概念 滑块上0…255范围内的触摸位置的分辨率和计算: TSC提供的头文件tsl_conf.h具有以下参数: #定义TSLPRM_LINROT_分辨率(7)//以位数表示的位置分辨率(范围=1..8)
#定义TSLPRM_LINROT_分辨率(7)
//以位数表示的位置分辨率(范围=1..8)
#定义TSLPRM#u使用_3CH_LIN_H(1)
//半端电极设计
MyLinRots[0]。p_Data->Position structure用于比较0…255范围内的位置值,但我无法理解滑块/通道上触摸的值和位置的相关性。分辨率值1..8如何影响此计算?是否有基于分辨率参数的公式来计算位置值,基于滑块上接触的通道
在AN5105中给出的示例代码中,我试图使用以下代码使4个LED均匀分布在整个滑块的0…255范围内,但无法理解用于与MyLinRots[0]进行比较的值的计算。p_Data->Position structure:
if(MyLinRots[0].p_Data->StateId == TSL_STATEID_DETECT)
{
}
#define TSLPRM_TKEY_DETECT_IN_TH (50)
通过此更改,我得到如下编译错误:
../Middlewares/ST/STM32_TouchSensing_Library/inc/tsl_check_config.h(162): error: #35: #error directive: "TSLPRM_TKEY_DETECT_OUT_TH is out of range (TSLPRM_TKEY_PROX_IN_TH+1 .. TSLPRM_TKEY_DETECT_IN_TH-1)."
用户代码如下:
//私有宏
#定义测试密钥(NB)((MyTKeys[(NB)].p_数据->StateId==TSL_StateId_检测);(MyTKeys[(NB)].p_数据->StateId==TSL_StateId_释放检测)|(MyTKeys[(NB)].p_数据->StateId==TSL_StateId_触摸)|(MyTKeys.p_数据->StateId==TSL_检测)
我不明白我做错了什么,我如何在这个滑块上配置3个可调检测阈值的触摸键
我已经在Keil中完成了这个项目,我可以分享它来更好地理解这个问题
非常感谢您对这些问题的支持,这将有助于我理解和学习TSC和Touch应用程序
谢谢。我是否可以将我的项目附加到这里,这可能有助于理解错误?谢谢,我是否可以将我的项目附加在这里,这可能有助于理解错误?非常感谢。
#define TSLPRM_TKEY_DETECT_IN_TH (50)
../Middlewares/ST/STM32_TouchSensing_Library/inc/tsl_check_config.h(162): error: #35: #error directive: "TSLPRM_TKEY_DETECT_OUT_TH is out of range (TSLPRM_TKEY_PROX_IN_TH+1 .. TSLPRM_TKEY_DETECT_IN_TH-1)."
while (1)
{
if (tsl_user_Exec() == TSL_STATUS_OK)
{
ProcessSensors(); // Execute sensors related tasks
}
}
void ProcessSensors (void)
{
if (TEST_TKEY(0))
{
HAL_GPIO_WritePin(LD4_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(LD4_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
}
if (TEST_TKEY(1))
{
HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_RESET);
}
if (TEST_TKEY(2))
{
HAL_GPIO_WritePin(LD4_GPIO_Port, LD5_Pin, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(LD4_GPIO_Port, LD5_Pin, GPIO_PIN_RESET);
}
}
static void MX_TSC_Init(void)
{
/** Configure the TSC peripheral
htsc.Instance = TSC;
htsc.Init.CTPulseHighLength = TSC_CTPH_2CYCLES;
htsc.Init.CTPulseLowLength = TSC_CTPL_2CYCLES;
htsc.Init.SpreadSpectrum = DISABLE;
htsc.Init.SpreadSpectrumDeviation = 1;
htsc.Init.SpreadSpectrumPrescaler = TSC_SS_PRESC_DIV1;
htsc.Init.PulseGeneratorPrescaler = TSC_PG_PRESC_DIV4;
htsc.Init.MaxCountValue = TSC_MCV_8191;
htsc.Init.IODefaultMode = TSC_IODEF_OUT_PP_LOW;
htsc.Init.SynchroPinPolarity = TSC_SYNC_POLARITY_FALLING;
htsc.Init.AcquisitionMode = TSC_ACQ_MODE_NORMAL;
htsc.Init.MaxCountInterrupt = DISABLE;
htsc.Init.ChannelIOs = TSC_GROUP1_IO3|TSC_GROUP2_IO3|TSC_GROUP3_IO2;
htsc.Init.ShieldIOs = 0;
htsc.Init.SamplingIOs = TSC_GROUP1_IO4|TSC_GROUP2_IO4|TSC_GROUP3_IO3;
if (HAL_TSC_Init(&htsc) != HAL_OK)
{
Error_Handler();
}
}