Mechaniczne switche tak jak kontaktrony podłączamy przez połączenie GPIO w trybie INPUT do masy, z włączoną opcją Pull-Up.

Hardware

STM32 -> KONTAKTRON
PIN (np. PA15) -> PRZEWÓD 1 (dowolny)
GND -> PRZEWÓD 2 (dowolny)

CubeMX

  1. Ustawiamy pin (np. PA15) w trybie GPIO_EXTI (GPIO_EXTI15) – obsłużymy go przerwaniem
  2. Prawym myszy zmieniamy nazwę, tu KONTAKTRON (używane w kodzie potem)
  3. włączamy przerwanie – zakładka NVIC – EXTI Line (9-15) interrupts – ENABLED (zaznaczamy)
  4. W zakładce GPIO dla naszego pinu włączamy: External Interrupt Mode with Falling/Rising edge trigger detection
  5. niżej w tej samej zakładce – GPIO Pull-up/down: PULL-UP (ważne).

Przerwanie

UWAGA! W trybie Pull-up odczyty są „odwrotne” tj. 0 oznacza zwarcie w obwodzie włącznika, 1 brak zamknięcia obwodu włącznika.
Przykład przerwania w sekcji USER CODE BEGIN 4 dodajemy przerwanie naszego kontaktrona:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* USER CODE BEGIN PV */
volatile uint8_t kontaktronRequest = 0;
/...

/* USER CODE END PV */


/* USER CODE BEGIN 3 */
//...
                  if (kontaktronRequest)
                  {
                          printfx("Kontaktron: %i\r\n", HAL_GPIO_ReadPin(KONTAKTRON_GPIO_Port, KONTAKTRON_Pin)); //odwrotny odczyt
                          kontaktronRequest = 0;
                  }
//...
  /* USER CODE END 3 */



/* USER CODE BEGIN 4 */

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
                switch(GPIO_Pin)
                {
       
                        case KONTAKTRON_Pin:
                                kontaktronRequest = 1;
                        break;
                }
}
// ...
/* USER CODE END 4 */

To do

Trzeba zabezpieczyć kontaktron przed przypadkowymi włączeniami na początku kontaktu czujnika (opóźnienie np. 50ms da radę)

C, C++, STM32