Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 3 sty 2025, o 11:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 13 gru 2014, o 13:07 
Offline
Nowy

Dołączył(a): 19 cze 2014
Posty: 18
Lokalizacja: Wrocław
Pomógł: 0

Witajcie.

Od jakiegoś czasu męczę się z zapaleniem wbudowanej diody LD3 podłączonej do pinu PC9. Na schemacie można zobaczyć, że katoda do masy, więc należy podać stan wysoki na pin.
Chcę ją zapalić korzystając jedynie z biblioteki procesora, bez nakładek do GPIO i RCC, aby dowiedzieć się jak wszystko działa, ale poległem. Próbowałem analizować działanie gotowych bibliotek, a nawet kod asemblera, aby wiedzieć co gdzie i ile jest wpisywane, ale także nic.

Oto mój kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Podłączam zegar do Portu C wpisując "1" na czwarty bit rejestru APB2ENR. W kolejnej linijce modyfikuję funkcje pinu 9.: CNF 00 - push-pull, MODE 01 - taktowanie 10MHz. Na koniec na Pin 9. podaję "1". Dioda mimo to nie zapala się. O czym zapomniałem?
Próbowałem też włączać zegary w rejestrze CR (HISION i HSI) - także nic.

Proszę o radę. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2014, o 14:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8589
Pomógł: 337

http://www.sunduino.pl/wordpress/kurs-p ... discovery/

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2014, o 14:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

A skonfigurowałeś zegary dla całego procka?

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2014, o 14:53 

Pomógł: 0

Nie wiem czy akurat to jest przyczyną, ale ta operacja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
jest bez sensu ;) Rejestr BSRR jest "write only". Powinno być:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wpisanie jedynki na danej pozycji rejestru BSRR ustawia/kasuje odpowiedni bit w rejestrze ODR. Zera można wpisywać do woli - nic nie zmieniają - dzięki temu BSRR pozwala na atomowe machanie nóżkami mikrokontrolera.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2014, o 15:26 
Offline
Nowy

Dołączył(a): 19 cze 2014
Posty: 18
Lokalizacja: Wrocław
Pomógł: 0

@PJS - Chodzi o coś takiego?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Z tym próbowałem i nic.

@wwojtek - OR nic nie zmieni. Bezpieczna wersja wpisywania do rejestrów. Zmiana na = nic nie zmieniła, ale faktycznie masz rację, że wystarczy przyrównać.

@SunRiver - Strona jest w moich zakładkach. :)
Przeglądałem wszystkie wpisy dotyczące GPIO, ale używasz nakładek do RCC, GPIO i samego Discovery, a ja na początek chciałbym grzebać na samych rejestrach przy wykorzystaniu jedynie stm32f10x.h, czyli na takim najniższym poziomie. Z gotowców typu LEDon, LEDInit korzystałem z pozytywnym rezultatem, ale nie daje mi to satysfakcji, że zrobiłem to sam. Coś jak z Arduino za którym nie przepadam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2014, o 20:55 

Pomógł: 0

MAM (chyba)! ;d

1. zegarów nie musisz zmieniać - po resecie SYSCLK jest brany z HSI więc taktowanie będzie
2. ustawianie bitu RCC_CFGR_SWS_HSI jest w ogóle bez sensu - cytat z ref. manuala: "Set and cleared by hardware..." - to tylko flaga
3. RCC_CFGR_SW_HSI - jest ustawiony domyślnie po resecie, więc też nie trzeba zmieniać

4. OR w BSRR robi różnicę - do "orowania" rejestr musi zostać odczytany, a BSRR jest "write only" - w sumie nie wiem jaki efekt da czytanie rejestru "tylko do zapisu" :) ale dla św. spokoju bym tego unikał

5. meritum - nie działa, bo ustawiasz pin w tryb Open-Drain a nie Push-Pull: błąd jest w "bezpiecznym ustawianiu rejestrów" - sprawdź w reference manualu jaką wartość ma CRL i CRH po resecie ;)


Autor postu otrzymał pochwałę


Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2014, o 00:00 
Offline
Nowy

Dołączył(a): 19 cze 2014
Posty: 18
Lokalizacja: Wrocław
Pomógł: 0

Z tym taktowaniem też mi było dziwne, bo żadna biblioteka nie włączała zegara i nikt w mruganiu diodą nie pisał takiego kodu.

Faktycznie. Drugi i szósty bit każdego bajtu jest ustawiony na 1 (01000100). Nawyki z AVR, gdzie chyba wszystkie są ustawiane na 0 po resecie.
Teraz będę na to zwracał większą uwagę.
Co do OR'a to zapytam jakiegoś doktora na uczelni jak to jest, bo sam ciekawy jestem.


No i, ha! Działa! Wielkie dzięki. :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO