Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

17169272

marek1972_2 15 Kwi 2018 19:18 42 2
  • #1 15 Kwi 2018 19:18
    marek1972_2
    Poziom 4  

    Jaca napisał:
    Marek_Skalski napisał:
    @Jaca Możesz pokazać konfigurację PLL? Mam pewne podejrzenie, ale do tego potrzebuję zobaczyć jak skonfigurowałeś i włączyłeś PLL.


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pracuje nad czymś innym ale fragment kodu jest podobny.
    U mnie z "0b00 << RCC_PLLCFGR_PLLP_Pos" z zerami nie działa program.
    Zamiast 0b00 działają wszystkie wartości z zakresu 0b01 do 0b11. Tak jak by w reference man. się pomylili.

    Moderowany przez Marek_Skalski:

    Temat wydzieliłem, ponieważ dotyczy innego zagadnienia.





    ----
    Wydzielono z tematu: [STM32F7][C] Wybów i ustawienia źródła taktowania.
    przez Marek_Skalski dnia 15 Kwi 2018 20:22

  • #2 15 Kwi 2018 20:00
    Marek_Skalski
    Moderator Projektowanie

    Pokaż całą funkcję i napisz jaką zmianę wykonujesz lub chcesz wykonać, np. HSI(16)->HSE(8), albo HSI(16)->HSE+PLL(168).
    Jeżeli wiesz, że te 2 bity mają być wyzerowane, to w jakim celu wykonujesz zbędną operację przesuwania zera?
    Jeżeli dobrze czytam ten kawałek funkcji, to chcesz przełączyć taktowanie na HSE. Sygnał z HSE idzie do multipleksera i dalej od razu na magistrale. W tej sytuacji wartości PLLx są bez znaczenia.

  • #3 15 Kwi 2018 20:12
    marek1972_2
    Poziom 4  

    To nie jest mój temat, ja tylko odpowiedziałem na problem. Niejaki 'Jaca' wstawił kod który mu nie działał. Ja mam coś podobnego.

    z mojego programu ta linijka...

    RCC -> PLLCFGR |= 0b10 << RCC_PLLCFGR_PLLP_Pos; // 336MHz / 2 = 168MHz


    działa tylko z wartościami innymi niż 0b00. Tzn program przestaje działać: diody nie migają. Wszystko stoi. Nie sprawdzałem w debugerze czy jednak coś tam żyje.
    Zablokowanie tej linijki też wszystko wyłącza czyli uruchamiając rejestry PLL trzeba je wszystkie ustawić - tak mi się wydaje.
    Chodziło mi o to że może Jaca tego nie zauważył. Jego kod był gdzieś na początku i chyba jednak to nie wymaga osobnego wątku. Sugestia żeby sprawdził.

    Moderowany przez Marek_Skalski:

    Temat usuwam, ponieważ:
    1. W temacie oryginalnym problemem pierwotnie zgłoszonym była niedokładność sygnału taktującego rdzeń, a po analizie okazało się, że problemem jest układ zewnętrzny, który nie obsługuje zadanej prędkości transmisji przez port szeregowy. Taktowanie jest właściwe, a temat został rozwiązany.
    2. Pisanie o błędach w RM jest mocno na wyrost, kiedy użytkownik pokazuje funkcje inicjujące pracę PLL ze szklonymi błędami.
    3. Procedura włączenia taktowania z PLL uwzględnia znacznie więcej niż tylko wypełnienie pól jednego rejestru. Konieczne jest też ustawienie odpowiednich wartości wait state dla pamięci flash. Kolega nic odkrywczego tutaj nie napisał.
    4. Lenistwo: "Nie sprawdzałem w debugerze czy jednak coś tam żyje. ... tak mi się wydaje." Proszę sprawdzić, a nie zgadywać.
    5. "0b10 << RCC_PLLCFGR_PLLP_Pos;" oznacza podział przez 6, nie przez 2. Wprowadzanie w błąd.

    3.1.11. Nie wysyłaj wiadomości, które nic nie wnoszą do dyskusji. Wprowadzają w błąd, są niebezpieczne czy nie rozwiązują problemu użytkownika.