Skocz do zawartości
Komentator

Kurs STM32 F4 - #4 - Pierwszy projekt, GPIO, przerwania

Pomocna odpowiedź

U mnie to samo z błędem

Symbol 'SysTick_IRQn' could not be resolved main.c /01_GPIO/Src line 129

Usunąłem projekt i zrobiłem nowy w kolejności jak w kursie i błąd zniknął.

I to samo na 2 kompie - tam też nie miałem błędu.

Gdy dodałem nowe LEDy w CubeMX to znowu nie mógł rozpoznać zmiennych LED_Green_GPIO_Port, LED_Green_Pin itd. dopiero po odświeżeniu plików projektu błędy zniknęły.

Kolejna rzecz to zadanie domowe:

Napisałem sam, później wgrałem plik binarny z kursu i nie przełączało mi diod tak płynnie jak na filmie z kursu. Wydaje mi się, że brakuje filtrowania sygnału z przycisku lub funkcji Debounce.

Czy na schemacie płytki (UM1842 na str. 33 - schemat przycisku PA0) przy C36 [NA] nie oznacza not available - czyli nie ma filtrowania sygnału z przycisku i dlatego po naciśnięciu przycisku program przechodzi o kilka kroków na raz (zmienna state).

Podzieli się ktoś spostrzeżeniami?

Udostępnij ten post


Link to post
Share on other sites

Witam

Bardzo dziękuję za świetny kurs, lekko napisany o bardzo praktycznym przekazie bo chyba oto chodzi 🙂

Osobiście ściągnąłem gotowego eclipsa ze strony projektu więc nie musiałem instalować wtyczek

Mam dwie uwagi jak zwykle diabeł tkwi w szczegółach miałem znaczne dwa problemy

1. problem z kompilacją tak jak wcześniej już było napisane z funkcją.

 /* SysTick_IRQn interrupt configuration */
 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

rozwiązaniem jest odhaczenie w MXcube w opcjach generowania projektu opcji "Generate Under Root"

Chciałbym się dowiedzieć do czego jest ta opcja i co ona powoduje ?

2. Drugą większą bolączka było to że po skompilowaniu nic się nie działo przeciągam binarkę do stm utilyty programuję i nic się nie dzieje.

Rozwiązanie było "klasyczne dla Eclipse" przed kompilacją domyślnie projekt nie jest zapisywany aby to zrobić należy wejść w

Window --> Preferences,

rozwijamy zakładkę

General, klikamy na

Workspace i zaznaczamy

Save automatically before build.

Spowoduje to po kliknięciu w młotek zapis wszystkich plików projektu i kompilację.

Z niecierpliwością czekam na możliwość wgrywania bezpośrednio z Eclipsa, zapewne wygoogluje to bo jestem niecierpliwy.

Co do przycisku to przycisk ma wysoką "gałkę" sprzyja to drganiom, poza tym można dodać opóźnianie, wiem że wykorzystując DMA może to nie najbardziej optymalne rozwiązanie ale powinno być lepiej.

Pozdrawiam

Udostępnij ten post


Link to post
Share on other sites
Gdy dodałem nowe LEDy w CubeMX to znowu nie mógł rozpoznać zmiennych LED_Green_GPIO_Port, LED_Green_Pin itd. dopiero po odświeżeniu plików projektu błędy zniknęły.

Tak, po dodaniu własnych etykiet do Cube, aby wszystko działało trzeba przeprowadzić "procedurę naprawczą", a więc wykonać:

Project->Clean

Project->C/C++ Index -> Rebuild

Project->C/C++ Index -> Freshen All FIles

Wydaje mi się, że brakuje filtrowania sygnału z przycisku lub funkcji Debounce.

Czy na schemacie płytki (UM1842 na str. 33 - schemat przycisku PA0) przy C36 [NA] nie oznacza not available - czyli nie ma filtrowania sygnału z przycisku i dlatego po naciśnięciu przycisku program przechodzi o kilka kroków na raz (zmienna state).

Podzieli się ktoś spostrzeżeniami?

Bardzo słuszna uwaga! U mnie jakimś cudem nie było tego problemu i zupełnie nie zwróciłem na to uwagi ale tak, jeśli przyjrzysz się płytce Discovery to faktycznie w miejscu kondensatora C36 (zaraz nad przyciskiem) jest puste miejsce.

Problemem z priorytetem przerwań od SysTicka już się zajmuję. Czy ktoś z mających ten problem mógłby mi przesłać swój projekt w wiadomości prywatnej?

Witam

Bardzo dziękuję za świetny kurs, lekko napisany o bardzo praktycznym przekazie bo chyba oto chodzi 🙂

Cieszę się że komuś służy 🙂

1. problem z kompilacją tak jak wcześniej już było napisane z funkcją.
 /* SysTick_IRQn interrupt configuration */
 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

