Projekt

Allgemein

Profil

Example code » Historie » Version 2

Maximilian Seesslen, 27.01.2026 16:20

1 1 Maximilian Seesslen
h1. Example code
2
3
<pre><code class="cpp">
4 2 Maximilian Seesslen
void TSC_GPIO_Init(void)
5
{
6
   __HAL_RCC_GPIOA_CLK_ENABLE();
7
   GPIO_InitTypeDef GPIO_InitStruct = {0};
8
   GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
9
   GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; // Open Drain
10
   GPIO_InitStruct.Pull = GPIO_NOPULL; // No pull
11
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
12
   GPIO_InitStruct.Alternate = GPIO_AF3_TSC; // AF3 = TSC
13
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
14
}
15
16 1 Maximilian Seesslen
TSC_HandleTypeDef htsc;
17 2 Maximilian Seesslen
18 1 Maximilian Seesslen
void MX_TSC_Init(void) 
19
{ 
20
   htsc.Instance = TSC;
21
   htsc.Init.CTPulseHighLength = TSC_CTPH_2CYCLES;
22
   htsc.Init.CTPulseLowLength = TSC_CTPL_2CYCLES;
23
   htsc.Init.SpreadSpectrum = DISABLE;
24
   htsc.Init.SpreadSpectrumDeviation = 0;
25
   htsc.Init.SpreadSpectrumPrescaler = TSC_SS_PRESC_DIV1;
26
   htsc.Init.PulseGeneratorPrescaler = TSC_PG_PRESC_DIV4;
27
   htsc.Init.MaxCountValue = TSC_MCV_16383;
28
   htsc.Init.IODefaultMode = TSC_IODEF_OUT_PP_LOW;
29
   htsc.Init.SynchroPinPolarity = TSC_SYNC_POLARITY_FALLING;
30
   htsc.Init.AcquisitionMode = TSC_ACQ_MODE_NORMAL;
31
   htsc.Init.MaxCountInterrupt = DISABLE;
32
   if (HAL_TSC_Init(&htsc) != HAL_OK) 
33
   { 
34
      Error_Handler(); 
35
   } 
36
   // IOs konfigurieren
37
   TSC_IOConfigTypeDef IoConfig;
38
   IoConfig.ChannelIOs = TSC_GROUP1_IO1; // PA0
39
   IoConfig.SamplingIOs = TSC_GROUP1_IO2; // PA1
40
   IoConfig.ShieldIOs = 0;
41
   HAL_TSC_IOConfig(&htsc, &IoConfig);
42
}
43
44
45
uint16_t TSC_Read(void)
46
{ 
47
   // Start acquisition
48
   HAL_TSC_Start(&htsc);
49
   // Warten bis fertig
50
   HAL_TSC_PollForAcquisition(&htsc);
51
   // Ergebnis holen (Gruppe 1)
52
   uint16_t value = HAL_TSC_GroupGetValue(&htsc, TSC_GROUP1_IDX);
53
54
   // TSC wieder freigeben
55
   HAL_TSC_Stop(&htsc); 
56
   return value; 
57
}
58
59
60
int main(void)
61
{
62
   HAL_Init(); 
63
   SystemClock_Config();
64
   MX_GPIO_Init();
65
   MX_TSC_Init();
66
   while (1)
67
   {
68
      uint16_t val = TSC_Read();
69
      if (val < 3000)
70
      {
71
         // Taste berührt
72
      } 
73
      else
74
      {
75
         // Taste nicht berührt
76
      }
77
      HAL_Delay(10);
78
   }
79
} 
80
</code></pre>
81
82
nicht berührt:	4000–8000
83
berührt:   	500–3000