<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=46&amp;t=17309&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-02-19T19:06:22+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=17309&amp;mode</id>
<entry>
<author><name><![CDATA[Kulfi27]]></name></author>
<updated>2017-02-19T19:06:22+01:00</updated>
<published>2017-02-19T19:06:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=183058#p183058</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=183058#p183058"/>
<title type="html"><![CDATA[Re: Stm32f429 Timer_1 pierwsza konfiguracja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=183058#p183058"><![CDATA[
Witam kolegów po czasie temat znowu powrócił z samymi Timerami sobie jakoś już radze teraz chce na rejestrach rozkręcić procka na maksa i mógł by ktoś z was rzucić okiem na kod nie wiem do końca jak to sprawdzić zapewne coś działa bo musiałem pozmieniać czasy dla wyświetlacza<br /><br /><br />[syntax=c]RCC-&gt;CR |= RCC_CR_HSION;                    //Wlaczenie HSI, wpisanie wartosci 1<br /><br /><br />    while(!(RCC-&gt;CR &amp; RCC_CR_HSIRDY));          //czekanie na ustabilizowanie sie sygnalu HSI do momentu az flaga zostanie ustawiona<br /><br /><br />    RCC-&gt;CFGR = (uint32_t)0x00000000;           //Zresetowanie wartosci rejestru RCC_CFGR automatycznie zostaje wybrany zegar systemowy jako HSI<br /><br /><br />    RCC-&gt;PLLCFGR = (uint32_t)0x24003010;        //Zresetowanie ustawien dla rejestru RCC_PLLCFGR<br /><br /><br />    RCC-&gt;CR = (uint32_t)0x00000083;            //Zresetetowanie ustawien w rejestrze CR<br /><br /><br />    RCC-&gt;CIR = 0x00000000;                     //Wylaczenie wszystkich przerwan<br /><br /><br />    RCC-&gt;CR |= 0x00010000;                      //Wlaczenie HSE<br /><br /><br />    while(!(RCC-&gt;CR &amp; 0x00020000));             //Petla oczekujaca na wlaczenie HSE<br /><br /><br />    RCC-&gt;PLLCFGR |=  RCC_CFGR_HPRE_DIV1;          //dzielnik dla szyny AHB<br /><br /><br />    RCC-&gt;PLLCFGR|=  RCC_CFGR_PPRE2_DIV2;         //dzielnik dla szyny APB2  max90mhz<br /><br /><br />    RCC-&gt;PLLCFGR |=  RCC_CFGR_PPRE1_DIV4;        //dzielnik dla szyny APB1 max45mhz<br /><br /><br />    RCC-&gt;PLLCFGR &amp;= ~0x0000003F;                //Ustawienie zegara PLL<br />                                                //Reset wartosci PLLM<br /><br />    RCC-&gt;PLLCFGR |=RCC_PLLCFGR_PLLM_2;           //Wybranie wartosci PLLM na 4<br /><br /><br />    RCC-&gt;PLLCFGR &amp;= ~0x00007FC0;                 //Reset wartosci PLLN<br /><br /><br />    RCC-&gt;PLLCFGR |= 0x00002B00;                  //Wybranie wartosci PLLN jako 180<br /><br /><br />    RCC-&gt;PLLCFGR &amp;= ~0x00030000;                 //Reset wartosci PLLP   Po resecie domyslnie ustawiona wartosc 2<br /><br /><br />    RCC-&gt;PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE;      //Wybranie zrodlo taktowania jako HSE<br /><br /><br />    RCC-&gt;PLLCFGR &amp;= ~0x0F000000;                  //Reset PLLQ<br /><br /><br />    RCC-&gt;PLLCFGR |= 0x040000000;                  //PLLQ ustawione jako wartosc 4<br /><br /><br />    RCC-&gt;CR |= RCC_CR_PLLON;                       //Wlaczenie PLL<br /><br /><br />    while(!(RCC-&gt;CR &amp; 0x02000000))                //Oczekiwanie na gotowosc PLL<br />        __NOP();<br /><br />                                                    /* Configure Flash prefetch, Instruction cache, Data cache and wait state */<br />    FLASH-&gt;ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;<br /><br />                                                               /* Select the main PLL as system clock source */<br />    RCC-&gt;CFGR &amp;= (uint32_t)((uint32_t)~(RCC_CFGR_SW));<br />    RCC-&gt;CFGR |= RCC_CFGR_SW_PLL;<br /><br />                                                                        /* Wait till the main PLL is used as system clock source */<br />    while ((RCC-&gt;CFGR &amp; (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);<br />    {<br />    }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8659">Kulfi27</a> — 19 lut 2017, o 19:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kulfi27]]></name></author>
<updated>2017-01-29T19:04:48+01:00</updated>
<published>2017-01-29T19:04:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=181201#p181201</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=181201#p181201"/>
<title type="html"><![CDATA[Re: Stm32f429 Timer_1 pierwsza konfiguracja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=181201#p181201"><![CDATA[
Jakieś małe postępy już mi się udało zrobić mianowicie Timera1 skonfigurowałem jako PWM na kilku wyjściach <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />, Timer3 jako zwykły licznik, i tak powoli mozolnie nawet LCD 4*20 już śmiga, staram się to wszystko na rejestrach programować.<br />Jeżeli chodzi o debugger to wszystko jest już upchane w Atolicu choć nie do końca umiem z niego korzystać.<br /><br />Kamery jeszcze żadnej nie wybrałem na razie zakupiłem wyświetlacz 480*272 ze sterownikiem SSD1963 wpierw to chciał bym wdrożyć w życie żeby móc coś wyświetlić, więc przede mną jeszcze użycie DMA, komunikacja USART no i zwiększenie częstotliwości dla wszystkich peryferialów jak i rdzenia. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8659">Kulfi27</a> — 29 sty 2017, o 19:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[toch88]]></name></author>
<updated>2017-01-28T08:01:23+01:00</updated>
<published>2017-01-28T08:01:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=181094#p181094</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=181094#p181094"/>
<title type="html"><![CDATA[Re: Stm32f429 Timer_1 pierwsza konfiguracja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=181094#p181094"><![CDATA[
Ściągnij sobie CubeMx tam masz graficzną konfigurację tego samego co jest w dokumentacji STM32.<br />Tak to wygląda. <br /><a href="http://www.st.com/content/ccc/resource/technical/document/user_manual/10/c5/1a/43/3a/70/43/7d/DM00104712.pdf/files/DM00104712.pdf/jcr:content/translations/en.DM00104712.pdf"  class="postlink">Link</a><br /><br /> Tylko wtedy musisz wybrać nie RCC_HSEConfig(RCC_HSE_ON); , RCC_HSI_ON , która prawdopodobnie po resecie jest ustawione już, też jest to opisane w dokumetnacji, jak zajrzysz na strone gdzie jest tabelka z rejestrami (czyli np teraz RCC-&gt;CR) to zobaczysz u góry &quot;RESET VALUE&quot;, czyli to w jaki sposób działa uC po resecie.<br />np:<br />0x0000 XX81b  zastem widzisz że LSB (czyli ten najmniej ważny bit jest 1, zatem HSI domyślnie jest ON) ,<br />potem należy wybrać w CFGR rejestrze co ma być źródłem zegara HCLK.<br /><br />Po pracy dzisiaj uzupełnie ten kod co ci przesąłem to zrozumiesz dlaczego wybrałem takie a nie inne PLL_Q, N, M, P ale możesz do tego dojść sam. tzn<br /><br />Na pewno na tym Clock Tree zauważysz PLL, odążaj linią:<br />Tak można to np skonfigurować:<br />HSI=16MHz<br />HSI/M=16/4=4Mhz<br />HSI/M*N=4Mhz*90=360Mhz<br />(HSI/M*N)*P=180Mhz<br /><br />Spróbuj to policzyć kiedy zegar bedzie miał 8Mhz i będzie zewnętrzny <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> na pewno dasz rade.<br /><br />Co do następnego pytania to musisz sobie odpowiedzieć jakie interfejsy do tego potrzebujesz?<br />-kamerka działa na jaki protokół, jaki ? pewnie SPI<br />-możesz używac sprzetwoego wspomagania dla transferu danych: DMA, zwolni to twój uC z mozolnego kopiowania bitów.<br />-jaki będzie krok bazowy twojego algorytmu główne?<br /><br />No tak naprawdę zrób to przez analogie, przypatrz się tym rejestrom na poczatku próbuj budowy inkrementalnej:<br />-zaświeć diodą bez żadnego przerwania<br />-skonfiguruj RCC i włącz sobie SYSTick, migaj tam diodą co 1 sec, jeżeli masz oscyloskop lub analizator stanów logicznyc to się podłącz i zmierz to, jeżeli nie to miernikiem nawet.<br />-potem jak juz wiesz czy skonfigurowales zegar odpowiednia (systic ci o tym powie), zacznij configuracje TIMERA, najpierw prosto, nie musi być to TIM1 bo jest on najbardziej złożony- co prawda nauczysz się wtedy wszystkich innych timerów ale jeżeli chcesz gładko przez to przejść to lepiej wybierz sobie np TIM5 lub coś takiego.<br />-poczytaj o trybach w dokumentacji, zastanów jak chcesz żeby dział?:góra dół, góra, dół? co ile ma być przerwanie, jaka jednostaka czasu bazowego ma być ustawiona, czy jest ci potrzebna duża rozdzielczość?<br />-jaki juz sobie odpowiesz i skonfigurujesz to zrób tak żęby na wyjściu tego licznika (kanału- czyli portom przypisanym do danego licznika w trybie output) migaj sobie diodą lub podepnij się osc, jeżeli czestotliwość jest ok, to zajmij się przerwaniem tego Timera<br />-kiedy przerwanie ma następować: Update, Compare itd w dokumentacji jest opisane.<br />-w przerwaniu migaj sobie diodą lub czymś co będziesz miał jako indykację że wszystko jest wporzadku <br />-zacznij pisać algortym<br />-czym będziesz wysyłał (jaki interfejs, protokół) i odbierał dane? <br />-Załóż sobie zeszyt i notuj spotrzeżenia, wydrukuj sobie RM (te strony które potrzebujesz np.rejestry clock tree) i komentuj je sobie , pisz spostrzeżenia<br /><br />[off topic] Jaki masz debugger do niego?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1138">toch88</a> — 28 sty 2017, o 08:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kulfi27]]></name></author>
<updated>2017-01-27T21:19:11+01:00</updated>
<published>2017-01-27T21:19:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=181059#p181059</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=181059#p181059"/>
<title type="html"><![CDATA[Re: Stm32f429 Timer_1 pierwsza konfiguracja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=181059#p181059"><![CDATA[
Dziękuje koledze za ten wpis przede wszystkim za prezentacje kodu konfiguracji tego na rejestrach bardzo mi pomogłeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Siedzę całymi wieczorami przed kompem  <img src="https://forum.atnel.pl/images/smilies/icon_twisted.gif" alt=":twisted:" title="Szalony" />  i coś tam skrobie nie będę udawał ciężko mi to idzie ale z uporem maniaka. Wracając do tematu posiadam taką płytkę <br /><!-- m --><a class="postlink" href="http://elty.pl/pl/p/STM32F429IGT6-MCU-core-board/1122" >http://elty.pl/pl/p/STM32F429IGT6-MCU-core-board/1122</a><!-- m --><br />kwarc zamontowany to 8Mhz prosił bym o wyjaśnienie kilku rzeczy mianowicie jeżeli nie skonfigurowałem procka na zewnętrzny kwarc to w tej chwili korzysta z HSI RC 16Mhz czyli wewnętrznego, teraz nie wiem czy się dobrze wyrażę jeżeli chcę podkręcić na maksa rdzeń to muszę skorzystać z pętli PLL ustawiam częstotliwość na 180Mhz i co jeszcze muszę ustawić, czy dobrze rozumie dla każdego peryferialu procka muszę tą częstotliwość podzielić zebu uzyskać częstotliwość maksymalna z jaką może pracować dany peryferial.<br />A teraz takie pytanie czy ten procesor sobie poradzi ze sterowaniem łazikiem zbieranie danych z kamery i wysłanie do odbiornika, po stronie odbiornika tak sobie założyłem ze ten sam procek i wyświetlacz 480*272 no i odbiornik, myślę ze obraz będę musiał skonwertować do jpg żeby to jakoś przesłać, takie moje założenia więc się bawię  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  i wiem jeszcze dużo wody upłynie zanim to ogarnę ale co tam sam łazik częściowo skonstruowany  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8659">Kulfi27</a> — 27 sty 2017, o 21:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[toch88]]></name></author>
<updated>2017-01-25T19:53:54+01:00</updated>
<published>2017-01-25T19:53:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=180866#p180866</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=180866#p180866"/>
<title type="html"><![CDATA[Re: Stm32f429 Timer_1 pierwsza konfiguracja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=180866#p180866"><![CDATA[
<div class="quotetitle">Kulfi27 napisał(a):</div><div class="quotecontent"><br />Skonfigurowałem tyle według książki i teraz chciał  bym żeby wywołać przerwanie od timera 1, brakuje mi ustawienia  do ile ma liczyć licznik, i nie wiem gdzie mam szukać nazwy funkcji wywoływanej przez przerwanie jakoś nie mogę tego wszystkiego jak na razie ogarnąć  <img src="https://forum.atnel.pl/images/smilies/icon_e_surprised.gif" alt=":o" title="Zdziwiony" />  Bardzo bym prosił o wskazówki co dalej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />Na razie skonfigurowałeś zegary wewnętrzne, ale teraz sobie myślisz co to u licha są zegary i jest ich kilka? <br /><br />No tak projektanci procesora zauważyli że czasami nie ma potrzeby uruchamiać wszystkich peryfierii z maksymalną i tylko jedną szybkością i dali taką możliwość użytkownikowi.<br />Jeżeli otworzyłbyś sobie dokument <a href="https://www.google.nl/search?q=RM+STM32F429&amp;oq=RM+STM32F429&amp;aqs=chrome..69i57j69i60l2.1462j0j7&amp;sourceid=chrome&amp;ie=UTF-8#q=reference+manual+STM32F429"  class="postlink">https://www.google.nl/search?q=RM+STM32F429&amp;oq=RM+STM32F429&amp;aqs=chrome..69i57j69i60l2.1462j0j7&amp;sourceid=chrome&amp;ie=UTF-8#q=reference+manual+STM32F429</a>, który odpowiada twojemu uC, to po lewej lub prawiej stronie powinna być lista ze wszystkimi tematami, jeden z nich to RCC - jest to rejestr który odpowiada za wszystkie zegary w twoim uC. Na stronie 152 RM00090 jest diagram przedstawiający wszystkie linie łączący twoje źródło zegarowe z odpowiednimi peryfieriami.<br /><br />W lini 3:<br />[syntax=c]RCC_HSEConfig(RCC_HSE_ON);[/syntax]  Ustawia to że źródłem będzie sygnał zewnętrzny podpięty pod piny OSC_OUT OSC_IN, zobacz sobie w datasheet(nie w reference manual) gdzie to jest podłączone-prawdopodobnie na płytce masz rezonator kwarcowy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />. Dobra jedziemy dalej.<br /><br /><br /> [syntax=c]HSEStartUpStatus = RCC_WaitForHSEStartUp();[/syntax] Po ustawieniu  tego zegara (instrukcja powyżej), należy odczekać chwilkę aż wszystko się ustabilizuje.<br />Jezęli wszystko się powiedzie: [syntax=c]if(HSEStartUpStatus == SUCCESS)[/syntax]<br /><br />wykonywane są następne instrukcje.<br /><br /> [syntax=c]FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);[/syntax] jest to taki dodatkowy bajer pamięci flash a ty go włączasz (Cortex M4 manual strona 275).<br /> [syntax=c]FLASH_SetLatency(FLASH_Latency_2);[/syntax]  Jako że nie używasz standardowej prędkości tylko jakiejś wyższej (co objaśnimy za chwile), należy spowolnić dostęp do pamięci FLASH - chodzi o to że pamieć FLASH jest wolniejsza niż szyna DANYCH AHB (RM strona 80 jest sobie tabelka która wszystko objaśnia).<br /><br /> [syntax=c]RCC_HCLKConfig(RCC_SYSCLK_Div1);[/syntax]  Ustawiasz dzielnik częstotliwości HCLK, spójrz jeszcze raz na Diagram 16 Clock Tree ze strony 152, jest tam coś takiego jak AHB_Prescaler.<br /><br /> [syntax=c]RCC_PCLK2Config(RCC_HCLK_Div1);[/syntax]   Ustawiasz dzielnik częstotliwości dla  PCLK2 na jeden (a dlaczego akurat jeden? no to też trzeba przemyśleć, to zobaczymy zaraz)<br /> [syntax=c]RCC_PCLK1Config(RCC_HCLK_Div2);[/syntax]  Ustawiasz dzielnik częstotliwości dla  PCLK1 na dwa, dlatego że tam maksymalnie może być 45Mhz<br />Strona 153  z RM znowu nam wszystko wyjaśnia:<br /> <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />The maximum allowed frequency of the high-speed APB2 domain is 90 MHz. The<br />maximum allowed frequency of the low-speed APB1 domain is 45 MHz<br /></div><br /><br />[syntax=c]RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);[/syntax] Tak jak napisałeś sobie PLLCLK 8MHz * 9 = 72 MHz czy jesteś pewny że akurat taki zegar jest na twojej płytce? a nie 16?<br /><br />[syntax=c]RCC_PLLCmd(ENABLE);<br />                // Czekaj az PLL poprawnie sie uruchomi<br />                while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);[/syntax]<br />tego chyba nie trzeba wyjaśniać, no może co to tak jest ta PLL (Pętla Synchronizacji Fazy), jest to taki (pod)układ który pozwala na powielanie częstotliwości ale nie tylko, jak będziesz ciekawy jak to się dziej to też mogę wyjaśnić. Jednak ten proces synchronizacji pętli trwa pewien czas więc należy poczekać aż się ustabilizuje.<br /><br />Kiedy jest już gotowa  możesz jej użyć jako źródła dla twojego zegara HCLK również to zdarzenie można znaleźć w manualu - zapraszam strona 152 nasz ulubiony Clock Tree <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Na środku rysunku jest właśnie taki &quot;Switch&quot; który możesz sobie ustawić za pomocą rejestru <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> RCC-&gt;CFGR strona 167 .<br /><br />No i na końcu sprawdzasz czy już wybrane źródło się przełączyło na to które chcesz.<br />[syntax=c]while(RCC_GetSYSCLKSource() != 0x08);[/syntax]<br /><br />Jak widać przygotowujesz się do uruchomienia zegara nr 1 (TIM1) włączając mu sygnał zegarowy (bo go potrzebuje), teraz musisz się zastanowić bo tak naprawde to Twojego zegara TIM1 jeszcze nie zacząłeś konfigurować.<br /><br />Odpowiedz sobie na pytania:<br />-z jaką częstotliwością działa APB2 (Tam jest podłączony zegar, a skąd to wiadomo zapytasz: DataSheet STM32F429xx strona 18 piękny diagram obrazujący wszystkie podłączenia <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> no i tak jak skonfigurowałeś HCLK <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Na co jeszcze należy zwrócić uwagę? <br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />1. The timers connected to APB2 are clocked from TIMxCLK up to 180 MHz, while the timers connected to APB1 are clocked<br />from TIMxCLK either up to 90 MHz or 180 MHz depending on TIMPRE bit configuration in the RCC_DCKCFGR register<br /></div><br /><br />-Jak ma działać licznik: liczyć w góre, w dół, czy w góre i w dół?<br />-Kiedy ma następować przerwanie, czy na początku zliczania, na końcu a może wtedy kiedy komparator wewnętrzny wyzwoli?<br />-Jak szybko ma działać licznik, do ilu przedziałów czasu ma zliczyć? <br />-Jaki będzie podstawowy przedział czasu (rozdzielczość) twojego zegara<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 49 minutach ]</span></strong><br /><br />Pamiętaj nie zniechęcaj się tylko dlatego że to wymaga czasu, on i tak upłynie a ty się czegoś nauczysz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ja mam trochę inny mikroprocesor, ale przez analogię na pewno dojdziesz <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Mój to STM32F411 do tego nie używam biblioteki znaczy używam ale te stworzone przez siebie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Ale tak żeby nie zaciemniać:<br /><br />Funkcja konfigurująca uC na maksymalną prędkość podałem strony rejestrów tak żebyś mógł sobie odnaleźć w RM0383<br />[syntax=c]void SetSysClock(void)<br />{<br /><br />/******************************************************************************/<br />/*            PLL (clocked by HSE) used as System clock source                */<br />/******************************************************************************/<br />  /* Enable HSE */<br />  RCC-&gt;CR |= ((uint32_t)RCC_CR_HSEON); //strona 99 / 837<br /><br />  /* Wait till HSE is ready and if Time out is reached exit */<br /><br />while(!(RCC-&gt;CR &amp; RCC_CR_HSERDY)){// poczekaj az gotowy<br />;<br />}  <br />    /* Enable high performance mode, System frequency up to 100 MHz */<br />    RCC-&gt;APB1ENR |= RCC_APB1ENR_PWREN; //strona 114 / 837<br />    PWR-&gt;CR |= PWR_CR_PMODE; //strona 83 / 837<br /><br />    /* HCLK = SYSCLK / 1*/<br />    RCC-&gt;CFGR |= RCC_CFGR_HPRE_DIV1;  //strona 103 / 837<br /><br />    /* PCLK2 = HCLK / 2*/<br />    RCC-&gt;CFGR |= RCC_CFGR_PPRE2_DIV1; //strona 103 / 837<br /><br />    /* PCLK1 = HCLK / 1*/<br />    RCC-&gt;CFGR |= RCC_CFGR_PPRE1_DIV2; //strona 103 / 837<br /><br />    /* Configure the main PLL */<br />    RCC-&gt;PLLCFGR = PLL_M | (PLL_N &lt;&lt; 6) | (((PLL_P &gt;&gt; 1) -1) &lt;&lt; 16) |<br />                   (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q &lt;&lt; 24); //strona 130 / 837<br /><br />    /* Enable the main PLL */<br />    RCC-&gt;CR |= RCC_CR_PLLON; // strona 99 / 837<br /><br />    /* Wait till the main PLL is ready */<br />    while((RCC-&gt;CR &amp; RCC_CR_PLLRDY) == 0) // strona 99 / 837<br />    {<br />    }<br /><br />    /* Configure Flash prefetch, Instruction cache,Prefetch Data cache and wait state */<br />    FLASH-&gt;ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_3WS; //strona 61 / 837<br /><br />    /* Select the main PLL as system clock source */<br />    RCC-&gt;CFGR &amp;= (uint32_t)((uint32_t)~(RCC_CFGR_SW));//strona 103 / 837<br />    RCC-&gt;CFGR |= RCC_CFGR_SW_PLL;//strona 103 / 837<br /><br />    /* Wait till the main PLL is used as system clock source */<br />    while ((RCC-&gt;CFGR &amp; (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);//strona 103 / 837<br />}[/syntax]<br /><br />no dobrze w moim przypadku zegar działa na 100Mhz - mam 8 Mhz Kwarc skąd się taka prędkość wzięła chyba już wiesz? Jeżeli nie to Clock Tree rozwieje twoje wątpliwości <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Ale ale APB1 działa już na 50Mhz tyle że dla zegarów jest mnożnik x2 sorawdź to ! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Jako że mój zegar ma działać w górę i w dół na 10khz oto konfiguracja:<br />[syntax=c]void Timer5Config(){<br />GPIO_for_Timer5_CHN();<br />RCC-&gt;APB1ENR|=RCC_APB1ENR_TIM5EN;<br />TIM5-&gt;CCMR1|=TIM_CCMR1_OC1M;  //PWM mode 2<br />TIM5-&gt;CCMR1|=TIM_CCMR1_OC1PE; //preloader wlaczony<br />TIM5-&gt;CCR1=2500; // polowa wypelnenia<br /><br />TIM5-&gt;ARR=5000; //wartosc do ktorej zlicza w góre i oraz odlicza w dól do 0 / <br />//czestotliwosc 10khz <br />TIM5-&gt;PSC=0; //timer prescaler =1 (zawsze sie dodaje +1)<br />TIM5-&gt;CR1|=TIM_CR1_CMS; //tryb up &amp; down<br />TIM5-&gt;DIER|=TIM_DIER_UIE; //wlacz oblsugie przerwan dla UPDATE INT. EVENT to na pewno ciebie zainteresuje ;)<br />TIM5-&gt;CCER|=TIM_CCER_CC1E; //ustaw kanal jako output <br />TIM5-&gt;CR1|=TIM_CR1_CEN; //wlacz zegar<br />}[/syntax]<br /><br />Dlaczego tutaj jest 10khz ? ABP2 działa na 50MHz x2 (mnożnik <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />if APBx PRESC =1 x1 else x2[<br /></div>) TIM5-&gt;PSC=0; co = 1 koniec końców daje nam 100Mhz =&gt; 100 000 000 hz=&gt;1/f=T - otrzymamy czas bazowy w którym będzie zliczał nasz licznik: 1/100 000 000 = 0,00000001s =&gt; 10ns <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> teraz zliczamy w górę i w dół ile ? a no tyle TIM5-&gt;ARR=5000; czyli 5000*10ns w górę 5000*10ns w dół razem =&gt;100 000 ns=&gt; 100us =0.0001 s a z tego juz łatwo poznamy częstotliwośc 1/0.0001=10kHz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Nom mamy gotową funkcję która konfiguruje nam TIM5 ale teraz trzeba ją wywołać zatem pętla główna:<br />[syntax=c]int main(){<br />SetSysClock();<br />Timer5Config();<br />NVIC_EnableIRQ(TIM5_IRQn); //Włączamy funkcję przerwania wektorze przerwań<br />while (1);<br />return 0;<br />}<br /><br />void TIM5_IRQHandler(){ <br />if(TIM5-&gt;SR &amp; TIM_SR_UIF){ //Gdy nastąpiło przerwanie sprawdź dlaczego: strona 350 / 837 RM0383<br />TIM5-&gt;SR&amp;=~TIM_SR_UIF;<br />}<br />}[/syntax]<br /><br />Gwoli wyjaśnienia przerwanie wystąpi w momencie wystąpienia UPDATE EVENT, a skąd to ? a stąd : strona 308 / 837 RM0383- czyli wtedy kiedy licznik się &quot;przepełni&quot; czyli doliczy do 2x5000xtimeBase(10ns) w moim przypadku <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br /><br /><a href="https://obrazkiforum.atnel.pl/1138/4827764712c56a3a5d9cc46fca910663.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/1138/4827764712c56a3a5d9cc46fca910663.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1138">toch88</a> — 25 sty 2017, o 19:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2017-01-12T18:12:43+01:00</updated>
<published>2017-01-12T18:12:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=179715#p179715</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=179715#p179715"/>
<title type="html"><![CDATA[Re: Stm32f429 Timer_1 pierwsza konfiguracja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=179715#p179715"><![CDATA[
Zajrzyj tu: <a href="http://forbot.pl/blog/artykuly/programowanie/kurs-stm32-f4-1-czas-poznac-hal-spis-tresci-kursu-id14114"  class="postlink">http://forbot.pl/blog/artykuly/programowanie/kurs-stm32-f4-1-czas-poznac-hal-spis-tresci-kursu-id14114</a> i tu <a href="http://forbot.pl/blog/artykuly/programowanie/stm32-praktyce-1-platforma-srodowisko-id2733"  class="postlink">http://forbot.pl/blog/artykuly/programowanie/stm32-praktyce-1-platforma-srodowisko-id2733</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 12 sty 2017, o 18:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kulfi27]]></name></author>
<updated>2017-01-11T23:48:08+01:00</updated>
<published>2017-01-11T23:48:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=179679#p179679</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=179679#p179679"/>
<title type="html"><![CDATA[Stm32f429 Timer_1 pierwsza konfiguracja]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17309&amp;p=179679#p179679"><![CDATA[
Witam kolegów stawiam pierwsze kroki z STM32 i nie wiem jak mam skonfigurować timera 1 żeby mi generował przerwanie<br />program piszę w atolicu [syntax=c]RCC_DeInit();<br /><br />RCC_HSEConfig(RCC_HSE_ON); <br /><br />  HSEStartUpStatus = RCC_WaitForHSEStartUp(); <br />  if(HSEStartUpStatus == SUCCESS) <br />  { <br />  <br />    <br />        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); <br />        // zwloka dla pamieci Flash <br />        FLASH_SetLatency(FLASH_Latency_2); <br />        // HCLK = SYSCLK <br />        RCC_HCLKConfig(RCC_SYSCLK_Div1); <br />        // PCLK2 = HCLK <br />        RCC_PCLK2Config(RCC_HCLK_Div1); <br />        // PCLK1 = HCLK/2 <br />        RCC_PCLK1Config(RCC_HCLK_Div2); <br />        // PLLCLK = 8MHz * 9 = 72 MHz <br />        RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9); <br />        // Wlacz PLL <br />        RCC_PLLCmd(ENABLE); <br />        // Czekaj az PLL poprawnie sie uruchomi <br />        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); <br />        // PLL bedzie zrodlem sygnalu zegarowego <br />        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); <br />        // Czekaj az PLL bedzie sygnalem zegarowym systemu <br />        while(RCC_GetSYSCLKSource() != 0x08); <br />        <br />        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);<br />  <br />}[/syntax]<br /><br />Skonfigurowałem tyle według książki i teraz chciał  bym żeby wywołać przerwanie od timera 1, brakuje mi ustawienia  do ile ma liczyć licznik, i nie wiem gdzie mam szukać nazwy funkcji wywoływanej przez przerwanie jakoś nie mogę tego wszystkiego jak na razie ogarnąć  <img src="https://forum.atnel.pl/images/smilies/icon_e_surprised.gif" alt=":o" title="Zdziwiony" />  Bardzo bym prosił o wskazówki co dalej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8659">Kulfi27</a> — 11 sty 2017, o 23:48</p><hr />
]]></content>
</entry>
</feed>