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
- Ustawiamy pin (np. PA15) w trybie GPIO_EXTI (GPIO_EXTI15) – obsłużymy go przerwaniem
- Prawym myszy zmieniamy nazwę, tu KONTAKTRON (używane w kodzie potem)
- włączamy przerwanie – zakładka NVIC – EXTI Line (9-15) interrupts – ENABLED (zaznaczamy)
- W zakładce GPIO dla naszego pinu włączamy: External Interrupt Mode with Falling/Rising edge trigger detection
- 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ę)