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

STM32F3 - Konfiguracja Timera 1

19 Mar 2014 20:52 2208 19
  • Poziom 8  
    Witam.

    Mam taki problem, że próbuje skonfigurować Timer1 tak żeby na kanale 1 był generowany sygnał PWM, który będzie wyprowadzony na pin PA8.

    Skonfigurowałem Timer 1 oraz Timer 3 takimi samymi wartościami, piny PC8 oraz PA8 skonfigurowane jako funkcje alternatywne i sygnały z pinów podane są na LED. W efekcie dioda, która jest sterowana sygnałem z Timera 3 miga, więc generacja PWM działa poprawnie. Natomiast dioda podłączona pod PA8 ledwo się świeci - aż ciężko zauważyć. Użyte rezystory oczywiście te same. Podmieniałem nawet piny PA8 i PC8 i ewidentnie sygnał z PA8 jest niewłaściwy. Może ktoś wie dlaczego. Dołączam kod.

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 38  
    Rożne taktowanie liczników?
  • Poziom 8  
    A czy różne taktowanie nie wpłynełoby tylko na częstotliwość? Wypełnienie i tak powinno być takie same. Więc jedyne co, to dioda powinna migać szybciej lub wolniej.
  • Poziom 38  
    A jak ci będzie bardzo szybko mrugać? To zauważysz?
  • Poziom 8  
    Migania nie zauważe, jednak wypełnienie tak. Dioda powinna świecić na 30% możliwości, a porównanie mam jak jasnym światłem świeci druga dioda z timera 3. Dodam że mam te same diody.
  • Poziom 1  
  • Poziom 8  
    Zgadza się. Procesor to STM32F303VCT6.
    Co prawda zegara sam nie ustawiam, używam projektu z Atolica, w którym wybieram płytke ewaluacyjną taką na której pracuje, czyli STM32F3. Jest tam przygotowana funkcja która ustawia taktowanie zegara z PLL i 72MHz. Przyjmuję że jest to zrobione właściwie. Gdy robiłem inne rzeczy, zawsze przyjmowałem że taktowanie wynosi 72MHz i zawsze wszystko działało.

    A odnośnie tego skąd jest taktowany TIM1 to jak mogę to sprawdzić?
  • Poziom 38  
    Analizując system_init oraz RM
  • Poziom 1  
  • Poziom 8  
    Wygląda na to, że ustawiony jest PLL, a zmieniając częstotliwość nic się nie zmienia. Przecież skoro jedna dioda świeci dość jasno to dlaczego druga nie miałaby tak świecić?

    Generalnie, jeśli ktoś miałby taką płytkę oraz chęci to prosiłbym o wklejenie tego kodu i sprawdzenie. Może moja płytka jest uszkodzona.
  • Poziom 38  
    korasboss napisał:
    Wygląda na to, że ustawiony jest PLL, a zmieniając częstotliwość nic się nie zmienia. Przecież skoro jedna dioda świeci dość jasno to dlaczego druga nie miałaby tak świecić?

    Generalnie, jeśli ktoś miałby taką płytkę oraz chęci to prosiłbym o wklejenie tego kodu i sprawdzenie. Może moja płytka jest uszkodzona.


    Wróżki tu nie znajdziesz. A wniosek o uszkodzeniu płytki jest daleko przesadzony skoro nawet nie wiem co i jak masz skonfigurowane.
  • Poziom 8  
    Tadzik daruj sobie odpowiedzi bo jak narazie żadna twoja uwaga ani nie była trafna ani pomocna. A nie wróżę lecz użyłem debuggera, w którym widać że bit odpowiadający za wybranie źródła taktowania TIM1 jest właśnie PLL. Żebyś oczywiście się nie czepiał odniosę się do RM że chodzi o Bit 8 TIM1SW Timer1 clock source selection w rejestrze RCC_CFGR3. Zmieniałem również źródło na to drugie ale bez skutku.
  • Poziom 38  
    korasboss napisał:
    Tadzik daruj sobie odpowiedzi bo jak narazie żadna twoja uwaga ani nie była trafna ani pomocna. A nie wróżę lecz użyłem debuggera, w którym widać że bit odpowiadający za wybranie źródła taktowania TIM1 jest właśnie PLL. Żebyś oczywiście się nie czepiał odniosę się do RM że chodzi o Bit 8 TIM1SW Timer1 clock source selection w rejestrze RCC_CFGR3. Zmieniałem również źródło na to drugie ale bez skutku.


    Żarty sobie stroisz? Przedstawiłem ci problemy, udajesz greka bo nawet nie wiesz gdzie sprawdzić, a to twoje CHYBA dyskwalifikuje każdą twoją wypowiedź.

    Masz debugger sprawdź bity, przelicz taktowania ITP ITD.

    Odpal oba liczniki w klasyczny sposób np generując 5hz porównaj.

    Nie pokazałeś najważniejszej części kodu o której istnieniu ty autor nie masz pojęcia. To jakiej, że niby pomocy oczekujesz hm....?

    Skoro to już sprawdziłeś to racz łaskawie, poprawnie zdefiniować taktowanie obu liczników.
  • Poziom 8  
    TIM3 taktowany jest zegarem 36MHz, TIM1 72MHz. Teraz jednak ustawiłem aby TIM1 był taktowany tym samym zegarem co TIM3. Jeśli TIM1 ustawie w tryb tracy "Timing" I przelaczam stan diody w przerwaniu od timera wszystko działa poprawnie. Jednak gdy próbuje ustawić tryb w PWM a pin zmienić aby pełnił funkcję alternatywna czyli na jego wyjsciu byl sygnal tego PWM to już nie działa.
  • Poziom 38  
    Za RM0316 17.3.9

    Cytat:
    As the preload registers are transferred to the shadow registers only when an update event
    occurs, before starting the counter, you have to initialize all the registers by setting the UG
    bit in the TIMx_EGR register.



    Czyżby zadziałało?
  • Poziom 8  
    To nie to. Ale właśnie rozwiązałem problem. Brakło jednej linijki, a mianowicie:
    TIM_CtrlPWMOutputs(TIM1, ENABLE);
    Funkcja ta odblokowuje wyjścia kanałów. (Ustawia Bit 15 MOE: Main output enable w rejestrze TIMx_BDTR). Temat do zamknięcia.
  • Poziom 9  
    Pozwoliłem sobie wykorzystać Twój kod ale potrzebuję zmianę na PE8. Na STM32F3 PE8 również jest pod TIM1, więc myślałem, że nie będzie problemu.

    Czy wie ktoś jak zamienić PC8 na PE8 lub ma inny kod? Kod, który używam to:

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 8  
    Skonfiguruj port E zamiast portu C, bo chyba przeoczyłeś :)
  • Poziom 9  
    To jest fragment, który zmieniłem, o czymś zapomniałem?

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 9  
    Problem rozwiązany. Źle konfigurowałem alternating function dla portu E :)