Serpine Napisano Styczeń 30, 2016 Udostępnij Napisano Styczeń 30, 2016 Witam wszystkich, piszę do w związku ze strukturą projektu (pliki nagłówkowe, biblioteki itd.). Z pomocą kursu STM32 stworzyłem program który przez USART wysyła temperaturę rdzenia, wartość ADC, napięcie obliczone z potencjometru, stan diody oraz czyści w przerwaniu okienko terminala po naciśnięciu przycisku. Teraz chcę dowiedzieć się się jakim taktowaniem traktowane są poszczególne moduły (ADC itd.) oraz stworzenie takiej struktury aby w main.c było jak najmniej kodu. O ile z tym pierwszym problemu dużego nie ma (pokłony dla dokumentacji z którą jest straszny problem przy np. atmegach), to ze strukturą plików i pomysłem jak to zrobić, już jest. Stworzyłem w projekcie folder Library i pierwszy plik gpio.c, domyślnie ma ich być kilka, np adc.c, irq.c itd. i w tym momencie potrzebuję pomocy, jak to ma w środku wszystko wyglądać abym jedną linijką w main.c uruchamiał cały moduł GPIO który swoje ustawienia (pin, tryb, linia) czerpie z pliku w którym mam to zadeklarowane. Póki co napisałem coś takiego: void GPIOInit(GPIO_TypeDef *portLine, GPIOMode_TypeDef pinNum, GPIOMode_TypeDef pinMode){ //GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); if(pinNum == GPIO_Pin_0 || GPIO_Pin_1 || GPIO_Pin_2 || GPIO_Pin_3 || GPIO_Pin_4 || GPIO_Pin_5|| GPIO_Pin_6 || GPIO_Pin_7 || GPIO_Pin_8 || GPIO_Pin_9 || GPIO_Pin_10 || GPIO_Pin_11 || GPIO_Pin_12 || GPIO_Pin_13 || GPIO_Pin_14 || GPIO_Pin_15){ gpio.GPIO_Pin = pinNum; } if(pinMode == GPIO_Mode_AIN || GPIO_Mode_IN_FLOATING || GPIO_Mode_IPD || GPIO_Mode_Out_OD || GPIO_Mode_Out_PP || GPIO_Mode_AF_OD || GPIO_Mode_AF_PP){ gpio.GPIO_Mode = pinMode; } if(portLine == GPIOA || GPIOB || GPIOC || GPIOD){ GPIO_Init(portLine, &gpio); } } Niestety eclipse wyrzuca multiple definition of'GPIOInit' a jak zmieniam nazwę funkcji na coś innego niż GPIOInit to wyskakuje identyczny błąd, więc jest ona tylko w tym miejscu. Jestem dopiero adeptem w tej dziedzinie i nie mam na tak dużego doświadczenia żeby sobie z tym poradzić, dlatego proszę o pomoc 🙂 Będę zadowolony chociaż z prostych wskazówek co robić, co zmienić... Link do komentarza Share on other sites More sharing options...
Elvis Styczeń 30, 2016 Udostępnij Styczeń 30, 2016 A w jakim pliku masz tą funkcję? I jak włączasz ten plik do main.c? Link do komentarza Share on other sites More sharing options...
Serpine Styczeń 30, 2016 Autor tematu Udostępnij Styczeń 30, 2016 Plik to gpio.c a załączam go tak: #include "gpio.c" przy nie widzi pliku. Link do komentarza Share on other sites More sharing options...
Elvis Styczeń 30, 2016 Udostępnij Styczeń 30, 2016 W języku C nie należy włączać plików z kodem źródłowym (*.c) za pomocą dyrektywy #include. Po to są pliki nagłówkowe (*.h), żeby w nich były deklaracje (czyli nazwy funkcji, ale bez kodu). Powinno być: #include "gpio.h" Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Wojciech Styczeń 30, 2016 Udostępnij Styczeń 30, 2016 if(pinNum == GPIO_Pin_0 || GPIO_Pin_1 || GPIO_Pin_2 || GPIO_Pin_3 || GPIO_Pin_4 || GPIO_Pin_5|| GPIO_Pin_6 || GPIO_Pin_7 || GPIO_Pin_8 || GPIO_Pin_9 || GPIO_Pin_10 || GPIO_Pin_11 || GPIO_Pin_12 || GPIO_Pin_13 || GPIO_Pin_14 || GPIO_Pin_15){ gpio.GPIO_Pin = pinNum; } Poczytaj sobie lepiej jak działają operatory logiczne lub bitowe (i jakie mają priorytety), bo jak już uda Ci się skompilować ten program to zaczniesz narzekać, że źle działa. Link do komentarza Share on other sites More sharing options...
Serpine Styczeń 30, 2016 Autor tematu Udostępnij Styczeń 30, 2016 Jako plik nagłówkowy działa, wgrywa się na płytkę ale nie działa przycisk USER na pinie 13, wejście analog input od potencjometru czy USART działają... (są one też ustawione przez GPIO) EDIT. Faktycznie, z operatorami poknociłem coś, troszkę wstyd. EDIT2. Jutro przepiszę to do switch case, jest jeszcze jakiś sposób aby wrzucić to do jakiejś biblioteki a nie do pliku nagłówkowego? EDIT3. Dobra, podstawowe błędy. Poradziłem sobie. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »