LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

[PRZYKŁAD] Komunikacja w paśmie ISM i KA-NUCLEO-F411CE

Po zmontowaniu układu można przejść do oprogramowania mikrokontrolera STM32. W pierwszej fazie będę korzystał z konfiguratora STM32CubeMX.

Szczegółowy opis narzędzia CubeMX znajduje się w artykule:

STM32Cube graficzny konfigurator STM32

Najpierw należy dokonać wyboru modelu mikrokontrolera. Po włączeniu programu i uruchomieniu nowego projektu należy wybrać układ STM32F411CEUx.

Następnie pojawia się okno konfiguracji. W zakładzie Pinout należy ustawić przeznaczenie odpowiednich pinów. Dla pinów PA2, PA10, PB3 i PB4 należy ustawić opcję GPIO_Input. Piny PA7, PA9, PB6 i PB7 powinno się ustawić w tryb GPIO_Output. Dodatkowo pin PB10 należy ustawić w tryb GPIO_EXTI10. Jako źródło sygnału należy ustawić zewnętrzny oscylator. Aby to zrobić, trzeba rozwinąć listę RCC znajdująca się po prawej stronie. Następnie z rozwijanej listy High Speed Clock (HSE) należy wybrać Crystal/Ceramic Oscillator.

W zakładce Clock Configuration należy ustawić taką samą konfigurację jak w artykule p.t. [PRZYKŁAD] Sterowanie serwomechanizmem za pomocą joysticka oraz KA-NUCLEO-F411CE. Dla porównania, poniżej znajduje się screenshot aktualnej konfiguracji:

Teraz, po przejściu do zakładki Configuration, należy otworzyć okno GPIO. Tu można nadać pinom odpowiednie etykiety edytując pole User Label. Należy też upewnić się, że pin VT będzie obsługiwał przerwanie od zbocza narastającego. W tym celu w opcję GPIO mode ustawiamy jako External Interrupt Mode with Rising edge trigger detection.

 

Powinno się jeszcze włączyć odpowiednie przerwanie zewnętrzne. W tym celu należy w oknie NVIC należy oznaczyć opcję EXTI line [15:10] interrupts.

Po generacji kodu należy uzupełnić go o potrzebne funkcje. W tym projekcie mikrokontroler będzie reagował na przerwania i cała funkcjonalność będzie zawierać się w funkcji obsługi przerwań. Układ reaguje na przerwanie od pinu VT odbiornika, a więc zostanie obsłużone, gdy którykolwiek z przycisków zostanie wciśnięty. Funkcja przerwań ustala, który przycisk został wciśnięty i zmienia stan pinu skojarzonego z przyciskiem. W przykładzie przycisk A steruje diodą czerwoną, B – diodą zieloną, C – dioda żółtą, a D – buzzerem.

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){

	if (HAL_GPIO_ReadPin(GPIOA, Przycisk_A_Pin)== GPIO_PIN_SET) {
		 HAL_GPIO_TogglePin(GPIOA, Dioda_Czerwona_Pin);

	}
	
	if (HAL_GPIO_ReadPin(GPIOB, Przycisk_B_Pin)== GPIO_PIN_SET) {
		HAL_GPIO_TogglePin(GPIOB, Dioda_Zielona_Pin);

	}
	
	if (HAL_GPIO_ReadPin(GPIOA, Przycisk_C_Pin)== GPIO_PIN_SET) {
		HAL_GPIO_TogglePin(GPIOB, Dioda_Zolta_Pin);
	}
	
	if (HAL_GPIO_ReadPin(GPIOB, Przycisk_D_Pin)== GPIO_PIN_SET) {
		HAL_GPIO_TogglePin(GPIOA, Buzzer_Pin);

	}
}

/* USER CODE END PFP */

W związku z tym, że całe sterowanie zawarte jest w funkcji obsługi przerwań, w pętli głównej nic się nie dzieje. Mimo to warto dodać tam opóźnienie o dużej wartości.

/* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
	  HAL_Delay(200000);
  }

  /* USER CODE END 3 */

Przykład działania układu został przedstawiony na poniższym materiale wideo:

Dodatkowo, zarówno na pilocie jak i odbiorniku można ustawić 8-bitowy adres. Oczywiście adres odbiornika i nadajnika powinny być takie same, aby mogły się one porozumiewać. Ustawienia adresu dokonuje się zwierając wolne piny układu do szyny górnej (zasilania), lub do szyny dolnej (masy). Domyślnie wszystkie piny są rozwarte – nadajnik i odbiornik komunikują się ze sobą. Poniżej przykład ustawienia adresu w nadajniku oraz odbiorniku.

Do pobrania