rozwiązaniem jest odhaczenie w MXcube w opcjach generowania projektu opcji "Generate Under Root"

Chciałbym się dowiedzieć do czego jest ta opcja i co ona powoduje ?

W którym miejscu w Cube znalazłeś opcję "Generate Under Root" ? Nigdy tego nie widziałem i nie mogę się tego doszukać.

Pozdrawiam

Bartek

Udostępnij ten post


Link to post
Share on other sites
Cieszę się że komuś służy

Służy i to bardzo !

Nie znalazłem bardziej przystępnego tutoriala HAL/Cube - można więc domniemywać , że obecnie jest to najlepszy kurs na świecie 🙂

Bartku - wspominałeś, że można uruchomić Cube na Linuksie - próbuję uruchomić Cube pod Eclipse z wymuszeniem SWT_GTK3=0..../eclipse i niestety Cube się wysypuje z komunikatem

JVM terminated. Exit code=1

/usr/bin/java

-Dosgi.requiredJavaVersion=1.6

-XX:MaxPermSize=256m

-Xms40m

-Xmx512m

-jar /home/len/eclipse//plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar

-os linux

-ws gtk

-arch x86_64

-showsplash /home/len/eclipse//plugins/org.eclipse.platform_4.3.2.v20140221-1700/splash.bmp

-launcher /home/len/eclipse/eclipse

-name Eclipse

--launcher.library /home/len/eclipse//plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20140116-2212/eclipse_1508.so

-startup /home/len/eclipse//plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar

--launcher.appendVmargs

-exitdata c6001b

-product org.eclipse.epp.package.cpp.product

-vm /usr/bin/java

-vmargs

-Dosgi.requiredJavaVersion=1.6

-XX:MaxPermSize=256m

-Xms40m

-Xmx512m

-jar /home/len/eclipse//plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar

=========================================

java version "1.7.0_101"

OpenJDK Runtime Environment (IcedTea 2.6.6) (7u101-2.6.6-0ubuntu0.14.04.1)

OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)

=========================================

- czy masz jakieś wskazówki?

Udostępnij ten post


Link to post
Share on other sites
W którym miejscu w Cube znalazłeś opcję "Generate Under Root" ? Nigdy tego nie widziałem i nie mogę się tego doszukać.

Pozdrawiam

Bartek

Udostępnij ten post


Link to post
Share on other sites
... można uruchomić Cube na Linuksie - próbuję uruchomić Cube pod Eclipse z wymuszeniem SWT_GTK3=0..../eclipse i niestety Cube się wysypuje z komunikatem

Update:

dla zainteresowanych Linuksem - CubeMX działa stabilnie (przynajmniej na razie) jako 'standalone' i można bezproblemowo zaimportować wygenerowany projekt pod SWSTM32.

Z niecierpliwością czekam na dalsze odcinki 🙂

Udostępnij ten post


Link to post
Share on other sites

Czesc,
Przy generowaniu kodu przez cubeMX (osobny program) tworzy on zawsze projekt o nazwie "nazwaprojektu configuration". Mam caly czas problem ze spacja w nazwie projektu i za kazdym razem jak aktualizuje kod przez cuba, to musze ja usuwac dla nazwy pliku wyjsciowego. Zauwazylem ze w waszym tutorialu nie ma tego problemu i macie nazwe projektu " costam_output". Czy moglbym prosic o wytlumaczenie jak ten problem zostal u was pominiety?

Udostępnij ten post


Link to post
Share on other sites

Cześć.

Ja również używam jako niezależnego narzędzia

Może masz nie najnowszą wersję ja ściągałem ze strony STM

Pozdrawiam

Udostępnij ten post


Link to post
Share on other sites
Czesc,

Przy generowaniu kodu przez cubeMX (osobny program) tworzy on zawsze projekt o nazwie "nazwaprojektu configuration". Mam caly czas problem ze spacja w nazwie projektu i za kazdym razem jak aktualizuje kod przez cuba, to musze ja usuwac dla nazwy pliku wyjsciowego. Zauwazylem ze w waszym tutorialu nie ma tego problemu i macie nazwe projektu " costam_output". Czy moglbym prosic o wytlumaczenie jak ten problem zostal u was pominiety?

Mi też często dodaje słowo "configuration" do nazwy projektu, ale nigdy się tym nie przejmowałem. Czy u Ciebie występują z tego powodu jakieś problemy?

Udostępnij ten post


Link to post
Share on other sites

Panowie mam problemik. Otóż zakupiłem płytke discovery z aliexpress o taką:

http://www.aliexpress.com/snapshot/7356232705.html?orderId=73067872524685

Problem tkwi w tym, ze gdy chce wybrać ją do projektu w Cube'ie, to tak na prawdę żadna nie odpowiada jej parametrom :/

Mamy coś takiego : STM32F407ZIT6 microcontroller featuring 2 MB of Flash memory, 256 KB of RAM in an LQFP144 package.

