Projekt

Allgemein

Profil

Aktionen

Example code

void TSC_GPIO_Init(void)
{
   __HAL_RCC_GPIOA_CLK_ENABLE();
   GPIO_InitTypeDef GPIO_InitStruct = {0};
   GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
   GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; // Open Drain
   GPIO_InitStruct.Pull = GPIO_NOPULL; // No pull
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
   GPIO_InitStruct.Alternate = GPIO_AF3_TSC; // AF3 = TSC
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

TSC_HandleTypeDef htsc;

void MX_TSC_Init(void) 
{ 
   htsc.Instance = TSC;
   htsc.Init.CTPulseHighLength = TSC_CTPH_2CYCLES;
   htsc.Init.CTPulseLowLength = TSC_CTPL_2CYCLES;
   htsc.Init.SpreadSpectrum = DISABLE;
   htsc.Init.SpreadSpectrumDeviation = 0;
   htsc.Init.SpreadSpectrumPrescaler = TSC_SS_PRESC_DIV1;
   htsc.Init.PulseGeneratorPrescaler = TSC_PG_PRESC_DIV4;
   htsc.Init.MaxCountValue = TSC_MCV_16383;
   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;
   if (HAL_TSC_Init(&htsc) != HAL_OK) 
   { 
      Error_Handler(); 
   } 
   // IOs konfigurieren
   TSC_IOConfigTypeDef IoConfig;
   IoConfig.ChannelIOs = TSC_GROUP1_IO1; // PA0, Sensor
   IoConfig.SamplingIOs = TSC_GROUP1_IO2; // PA1
   IoConfig.ShieldIOs = 0;
   HAL_TSC_IOConfig(&htsc, &IoConfig);
}

uint16_t TSC_Read(void)
{ 
   // Start acquisition
   HAL_TSC_Start(&htsc);
   // Warten bis fertig
   HAL_TSC_PollForAcquisition(&htsc);
   // Ergebnis holen (Gruppe 1)
   uint16_t value = HAL_TSC_GroupGetValue(&htsc, TSC_GROUP1_IDX);

   // TSC wieder freigeben
   HAL_TSC_Stop(&htsc); 
   return value; 
}

int main(void)
{
   HAL_Init(); 
   SystemClock_Config();
   MX_GPIO_Init();
   MX_TSC_Init();
   while (1)
   {
      uint16_t val = TSC_Read();
      if (val < 3000)
      {
         // Taste berührt
      } 
      else
      {
         // Taste nicht berührt
      }
      HAL_Delay(10);
   }
} 

nicht berührt: 4000–8000
berührt: 500–3000

Von Maximilian Seesslen vor etwa 15 Stunden aktualisiert · 3 Revisionen