Autor w końcu znalazł nieco czasu, aby poeksperymentować z płytką STM32F4-Discovery, którą kupił jeszcze w zeszłym roku. Jak w przypadku innych mikroprocesorów, naukę dobrze jest zacząć od obsługi pinów GPIO.
Ponieważ na płytce STM32F4-Discovery wyjścia zorganizowane są w dwu dwurzędowych złączach, nie można jej bezpośrednio wpiąć w płytkę stykową ze względu na zwarcie sąsiednich wyprowadzeń. Dlatego też autor zbudował adapter dla płytki ewaluacyjnej, wyprowadzając na pięć jednorzędowych złącz szpilkowych piny poszczególnych portów, od PORTA do PORTE, zorganizowane następująco:
3V3 GND P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 GND 5V0
Jako że każde złącze ma 20 szpilek, można użyć standardowego kabla IDE do połączenia adaptera z płytką stykową.
Aby przetestować działanie układu, autor użył równoległego przetwornika D/A, którego stosunkowo łatwo „okiełznać”. Procesor STM32F4 został połączony z układem AD5330 przy użyciu 8-bitowej szyny danych. Do podstawowej kontroli pracy przetwornika D/A potrzebne jest 9 pinów mikrokontrolera – 8 dla danych i jeden do sterowania układem. Układ AD5330 pracuje z niebuforowanym, ustalonym na napięcie zasilania, napięciem odniesienia Vref i ze wzmocnieniem wyjściowym wynoszącym jeden.
Poniższy kod pokazuje, jak generować sinusoidę o częstotliwości 60 Hz z 256 próbek, używając metody bit-bang. Ponieważ ze swej natury sinusoida jest symetryczna, wystarczy w pamięci procesora zapisać wartości odpowiadające zakresowi od 0 do π/4. Wartości z zakresu [π/4, 2π] zostaną wygenerowane przez odpowiednie przesuwanie zapisanego fragmentu sinusoidy o π/4.
Kod: C / C++
Jak widać, kod jest całkiem prosty. Ogólnie, aby użyć któregokolwiek pinu GPIO procesora STM32F4, należy najpierw odblokować zegar dla tego portu. Następnie należy ustawić funkcje (wejście/wyjście) dla pinów. Rejestry BSRRH i BSRRL są używane do zmiany stanu pinów. W podprogramie write() dane dla DAC są wystawiane na 8 niższych pinów portu D, a następnie na wejście WR przetwornika jest podawana 1, aby ustalić napięcie na jego wyjściu. W zależności od szybkości użytego przetwornika może być wymagane opóźnienie pomiędzy podawaniem kolejnych danych.
Wykorzystując 256 próbek, wyjściowa sinusoida jest całkiem „gładka”, jak można zobaczyć poniżej.
Źródło
Fajne? Ranking DIY
