piątek, 11 marca 2016

[1] STM32F4 - Discovery - CubeMx - Mruganie diodami

Ten post będzie zawierał opis wykonania prostego programu za pomocą oprogramowania CubeMx.

Rys. 1. Główne okno programu CubeMx



Tworzenie kodu w CubeMx


W pierwszej kolejności należy stworzyć nowy projekt. Wobec tego wybieramy File -> New Project lub klikamy w napis New Project umieszczony na głównym ekranie. 

Kolejnym krokiem będzie wybranie wykorzystywanego układu. Ja wybieram zakładkę Board Selector w której ustawiam wykorzystywaną przeze mnie płytkę. Można pójść inną drogą tzn. zamiast płytki wybrać sam mikrokontroler. Pozwoli to na trochę większą swobodę w ustawianiu poszczególnych układów. I nie zaciemni obrazu mikrokontrolera przez zajęte piny na płytce prototypowej. 

Rys. 2. Wybrane ustawienia w zakładce Board Selector

Rys. 3. Ustawienia w MCU Selector

Jak już układ został wybrany należy kliknąć OK i przejść do ustawiania wyprowadzeń.

Rys. 4. Okno z wybranym mikrokontrolerem

Teraz czas na ustawienie niezbędnych elementów:

Całość należy rozpocząć od odpowiedniego dobrania zegara poprzez włączenie zewnętrznego bądź wewnętrznego oscylatora. Ja wybrałem opcję zegara zewnętrznego. 

Rys. 5. Ustawienie zegara RCC

Kolejnym krokiem będzie przejście do zakładki Clock Configuration i ustawanie zegarów. Częstotliwość wejściowa wynosi 8MHz, czyli taka jaki kwarc został zamontowany. Dalej należy wybrać odpowiednie dzielniki. Na rysunku 6 przedstawiłem ustawienia dla maksymalnej częstotliwości

Rys. 6. Ustawienie maksylnego taktowania

Dalej należy sprawdzić ustawienia pinów PD12 - PD15. Muszą one być w stanie GPIO_Output. Przy wybraniu płytki discovery będą one już ustawione. Natomiast gdy wybranie zostanie sam mikrokontroler wtedy należy je ustawić poprzez kliknięcie lewym przyciskiem myszy i wybranie odpowiedniej opcji.

Rys. 7. Wybranie ustawień dla pinów

Teraz należy przejść do zakładki Configuration i sprawdzić ustawione dane. Następnie projekt musi zostać zapisany.

Rys. 8. Configutation ustawienie

Rys. 9. Ustawienie wybranych pinów

Rys. 10. Project settings

Wobec tego zostało jeszcze wygenerowanie kodu. Aby tego dokonać trzeba wejść w Project Settings. W tym oknie trzeba wprowadzić nazwę projektu, oraz lokalizację. Pole Toolchain pozwala na wybranie do jakiego programu będzie generowany.

Ja wykorzystuje Keil uVision V5, zainstalowane mam oprogramowanie w programie do tej płytki w wersji 1.0.8. Wobec tego odpowiedni kod do wygenerowania to MDK-ARM V4.

W zakładce Code Generator można wybrać czy kopiować cały projekt czy tylko wymagane pliki. Dodatkowo można wybrać ustawienia dla generowanych plików i ustawienia dla biblioteki HAL.

Programowanie


Po wygenerowaniu kodu otworzy się program z przygotowanym projektem. W nim należy wejść do folderu Application/User a następnie do pliku main. Tam znajduje się ustawienie poszczególnych pinów, włączenie zegara z przygotowanymi przez użytkownika ustawieniami oraz  funkcja główna w której zostanie wprowadzony kod. 

Część kodu zawierająca ustawienie pinów od diod LED wygląda następująco:

  1.   GPIO_InitStruct.Pin = LD4_Pin|LD3_Pin|LD5_Pin|LD6_Pin
  2.                           |Audio_RST_Pin;
  3.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  4.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  5.   GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  6.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

Jedyne co należy wprowadzić aby wykonać mruganie diodami na STM32 to wprowadzić poniższy fragment kodu do pętli while.

  1.   while (1)
  2.   {
  3.   /* USER CODE END WHILE */
  4.         HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_12);
  5.         HAL_Delay(500);
  6.         HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_13);
  7.         HAL_Delay(500);
  8.         HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_14);
  9.         HAL_Delay(500);
  10.         HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_15);
  11.         HAL_Delay(500);
  12.   /* USER CODE BEGIN 3 */
  13.   }