Aktionen
Example code » Historie » Revision 2
« Zurück |
Revision 2/3
(diff)
| Weiter »
Maximilian Seesslen, 27.01.2026 16:20
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
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 13 Stunden aktualisiert · 2 Revisionen