Ankieta: Jaki system operacyjnym preferujesz
Ankieta jest zamknięta.
Windows 60.78% 31 60.78%
Linux 31.37% 16 31.37%
MAC/OS 7.84% 4 7.84%
Inny 0% 0 0%
Razem 51 głosów 100%
*) odpowiedź wybrana przez Ciebie [Wyniki ankiety]

Odpowiedz 
 
Ocena wątku:
  • 1 Głosów - 5 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Programowanie ARM, nauka, środowiska programistyczne IDE
SQ8MVY Offline
Paweł
****

Liczba postów: 724
Dołączył: 30-07-2011
Post: #69
RE: Programowanie ARM, nauka, środowiska programistyczne IDE
Witaj,

Marku, dlaczego uważasz, że w przykładzie ustawienie pinów jest uproszczone ?
Pamiętaj, aby zapoznać się z dokumentem ReferenceManual STM32F4 , w którym opisane są peryferia. Nie trzeba czytać i przerabiać całego. Wystarczy zaglądnąć do konkretnego działu, a stanie się jasność.

Pytałeś się o zegary taktujące - informacje na ten temat znaleźć można w rozdziale 6.2

Należy pamiętać, że domyślnie wszystkie peryferia nie związane z rdzeniem są wyłączone i aby je użyć, należy najpierw włączyć im taktowanie.

Diody na naszej płytce Discovery są podłączone do portu GPIOG, do pinów 13 i 14

Kod:
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOGEN;   // włączamy taktowanie portu GPIOG

Teraz zaglądniemy do rozdziału 6.3.10 i co widzimy ? Rejestr, za pomocą którego włączamy między innymi taktowanie portów. Jak widzisz, każdy port ma swój bit za to odpowiedzialny.

Kod:
GPIOG->MODER |=GPIO_MODER_MODER13_0 | GPIO_MODER_MODER14_0;  // ustawiamy pin 13 i 14 jako wyjście

W rozdziale 8 w/w dokumentu dowiedzieć się można w jakich trybach mogą pracować piny portów, na co wpływają bity konfiguracyjne rejestrów konfiguracyjnych portów. Idąc dalej dojdziemy do rozdziału 8.4, który teraz nas będzie interesował.
Rejestr GPIOx_MODER - ten ustawiamy powyższą linią kodu, a dokładnie bity MODER13 oraz MODER14 jako wyjścia.

Zostały jeszcze do ustawienia GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR. Zobaczmy najpierw jakie mają wartości domyślne i przeczytajmy to co jest pod tabelką każdego z tych rejestrów:

GPIOx_OTYPER - ustawiony jest domyślnie dla GPIOG jako output push-pull, czyli taki tryb nas interesuje, więc po co dodatkowo ustawiać to co jest ustawione ?

GPIOx_OSPEEDR - ustawiony jest domyślnie dla GPIOG jako low-speed - dla diodek nie trzeba nic przestawiać, bo chyba nie ma dla nich różnicy, czy zbocze będzie bardzo strome, czy będzie trochę pochylone. Świecić będą tak samo !!

GPIOx_PUPDR - tego rejestru też nie ma potrzeby ruszać bo i po co, skoro ustawienie w rejestrze GPIOx_OTYPER jest jako wyjście push-pull, więc dodawanie do tego dodatkowo rezystorów pull-up lub pull-down jest bezcelowe i nieekonomiczne

Kod:
GPIOG->ODR |= GPIO_ODR_ODR_13;  //ustawiamy na wyjściu 13 stan wysoki

GPIOx_ODR - rejestr wyjściowy portu. Ważne jest 16 młodszych bitów, które odpowiadają pinom 0..15 danego portu. Odczytując natomiast ten rejestr dostaniemy wartość, która została wpisana !!!

GPIOx_IDR - rejestr tylko do odczytu - odczytując go dostajemy informację o rzeczywistym stanie pinów, nawet jak pracują jako wyjściowe w trybie pull-up lub pull-down, open-drain (ale nie push-pull). Zwierając do masy (stan logiczny 0) lub do Vcc (stan logiczny 1) pin pracujący jako wyjście push-pull prawdopodobnie go uszkodzimy.

Jak więc widzisz, bez podstawowej znajomości dokumentacji i wiedzy jak się po niej poruszać ciężko jest zrozumieć, co jest ustawiane pisząc za pomocą bibliotek HAL, SPL, czy jeszcze innych, które się pojawią. A jak wiesz, w tych bibliotekach, czy jest potrzebne, czy nie i tak się wypełnia całą strukturę i przekazuje ją do funkcji bibliotecznej.

73 Paweł
(Ten post był ostatnio modyfikowany: 07-07-2016 22:04 przez SQ8MVY.)
07-07-2016 21:38
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SQ8MVY - 07-07-2016 21:38

Skocz do:


Użytkownicy przeglądający ten wątek: 37 gości