Poniżej foto z płytakmi , które pasują do parametrów po przefiltrowaniu.

Jak widzicie wszystkie są z innej 'rodziny' niż stm32f407. Co w tym przypadku zrobić? Którą wybrać?

Pozdrawiam

E: wybrałem jakiś mikro i próbowałem skompilować program postępując według instrukcji.

Wyrzuciło mi dwa błędy:

Ktoś wie jak się ich pozbyć? Z tego co wyczytałem jakiś problem z toolchainem, ale jak czemu skoro postępowałem wedle instrukcji?

E2: pomijając pierwszy problem, ktoś wie o co chodzi z tymi błędami? szukałem w necie i pusto. Nawet przeinstalowałem eclipse'a, ale problem pozostoje...

[ Dodano: 23-05-2016, 11:05 ]

Nikt nie ma pomysłu? 😋

Udostępnij ten post


Link to post
Share on other sites

Magit, w komentarzach do kursu staramy się rozmawiać o sprzęcie zgodnym z tym, który polecamy. Inaczej powstaje zamieszanie. Jeśli próbujesz przerabiać ten kurs korzystając z innej platformy załóż proszę osobny temat 🙂

Udostępnij ten post


Link to post
Share on other sites

Czesc, dziekuje za dobry kurs.

Mam jednak pytanie odnosnie obslugi przerwan od zdarzen zewnetrznych przy uzyciu biblioteki HAL. Jest tu pewna niejasnosc:

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == Button_Pin){
	HAL_GPIO_WritePin(LED_Blue_GPIO_Port, LED_Blue_Pin, HAL_GPIO_ReadPin(Button_GPIO_Port, Button_Pin));
}
}
/* USER CODE END PFP */}

Autor podaje w jaki sposob sprawdzic ktory numer pinu spowodowal przerwanie, ale dalej nie wiadomo ktory port (A, B, C itd.). Ponadto nie wiadomo czy przerwanie bylo od falling czy rising edge, ale powiedzy moze to mozna sprawdzic odczytujac aktualny stan wyjscia. Ale zeby to zrobic, trzeba wiedziec od ktorego portu nastopilo przerwanie. Czy moglbym prosic o pomoc w tej kwestii?

Udostępnij ten post


Link to post
Share on other sites

Bardzo słuszne pytania! Śpieszę z odpowiedzią.

Autor podaje w jaki sposob sprawdzic ktory numer pinu spowodowal przerwanie, ale dalej nie wiadomo ktory port (A, B, C itd.).

Przerwań zewnętrznych może być maksymalnie 16. Każde przerwanie ma unikalny numer (0,1,...,15), ściśle powiązany z numerem pinu, z którego pochodzi. Tylko jedno przerwanie o danym numerze może być zdefiniowane w systemie.

Oznacza to, że jeżeli zdefiniujemy przerwanie GPIO_EXTI_0 od pinu PA0, żaden inny pin 0 nie może być przerwaniem (PB0, PC0 itp.)

Z powyższych rozważań widać, że jeżeli otrzymamy przerwanie o numerze x, może ono pochodzić tylko i wyłącznie od konkretnego pinu na konkretnym porcie, na którym zostało zdefiniowane - tę informację mamy, ponieważ musieliśmy to wcześniej skonfigurować.

Ponadto nie wiadomo czy przerwanie bylo od falling czy rising edge, ale powiedzy moze to mozna sprawdzic odczytujac aktualny stan wyjscia.

Niestety nie ma osobnych przerwań od zbocza narastającego i opadającego. Jedyny sposób na sprawdzenie zbocza jest właśnie taki jak napisałeś - natychmiast po wywołaniu przerwania sprawdzić stan pinu, od którego zostało wywołane przerwanie. Na pytanie jaki port należy sprawdzić odpowiedziałem w wyższej części wiadomości.

Udostępnij ten post


Link to post
Share on other sites

Hej!

Mam problem z labelami CubeMX'a. Jeżeli wygeneruję jakieś, to Cube co prawda robi plik "mxconstants.h" i wszystko tam jest, ale nie dodaje się w main.h automatycznie include do owego pliku, a jak sam zainkluduję, to kompilator i tak nie widzi tych define'ów. Dodam, że odświeżam pliki, itd., itp., zgodnie z podpowiedziami z forum.

Podobnie jest z ADC - po wygenerowaniu przez CubeMX'a kompilator nie widzi żadnych symboli, np. ADC_EOC_SINGLE_CONV, ADC_RESOLUTION_12B, etc. Robiłem wszystko dokładnie tak, jak w kursie napisano!

Bardzo proszę o pomoc.

Notatka z 2016-06-07: a teraz nagle wszystko działa. Przyszedłem po pracy do domu, włączyłem projekt i ani jednego błędu (sic!).

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...