<?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=12262&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-08-05T20:54:40+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=12262&amp;mode</id>
<entry>
<author><name><![CDATA[Daniel880]]></name></author>
<updated>2015-08-05T20:54:40+01:00</updated>
<published>2015-08-05T20:54:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=136513#p136513</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=136513#p136513"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=136513#p136513"><![CDATA[
Reference manual. Zakładka system architecture. Patrzysz na jakiej szynie jest timer. W twoim przypadku jest to APB1. A jakim zegarem taktowania jest ta szyna to powinieneś wiedzieć. Linijka kodu, o która zapytujesz uruchamia tylko zegar dla timera, nic więcej;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2328">Daniel880</a> — 5 sie 2015, o 20:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow18-1990]]></name></author>
<updated>2015-08-05T17:35:02+01:00</updated>
<published>2015-08-05T17:35:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=136505#p136505</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=136505#p136505"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=136505#p136505"><![CDATA[
Sprawa wygląda tak że udało mi się zrobić małe postępy, ale mam małe pytanko może ktoś będzie w stanie mi pomóc a mianowicie:<br />ustawiłem timer, migam diodą w przerwaniu wszystko normalnie działa, tylko:<br /><br />1. Zastanawia mnie jaka częstotliwość jest dzielona przez preskaler<br /><br />2. Mam problem ze świadomym ustawieniem czasu trwania okresu <br /><br />Pokaże kod:<br />[syntax=c]#include &lt;stdint.h&gt;<br /><br />#include &quot;inc/stm32l053xx.h&quot;<br /><br />#include &quot;config.h&quot;<br /><br />#include &quot;hdr/hdr_syscon.h&quot;<br /><br /><br />static void flash_access_time(uint32_t frequency);<br />static uint32_t pll_start(uint32_t crystal, uint32_t frequency);<br />static void system_init(void);<br /><br /><br /><br /><br />int main(void)<br />{<br />//volatile uint32_t count, count_max = 10000;// with core frequency ~50MHz this gives ~1.5Hz blinking frequency<br /><br />//RCC-&gt;IOPENR |= RCC_IOPENR_GPIOAEN;<br /><br />//RCC-&gt;APB1ENR |= RCC_APB1ENR_TIM2EN;<br /><br />pll_start(CRYSTAL, FREQUENCY);// start the PLL<br />system_init();// initialize other necessary elements<br /><br />//SysTick_Config(FREQUENCY/1000);<br /><br />GPIOA-&gt;MODER = (GPIOA-&gt;MODER &amp; ~GPIO_MODER_MODE5) | GPIO_MODER_MODE5_0;<br />//GPIOA-&gt;BSRR  = 1&lt;&lt;5;<br /><br />TIM2-&gt;PSC = 16000-1; // preskaler ... Prescaler Register<br />TIM2-&gt;ARR = 130; // zliczanie do ... Auto-Reload Register<br />// jest jescze Counter Register<br />TIM2-&gt;EGR |= TIM_EGR_UG; // jest napisane że trzeba ustawic bit UG<br />TIM2-&gt;DIER |= TIM_DIER_UIE;<br />//TIM2-&gt;CCR1 // wartośc porownania licznika?<br />TIM2-&gt;CR1 |= TIM_CR1_CEN; // tryb zliczania w dol?<br />NVIC_EnableIRQ(TIM2_IRQn);<br /><br />// ustawienie samego okresu -&gt; rejestr ARR<br /><br />/*<br />    CCMR1 - wybierasz tryb pracy i kierunek portów OCx<br />    CCER - aktywujesz daną końcówkę OCx<br />    CR1 - kilka podstawowych parametrow pracy oraz wlasciwa aktywacja zliczania<br /><br /> */<br />while (1)<br />{<br />/*for (count = 0; count &lt; count_max; count++);// delay<br />GPIOA-&gt;BSRR  = 1&lt;&lt;5;<br />for (count = 0; count &lt; count_max; count++);// delay<br />GPIOA-&gt;BRR  = 1&lt;&lt;5;*/<br />}<br />}<br /><br />void TIM2_IRQHandler(void){<br />if(TIM2-&gt;SR &amp; TIM_SR_UIF){ // TIM_SR_UIF -&gt; flaga przerwania<br />TIM2-&gt;SR = ~TIM_SR_UIF; //  kasuje flagę przerwania<br />GPIOA-&gt;ODR ^= (1&lt;&lt;5);<br />}}<br /><br />/*void Systick_Handler(void)<br />{<br /><br />}*/<br /><br /><br /><br /><br />static void flash_access_time(uint32_t frequency)<br />{<br /><br />}<br /><br /><br /><br /><br />static uint32_t pll_start(uint32_t crystal, uint32_t frequency)<br />{<br />return frequency;<br />}<br /><br /><br /><br />static void system_init(void)<br />{<br />RCC-&gt;IOPENR |= RCC_IOPENR_GPIOAEN;<br /><br />RCC-&gt;APB1ENR |= RCC_APB1ENR_TIM2EN; // low power timer clock -&gt; włączenie taktowania<br /><br />}[/syntax]<br /><br />Chodzi mi o te dwie linijki:<br /><br />Tutaj preskaler:<br /><br />[syntax=c]TIM2-&gt;PSC = 16000-1; // preskaler ... Prescaler Register[/syntax]<br /><br />No i ustawienie czasu trwania okresu<br />[syntax=c]TIM2-&gt;ARR = 130; // zliczanie do ... Auto-Reload Register[/syntax]<br /><br />Generalnie jest tak że wszystko działa, na analizatorze logicznym czas trwania okresu to ok 2 sek. tylko może ma ktoś doświadczenie w stm-ach i byłby w stanie podpowiedzieć jak częstotliwość jest dzielona przez ten preskaler? Posiadam moduł nucleo l053r8 z rdzeniem cortex-m0+.<br /><br />I czy ta częstotliwość która jest dzielona przez preskaler ma związek z ustawieniem tego rejestru? :<br /><br />[syntax=c]RCC-&gt;APB1ENR |= RCC_APB1ENR_TIM2EN; // low power timer clock -&gt; włączenie taktowania[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5472">moscow18-1990</a> — 5 sie 2015, o 17:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daniel880]]></name></author>
<updated>2015-07-19T14:43:06+01:00</updated>
<published>2015-07-19T14:43:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134927#p134927</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134927#p134927"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134927#p134927"><![CDATA[
Niepotrzebnie chcesz deklarować funkcję SysTick_CLKSourceConfig() i SysTick_Config(), są one już zadeklarowane i zdefiniowane w innych plikach. Powinieneś je wywołać w funkcji main. SysTick_CLKSourceConfig() odpowiada za źródło z jakiego taktowany jest SysTick. Dokładny opis masz w pliku misc.c. U mnie na rdzeniu cortex M3 mam dwie możliwośći:<br /><br />[syntax=c]* @brief  Configures the SysTick clock source.<br />  * @param  SysTick_CLKSource: specifies the SysTick clock source.<br />  *   This parameter can be one of the following values:<br />  *     @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source.<br />  *     @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source.<br />  * @retval None[/syntax]<br /><br />Dla SysTick_Config() podajesz jaką wartością ma być ładowany licznik po zliczeniu do 0; wartość ta jest 24bitowa czyli możesz wpisać liczby 0x00000001-0x00FFFFFF. czyli od 1 do 16777215. Czyli jeśli SysTick będzei taktowany z maksymalną częstotliwością, czyli w twoim wypadku chyba 32MHz to wpisaująć tam wartość 0x00FFFFFF otrzymasz przerwanie co ponad 0,5s. <br /><br />Polecam jednak ustawić przerwanie od SysTicka na 1ms i dekrementować tam zmienną w pętli aż się wyzeruje. Tak jak robi to SunRiver w poradniku;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2328">Daniel880</a> — 19 lip 2015, o 14:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2015-07-19T00:23:36+01:00</updated>
<published>2015-07-19T00:23:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134896#p134896</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134896#p134896"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134896#p134896"><![CDATA[
Zobacz: <br /><a href="http://www.sunduino.pl/wordpress/stm32-porty-gpio-dla-opornych-1/"  class="postlink">http://www.sunduino.pl/wordpress/stm32-porty-gpio-dla-opornych-1/</a><br /><a href="http://www.sunduino.pl/wordpress/stm32-porty-gpio-dla-opornych-2/"  class="postlink">http://www.sunduino.pl/wordpress/stm32-porty-gpio-dla-opornych-2/</a><br /><a href="http://www.sunduino.pl/wordpress/stm32-porty-gpio-dla-opornych-3/"  class="postlink">http://www.sunduino.pl/wordpress/stm32-porty-gpio-dla-opornych-3/</a><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 21 minutach ]</span></strong><br /><br />A na deser:<br /><a href="http://www.sunduino.pl/wordpress/start-z-stm32-vl-discovery-systick/"  class="postlink">http://www.sunduino.pl/wordpress/start-z-stm32-vl-discovery-systick/</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 19 lip 2015, o 00:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow18-1990]]></name></author>
<updated>2015-07-18T22:08:46+01:00</updated>
<published>2015-07-18T22:08:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134892#p134892</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134892#p134892"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134892#p134892"><![CDATA[
Udało mi się ogarnąć w miarę rejestry. Migam czterema diodami ale chciałbym zrealizować w końcu to opóźnienie za pomocą systicka i mam pewne pytania, ponieważ mam pewne trudności z realizacją tego opóźnienia a mainowicie:<br /><br />w pliku core_cm0plus.h mam chyba konfigurację tego systick timera:<br />[syntax=c]__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)<br />{<br />  if ((ticks - 1) &gt; SysTick_LOAD_RELOAD_Msk)  return (1);      /* Reload value impossible */<br /><br />  SysTick-&gt;LOAD  = ticks - 1;                                  /* set reload register */<br />  NVIC_SetPriority (SysTick_IRQn, (1&lt;&lt;__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */<br />  SysTick-&gt;VAL   = 0;                                          /* Load the SysTick Counter Value */<br />  SysTick-&gt;CTRL  = SysTick_CTRL_CLKSOURCE_Msk |<br />                   SysTick_CTRL_TICKINT_Msk   |<br />                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */<br />  return (0);                                                  /* Function successful */<br />}[/syntax]<br /><br />No i z tego co powiedział jeden z kolegów muszę mieć funkcję void SysTick_Handler(void) ale mimo przewertowania internetu nie wiem co ma znaleźć się w tej funkcji i generalnie nie wiem jak później użyć tego opóźnienia w &quot;mainie&quot;. Tak samo ta konfiguracja tego systicka jest dla mnie czarną magią. Zakładając że mam ten swój program:<br /><br />[syntax=c]#include &lt;stdint.h&gt;<br /><br />#include &quot;inc/stm32l053xx.h&quot;<br /><br />#include &quot;config.h&quot;<br /><br />#include &quot;hdr/hdr_syscon.h&quot;<br /><br /><br /><br />static void flash_access_time(uint32_t frequency);<br />static uint32_t pll_start(uint32_t crystal, uint32_t frequency);<br />static void system_init(void);<br />//void SysTick_Handler(void); ???<br />//SysTick_Config(FREQUENCY/?);<br /><br /><br /><br /><br /><br />int main(void)<br />{<br />volatile uint32_t count, count_max = 100000;// with core frequency ~50MHz this gives ~1.5Hz blinking frequency<br />pll_start(CRYSTAL, FREQUENCY);// start the PLL<br />system_init();// initialize other necessary elements<br /><br />GPIOA-&gt;MODER = (GPIOA-&gt;MODER &amp; ~GPIO_MODER_MODE5) | GPIO_MODER_MODE5_0; // PA5<br />GPIOC-&gt;MODER = (GPIOC-&gt;MODER &amp; ~GPIO_MODER_MODE0) | GPIO_MODER_MODE0_0; // PC0<br />GPIOD-&gt;MODER = (GPIOD-&gt;MODER &amp; ~GPIO_MODER_MODE2) | GPIO_MODER_MODE2_0; // PD2<br />GPIOB-&gt;MODER = (GPIOB-&gt;MODER &amp; ~GPIO_MODER_MODE3) | GPIO_MODER_MODE3_0; // PB3<br /><br /><br />while (1)<br />{<br />for (count = 0; count &lt; count_max; count++);// delay<br />GPIOA-&gt;BSRR  = 1&lt;&lt;5;<br />GPIOC-&gt;BSRR  = 1&lt;&lt;0;<br />GPIOD-&gt;BSRR  = 1&lt;&lt;2;<br />GPIOB-&gt;BSRR  = 1&lt;&lt;3;<br />for (count = 0; count &lt; count_max; count++);// delay<br />GPIOA-&gt;BRR  = 1&lt;&lt;5;<br />GPIOC-&gt;BRR  = 1&lt;&lt;0;<br />GPIOD-&gt;BRR  = 1&lt;&lt;2;<br />GPIOB-&gt;BRR  = 1&lt;&lt;3;<br /><br /><br /><br />}<br />}<br /><br />static void flash_access_time(uint32_t frequency)<br />{<br /><br />}<br /><br /><br /><br />static uint32_t pll_start(uint32_t crystal, uint32_t frequency)<br />{<br />return frequency;<br />}<br /><br /><br /><br />static void system_init(void)<br />{<br />RCC-&gt;IOPENR |= RCC_IOPENR_GPIOAEN;<br />RCC-&gt;IOPENR |= RCC_IOPENR_GPIOBEN;<br />RCC-&gt;IOPENR |= RCC_IOPENR_GPIOCEN;<br />RCC-&gt;IOPENR |= RCC_IOPENR_GPIODEN;<br /><br />}[/syntax]<br /><br />Mam w związku z tym prośbę o pomoc.Założenie jest takie że chciałbym zrealizować opóźnienie zamiast pętli for czyli miganie diodami za pomocą systicka.Zadam może najpierw dwa pytania:<br /><br />1.Wpisując w mianownik 1000 dostaję opóźnienie 1ms... a co musiałbym wpisać żeby uzyskać np. 100ms?<br />[syntax=c]SysTick_Config(FREQUENCY/?);[/syntax]<br />2.Co ma się znaleźć w tej funkcji void SysTick_Handler(void)? I czy jest ona jakoś związana z konfiguracją systicka w pliku core_cm0plus.h?<br /><br />Jeśli byłby ktoś w stanie mi pomóc przez to przebrnąć byłbym wdzięczny. Rejestry już w miarę ogarnąłem dzięki cennym wskazówkom.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5472">moscow18-1990</a> — 18 lip 2015, o 22:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Federerer]]></name></author>
<updated>2015-07-15T21:56:22+01:00</updated>
<published>2015-07-15T21:56:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134661#p134661</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134661#p134661"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134661#p134661"><![CDATA[
Te definicje to definicje poszczególnych bitów. GPIO_MODER_MODE5 to maska wszystkich bitów odpowiadających za ustawienie danego pinu w rejestrze. Akurat tutaj bity są dwa, więc są to dwie jedynki obok siebie, dla pinu 5 binarnie wygląda to tak: 0b110000000000. Maski tej używa się do kasowania bitów danego ustawienia, czyli u Ciebie jest to część:<br />[syntax=c](GPIOA-&gt;MODER &amp; ~GPIO_MODER_MODE5)[/syntax]<br />Definicjie z zerem i jedynką na końcu to definicje poszczególnych bitów dla pinu 5, czyli u Ciebie:<br />[syntax=c]| GPIO_MODER_MODE5_0[/syntax]<br />ustawia bit zerowy dla pinu 5 - pin ustawiony jako wyjście.<br />Schemat definicji jest uniwersalny i dla innych rejestrów jest tak samo, np:<br />SPI_CR1_BR_2 oznacza bit nr 2 dla ustawienia baudrate SPI w resjestrze SPIx-&gt;CR1.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4440">Federerer</a> — 15 lip 2015, o 21:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2015-07-14T17:59:57+01:00</updated>
<published>2015-07-14T17:59:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134532#p134532</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134532#p134532"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134532#p134532"><![CDATA[
Nie pisze tego z całą pewnością bo za mało wiem o STM-ie<br />ale jakbyś taki zapis<br />[syntax=c]GPIOA-&gt;MODER = (1 &lt;&lt; 5 );[/syntax]<br />zamienił na taki<br />[syntax=c]GPIOA-&gt;MODER |= (1 &lt;&lt; 5 );[/syntax]<br />powinno pomóc .<br /><br />Z drugiej strony zalecany jest zapis w takiej formie jak podałeś <br />[syntax=c]GPIOA-&gt;MODER = (GPIOA-&gt;MODER &amp; ~GPIO_MODER_MODE5) | GPIO_MODER_MODE5_0;[/syntax]<br />tak że chyba lepiej jego stosować .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 14 lip 2015, o 17:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2015-07-14T15:56:57+01:00</updated>
<published>2015-07-14T15:56:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134522#p134522</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134522#p134522"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134522#p134522"><![CDATA[
W swoim &quot;środowisku programistycznym&quot; (Eclipse) masz ułatwienie, które nazywa się &quot;znajdź&quot; (&quot;find&quot;, &quot;szukaj&quot; lub podobnie). Użyj go, by znaleźć interesujące cię nazwy (przeszukaj cały projekt). Z całą pewnością znajdziesz odwołania do linii zaczynających się od #define _szukana_nazwa_ i one wyjaśnią ci co to jest. Np.:<br />[syntax=c]#define GPIO_MODER_MODE5_0 ((uint32_t)0x00000400)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 14 lip 2015, o 15:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow18-1990]]></name></author>
<updated>2015-07-14T15:19:48+01:00</updated>
<published>2015-07-14T15:19:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134521#p134521</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134521#p134521"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134521#p134521"><![CDATA[
Jest jeszcze jedno pytanko a mianowicie dzisiaj w swoim programie ustawiłem port jako wyjście w ten sposób:<br /><br />[syntax=c]GPIOA-&gt;MODER = (1 &lt;&lt; 5 );[/syntax]<br /><br />i okazuje się że taki zapis przysporzył mi sporo problemów, ponieważ na 5 porcie ustawił mi jedynkę i zmienił stan pozostałych i zmienił stan bitów odpowiedzialnych za SWI(SWD) i nie mogłem uruchomić openocd i w związku z tym nie było komunikacji pomiędzy eclipsem a nucleo. Rozwiązałem ten problem za pomocą podania stanu wysokiego na pin BOOT0 ale tu pojawia się pytanie odnośnie linijki kodu, która znajduje się w moim programie i powoduje, że program działa poprawnie a mianowicie:<br /><br />[syntax=c]GPIOA-&gt;MODER = (GPIOA-&gt;MODER &amp; ~GPIO_MODER_MODE5) | GPIO_MODER_MODE5_0;[/syntax]<br /><br />co oznacza ta nieco skomplikowana linijka kodu. Podejrzewam że chodzi o maskowanie bitów. Najbardziej nurtuje mnie to:<br />[syntax=c]GPIO_MODER_MODE5[/syntax]<br /><br />i to:<br /><br />[syntax=c]GPIO_MODER_MODE5_0[/syntax]<br /><br />zastanawiają mnie te końcowe nazwy czyli MODE_5 i MODE5_0 no i generalnie cały ten zapis, który podałem jako pierwszy. Byłby ktoś w stanie pomóc mi rozłożyć to na &quot;czynniki pierwsze&quot;?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5472">moscow18-1990</a> — 14 lip 2015, o 15:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Federerer]]></name></author>
<updated>2015-07-13T21:26:39+01:00</updated>
<published>2015-07-13T21:26:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134435#p134435</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134435#p134435"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134435#p134435"><![CDATA[
1. Tu pomoże tylko reference manual, nie musisz przecież czytać całego na raz.<br />2. W nagłówku core_cm0plus.h masz funkcję SysTick_Config(uint32_t ticks) która służy do odpalenia SysTicka, jako parametr podajesz np FREQUENCY/1000 i masz przerwanie co 1 milisekundę. Nie zapomnij o dodaniu obsługi przerwania do programu - void SysTick_Handler(void).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4440">Federerer</a> — 13 lip 2015, o 21:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow18-1990]]></name></author>
<updated>2015-07-09T22:25:57+01:00</updated>
<published>2015-07-09T22:25:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134083#p134083</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134083#p134083"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134083#p134083"><![CDATA[
Usunąłem komentarze w sumie rzeczywiście wyglądało to trochę nieestetycznie. Jeżeli chodzi o te książki to jedną z nich wypożyczyłem z biblioteki i przejrzałem i w sumie postanowiłem pójść trochę inną drogą. Uczę się programowania i tak na AVR-ach więc myślę że za jakiś czas po prostu będę próbował przenosić te programy na ARM-y. O takie totalne podstawy będę pytał na forach lub ewentualnie sam będę drążył temat. Na razie chciałbym poznać podstawy związane z GPIO(poczytam reference manual) i chciałbym inaczej zrealizować opóźnienie w moim programie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5472">moscow18-1990</a> — 9 lip 2015, o 22:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daniel880]]></name></author>
<updated>2015-07-09T21:53:44+01:00</updated>
<published>2015-07-09T21:53:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134081#p134081</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134081#p134081"/>
<title type="html"><![CDATA[Re: Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134081#p134081"><![CDATA[
Sam zaczynałem z 32bitami dwa tygodnie temu;) Na początek przydadzą się książki, masz dwie pozycje po polsku:<br />Mikrokontrolery STM32 w praktyce Krzysztofa Paprockiego <br />STM32. Aplikacje i ćwiczenia w języku C Marka galewskiego<br /><br />Co prawda autorzy używają SPL ale zawsze to jakiś łagodny wstęp;) Sam nie polecam używania tych bibliotek do wszystkiego bez opamiętania ale na przykład GPIO wolę ustawić przy użyciu biblioteki. Polecam na ich podstawie przeanalizować kilka przykładowych programów. Wejść w definicje funkcji z tych bibliotek i zobaczyć jakie rejestry są ustawiane. Ja jakoś nie mogłem się w nich odnaleźć, według mnie czasami utrudniały zrozumienie danego peryferium.<br /><br />Powinieneś zacząć od prostego programu coś jak<br />[syntax=c]#biblioteki<br /><br />main{<br />   inicjalizacje<br />   while{<br />      zmiana wyjscia<br />   }<br />}[/syntax]<br /><br />Komentarze, które masz u siebie strasznie zaciemniają cały program;) Pomimo, że Manual ma te 600 stron to na początek wystarczy ci przeczytać kilka o RCC i GPIO. Może z 50 stron i masz tam wszystko co potrzebne do podstawowej zabawy z GPIO. Sam też bałem się tej dokumentacji. Teraz pierwsze co robię po uruchomieniu uC to otwieram Manuala i Datasheeta;) Bez tego niczego nie zrobisz;) Poza tym stm to nie avr i nie tak łatwo znaleźć w internecie poradniki czy przykłady a odpowiedź prawie zawsze jest w Manualu.<br /><br /><br />[syntax=c]#include &quot;stm32f10x_gpio.h&quot;             // Keil::Device:StdPeriph Drivers:GPIO<br />#include &quot;stm32f10x.h&quot;                  // Device header<br /><br />GPIO_InitTypeDef GPIO_InitStruct;<br /><br />uint16_t i;<br /><br /><br />int main(){<br /><br />RCC-&gt;APB2ENR|=RCC_APB2ENR_IOPCEN;<br /><br />GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4; <br />GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; <br />GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; <br /><br />GPIO_Init(GPIOC, &amp;GPIO_InitStruct); <br /><br />while(1){<br />GPIOC-&gt;BRR=GPIO_Pin_3;<br />for(i=0;i&lt;10000;i++);<br />GPIOC-&gt;BSRR=GPIO_Pin_3;<br />for(i=0;i&lt;10000;i++);<br />}[/syntax]<br /><br />taki o, prosty program. Co prawda na procesor z rdzeniem M3. Mam nadzieje, że niczego nie zapomniałem;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2328">Daniel880</a> — 9 lip 2015, o 21:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow18-1990]]></name></author>
<updated>2015-07-09T22:06:22+01:00</updated>
<published>2015-07-09T21:13:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134079#p134079</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134079#p134079"/>
<title type="html"><![CDATA[Początkujący prosi o pomoc w rozbudowie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12262&amp;p=134079#p134079"><![CDATA[
Dzień Dobry. Jestem początkujący w dziedzinie mikrokontrolerów 32-bitowych. Sprawa wygląda tak, że pojawiły się one u mnie na studiach i generalnie jest problem z zapoznaniem się z nimi. Posiadam moduł NUCLEO-L053R8 z rdzeniem Cortex-M0+ i posiadam także skonfigurowane środowisko Eclipse Luna wraz z przykładowym projektem. Chciałbym ten projekt rozbudowywać ale ciężko pewnie będzie mi to zrobić samemu i dlatego chciałem zapytać czy mógłbym liczyć na radę specjalistów w tej dziedzinie? Mam świadomość tego że istnieje dokumentacja i pewnie zostanę do niej odesłany ale chciałbym zaznaczyć że liczy ona ponad 700 stron i raczej wzbudza ona we mnie przerażenie. Załączę przykładowy kod który posiadam. Powoduje on miganie zieloną diodą która wchodzi w skład modułu:<br /><br />[syntax=c]#include &lt;stdint.h&gt;<br /><br />#include &quot;inc/stm32l053xx.h&quot;<br /><br />#include &quot;config.h&quot;<br /><br />#include &quot;hdr/hdr_syscon.h&quot;<br /><br /><br /><br />static void flash_access_time(uint32_t frequency);<br />static uint32_t pll_start(uint32_t crystal, uint32_t frequency);<br />static void system_init(void);<br /><br /><br />int main(void)<br />{<br />volatile uint32_t count, count_max = 100000;// with core frequency ~50MHz this gives ~1.5Hz blinking frequency<br /><br />pll_start(CRYSTAL, FREQUENCY);// start the PLL<br />system_init();// initialize other necessary elements<br /><br />GPIOA-&gt;MODER = (GPIOA-&gt;MODER &amp; ~GPIO_MODER_MODE5) | GPIO_MODER_MODE5_0;<br /><br />while (1)<br />{<br />for (count = 0; count &lt; count_max; count++);// delay<br />GPIOA-&gt;BSRR  = 1&lt;&lt;5;<br />for (count = 0; count &lt; count_max; count++);// delay<br />GPIOA-&gt;BRR  = 1&lt;&lt;5;<br />}<br />}<br /><br /><br />static void flash_access_time(uint32_t frequency)<br />{<br /><br />}<br /><br /><br />static uint32_t pll_start(uint32_t crystal, uint32_t frequency) <br />{<br />return frequency;<br />}<br /><br /><br />static void system_init(void) <br />{<br />RCC-&gt;IOPENR |= RCC_IOPENR_GPIOAEN;<br />}[/syntax]  <br /><br />Plik nagłówkowy:<br /><br />[syntax=c]#ifndef CONFIG_H_<br />#define CONFIG_H_<br /><br />#include &quot;hdr/hdr_gpio_masked_access.h&quot;<br /><br /><br /><br />#define CRYSTAL8000000///&lt; quartz crystal resonator which is connected to the chip<br />#define FREQUENCY48000000///&lt; desired target frequency of the core<br /><br />#define LED_PORT GPIOA<br />#define LED_pin5<br /><br /><br /><br />#endif /* CONFIG_H_ */[/syntax]<br /><br /><br />1.Generalnie na początku chciałbym zapoznać się z nazwami rejestrów i z tym co za ich pomocą mogę zrobić<br /><br />2.Chciałbym zlikwidować opóźnienie wywołane pętlą for. Wiem że można zrobić opóźnienie za pomocą tzw. SysTick Timera, ale nie wiem jak to przeprowadzić.<br /><br />Na początku miałbym takie dwa założenia i jeżeli są specjaliści którzy mogliby mi jakoś pomóc w ich realizacji byłbym niezmiernie wdzięczny za jakąkolwiek pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5472">moscow18-1990</a> — 9 lip 2015, o 21:13</p><hr />
]]></content>
</entry>
</feed>