Skip to main content
JanKos
Associate
June 3, 2019
Question

Getting STMTouch driver to work with HAL and CubeMX on STM32F051 (with TSC)

  • June 3, 2019
  • 2 replies
  • 1824 views

Hello,

i am trying to get the 32F0-TOUCH-LIB to work, but so far i didn't succeed.

Processor is an STM32F051C4Tx on a custom board, which works except for the touch functions. There is a touch button for Proximity sensing and two sliders for input.

The project was created with STM32CubeMx (Version 5.2.1):

TSC peripherial:0690X000008i7jiQAA.png

Middleware: Touchsensing

  • Is Enabled
  • TSLPRM_TOTAL_TOUCHKEYS =1
  • IO_TOUCHKEY1=G4_IO4

The code is generated for Atollicstudio and compiles.

And the following changes are made:

  • tsl_user_Init() called after MX_TSC_Init() and  MX_TOUCHSENSING_Init()
  • In the infinite loop tsl_user_Exec() is called

The tsl_user_Exec() always returns TSL_USER_STATUS_BUSY and no activity can be observed at the IO-Port with an oscilloscope.

I compared the functions calls with the STMTouch Driver user manual and everything matches. I even checked the TSL_tim_ProcessIT() call in the Systick ISR. The TSC IRQ doesn't seem to be used in the libraries, because the IRQ-flag gets polled in the tsl_user_Exec().

I believe i missed a small detail, but i can't figure it out myself. I hope that somebody, more experienced with this library can give me a hint...

Thanks in advance

Jan

This topic has been closed for replies.

2 replies

JanKos
JanKosAuthor
Associate
June 5, 2019

I am still struggelling...

If I use the TSC Controller the manual way with the HAL, i atleast see pulses an the touch surfaces. But still no success with the Touch Sensing Library.

 while (1)
 {
 
 
	 HAL_TSC_IODischarge(&htsc, ENABLE);
	 HAL_Delay(1); /* 1 ms is more than enough to discharge all capacitors */
 
	 /*##-3- Start the acquisition process ####################################*/
	 if (HAL_TSC_Start(&htsc) != HAL_OK)
	 {
	 /* Acquisition Error */
	 Error_Handler();
	 }
 
	 /*##-4- Wait for the end of acquisition ##################################*/
	 /* Before starting a new acquisition, you need to check the current state of
	 the peripheral; if it�s busy you need to wait for the end of current
	 acquisition before starting a new one. */
	 while (HAL_TSC_GetState(&htsc) == HAL_TSC_STATE_BUSY)
	 {
	 /* For simplicity reasons, this example is just waiting till the end of the
	 acquisition, but application may perform other tasks while acquisition
	 operation is ongoing. */
	 }
	 // tsl_user_Exec();
 
	 /*##-5- Clear flags ######################################################*/
	 __HAL_TSC_CLEAR_FLAG(&htsc, (TSC_FLAG_EOA | TSC_FLAG_MCE));
 
	 /*##-6- Check if the acquisition is correct (no max count) ###############*/
	 if (HAL_TSC_GroupGetStatus(&htsc, TSC_GROUP1_IDX) == TSC_GROUP_COMPLETED)
	 {
	 /*##-7- Store the acquisition value ####################################*/
	 uhTSCAcquisitionValue = HAL_TSC_GroupGetValue(&htsc, TSC_GROUP2_IDX);
	 if ((uhTSCAcquisitionValue > TSCx_MIN_THRESHOLD) && (uhTSCAcquisitionValue < TSCx_LOW_MAXTHRESHOLD))
	 {
 
	 }
 
	 }
 
....

seren
Associate II
July 3, 2019

Note that there is a bug in HAL_TSC_GroupGetStatus so that it returns wrong status:

https://community.st.com/s/question/0D50X0000B2A2sNSQS/bug-haltscgroupgetstatus-gives-wrong-results