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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-11T12:16:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=10997&amp;mode</id>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-11T12:16:14+01:00</updated>
<published>2015-03-11T12:16:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123079#p123079</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123079#p123079"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123079#p123079"><![CDATA[
Trochę namieszałeś, bo typ PushPull dotyczy tylko wyjść, a nie wejść.<br /><br />Co do ustawiania podciągania, bo pewnie to miałeś na myśli to nie wnikałem, gdyż w przypadku zgodnego z standardem UART nic nie wymuszam na wejściu bo i po co <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br /><br />Prędkość to to samo, jako wejście nie masz takiej możliwości nawet.<br /><br />Więc dla wejścia jak zaznaczyłeś, ustawiam tylko tryb GPIO_Mode_AF, czyli wyłącznie tryb alternatywny dla danego w tym wypadku GPIO_Pin_10 pinu.<br /><br />Tyle.<br />Dosyć dobrze to jest opisane w Galewskim (taka zielona <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />, z BTC).<p>Statystyki: Napisane przez Gość — 11 mar 2015, o 12:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2015-03-11T11:44:57+01:00</updated>
<published>2015-03-11T11:44:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123073#p123073</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123073#p123073"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123073#p123073"><![CDATA[
Witam,<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Z moich informacji, po prostu chodzi o to, że jako wejście RX, interesuje cię tylko włączenie pinu jako alternative mode, czyli nie włączasz żadnych podciągań itp.<br /></div><br /><br />Tak, rozumiem tryb funkcji alternatywnych. Według dokumentacji, jeżeli ją oczywiście dobrze zrozumiałem, to tryb alternatywnej funkcji ustawia się tylko dla wyjść (tu jako linia TX), bo taką funkcję można ustawić (jak i prędkość czyli szybkość zboczy), natomiast  pin pracujący jako wejście (w tym przypadku linia jako RX) nie ma możliwości ustawienia funkcji alternatywnej (również ustawianie prędkości też wejścia nie dotyczy), więc ustawia się ją tylko jako zwykłe wejście pływające, lub ostatecznie pull-up.<br /><br />Dlatego według mojego rozumowania, tu:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">//PA10 - Rx<br />        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;<br />        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;<br />        GPIO_Init(GPIOA, &amp;GPIO_InitStruct);</div><br /><br />pin 10 został skonfigurowany jako wyjście dla funkcji alternatywnej jako push-pull ( jak wynika z zawartości pola GPIO_OType w strukturze)<br /><br />Dobrze myślę ?<br /><br />Pozdrawiam, Paweł<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 11 mar 2015, o 11:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-11T10:37:55+01:00</updated>
<published>2015-03-11T10:37:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123054#p123054</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123054#p123054"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123054#p123054"><![CDATA[
Z moich informacji, po prostu chodzi o to, że jako wejście RX, interesuje cię tylko włączenie pinu jako alternative mode, czyli nie włączasz żadnych podciągań itp.<br /><br />Dla TX, musisz ustawić tryb pinu czy PP, itp. oraz zegar dla PINU, w tym wypadku masz kontrolę nad &quot;EMI&quot; bo nie potrzeba by czas narastania/opadania przy uarcie był tak krótki = mniejszy czas = większe zakłócenia. Tak łopatologicznie i w telegraficznym skrócie.<br /><br />Może mnie jakiś bardziej ogarnięty kolega poprawić <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<p>Statystyki: Napisane przez Gość — 11 mar 2015, o 10:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2015-03-11T09:45:15+01:00</updated>
<published>2015-03-11T09:45:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123046#p123046</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123046#p123046"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123046#p123046"><![CDATA[
Witam,<br /><br />Widzę, że chyba mój post wywołał niepotrzebną wojnę. Nie było to zamierzone. Ale wracając do przewodniego tematu mam pytanie. Tak powoli analizuję sobie tą konfigurację UARTA i czy:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">          //PA9 - Tx<br />       GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;<br />       GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;<br />       GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;<br />       GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;<br />       GPIO_Init(GPIOA, &amp;GPIO_InitStruct);<br /> <br />        //PA10 - Rx<br />        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;<br />        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;<br />        GPIO_Init(GPIOA, &amp;GPIO_InitStruct);</div><br /><br />PA10 - Rx nie jest tu ustawiony również jako wyjście alternatywnej funkcji ? Pola struktury<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;<br />GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;</div><br />po ustawieniu pinu PA9 - TX nie powinny zmienić chyba swojej zawartości, więc są również użyte do konfiguracji PA10- Rx , który powinien być ustawiony, jeśli dobrze myślę, jako  wejście o wysokiej impedancji. Proszę mnie naprowadzić na prawidłowy tok myślenia.<br /><br />Pozdrawiam, Paweł<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 11 mar 2015, o 09:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-11T07:24:52+01:00</updated>
<published>2015-03-11T07:24:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123028#p123028</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123028#p123028"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123028#p123028"><![CDATA[
<div class="quotetitle">wwojtek napisał(a):</div><div class="quotecontent"><br />Pięknie... wrzuciłem kod z komentarzem &quot;z przymrużeniem&quot; oka, a się zrobiła wojna o bibliotekę. Nieśmiało chciałbym przypomnieć, że temat nie o tym <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Koledze Mirkowi odpowiedziałem na PW, jeśli uzna za stosowne to można przenieść dyskusję do osobnego wątku o bibliotekach vs rejestrach - tylko pewnie doprowadzi to do kolejnego tasiemcowatego wątku o wyższości jednych świąt nad innymi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Na post kolegi <strong>mokrowskiego</strong> ciężko odpowiedzieć, bo choć pisze o &quot;polemice&quot;, to wszystko zawarł w &quot;sarkazm-mode&quot; i bliżej nie wiadomo do czego się odnieść <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br />Rzeczywiście nie ma co robić offtopu ani przenosić chyba do oddzielnego wątku i nie ma o co łamać kopii , nie ma co się kłócić ... ja się wypowiedziałem w temacie ARM jako żółtodziób i zakładam że mogę wcale nie mieć racji, opowiedziałem o swoich wrażeniach na pierwszy rzut oka a one mogą być mylące. Pewnie kiedyś wrócę do takich tematów jak będę siedział w tych zagadnieniach ARM głębiej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... I na pewno nie było moim celem podsycanie jakiejś wojny czy burzy &quot;co lepsze&quot; ... wspomniałem na końcu że i tak każdy zrobi tak jak lubi. Więc proponuję zakończmy te spory w tym wątku.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br /><div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent"><br />Kod wkleiłem dla początkujących, którzy jak ja ze świecą szukają przykładów.<br /></div><br />I na tym się skupmy jak już <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... Bo doświadczony sobie zawsze poradzi a początkujący będzie długo błądził<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 mar 2015, o 07:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-11T03:34:14+01:00</updated>
<published>2015-03-11T03:34:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123018#p123018</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123018#p123018"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123018#p123018"><![CDATA[
W sumie miałem zapisane kilka dosadnych odpowiedzi do maruderów w temacie, ale w sumie podsumowanie zrobił  Mokrowski i Mirek.<br />Do reszty się nie ma co odnosić po za przykładem wwojtka (który jako jedyny wkleił kod na poparcie swej tezy), co prawda teza ma dwa końce, bo kod krótszy ale totalnie nieczytelny <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br /><br />Kod wkleiłem dla początkujących, którzy jak ja ze świecą szukają przykładów.<br />99% dobrych i sprawdzonych kodów jest na Libsach/hal/cmsis<br />Zachodnie fora pękają w szwach od kodów na libsach, tylko u nas taka jakaś dziwna maniera, pomarudzić że Libsy złe, ale już pokazać jak zrobić przenośny kod bez nich, to nie ma chętnego.<p>Statystyki: Napisane przez Gość — 11 mar 2015, o 03:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-11T01:05:49+01:00</updated>
<published>2015-03-11T01:05:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123016#p123016</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123016#p123016"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=123016#p123016"><![CDATA[
Pięknie... wrzuciłem kod z komentarzem &quot;z przymrużeniem&quot; oka, a się zrobiła wojna o bibliotekę. Nieśmiało chciałbym przypomnieć, że temat nie o tym <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Koledze Mirkowi odpowiedziałem na PW, jeśli uzna za stosowne to można przenieść dyskusję do osobnego wątku o bibliotekach vs rejestrach - tylko pewnie doprowadzi to do kolejnego tasiemcowatego wątku o wyższości jednych świąt nad innymi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Na post kolegi <strong>mokrowskiego</strong> ciężko odpowiedzieć, bo choć pisze o &quot;polemice&quot;, to wszystko zawarł w &quot;sarkazm-mode&quot; i bliżej nie wiadomo do czego się odnieść <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez Gość — 11 mar 2015, o 01:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-10T21:43:22+01:00</updated>
<published>2015-03-10T21:43:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122989#p122989</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122989#p122989"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122989#p122989"><![CDATA[
A ja powiem tak, jeśli chodzi o porównanie np kolegi wwojtek (wyłuskałem tylko USART)<br /><br /><div class="quotetitle">wwojtek napisał(a):</div><div class="quotecontent"><br />Ale za to o ile prościej i mniej pisaniny ;P<br /></div><br />[syntax=c]//konfigurowanie ukladu USART<br />USART1-&gt;BRR = driver_uart_brrCount(f_cpu, baud);<br /> <br />    USART1-&gt;CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE | USART_CR1_RXNEIE;<br /> <br />    NVIC_ClearPendingIRQ(USART1_IRQn);<br />    NVIC_EnableIRQ(USART1_IRQn);[/syntax]<br /><br /><div class="quotetitle">wwojtek napisał(a):</div><div class="quotecontent"><br />w porównaniu z tym:<br /></div><br /><br />[syntax=c]//konfigurowanie ukladu USART<br />USART_InitStruct.USART_BaudRate = 115200;                                      //Predkosc transmisji w bps<br />  USART_InitStruct.USART_WordLength = USART_WordLength_8b;                     //Dlugosc dlowa danych<br />  USART_InitStruct.USART_StopBits = USART_StopBits_1;                          //Bity stopu (1 bit)<br />  USART_InitStruct.USART_Parity = USART_Parity_No;                             //Bit parzystosci (wylaczony)<br />  USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //Sprzetowa kontrola przeplywu wylaczona<br />  USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                 //Tryb pracy (odbior i nadawnie)<br />       <br />        USART_Init(USART1, &amp;USART_InitStruct);<br /> <br />        /* clock settings  */<br />        USART_ClockInitStruct.USART_Clock   = USART_Clock_Disable ;<br />        USART_ClockInitStruct.USART_CPOL    = USART_CPOL_High ;<br />        USART_ClockInitStruct.USART_LastBit = USART_LastBit_Disable;<br />        USART_ClockInitStruct.USART_CPHA    = USART_CPHA_1Edge;<br />        USART_ClockInit(USART1, &amp;USART_ClockInitStruct);<br /> <br />        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);<br />        USART_Cmd(USART1, ENABLE);[/syntax]<br /><br />TYLKO proszę mnie źle nie zrozumieć i proszę cię wwojtek nie odbierz tego jakbym miał coś ci za złe ....<br /><br />dla mnie ZDECYDOWANIE ten drugi sposób jest lepszy nawet jeśli jest więcej tej pisaniny <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... dlaczego? prosta sprawa - bo czytam i widzę co ustawiam, nie potrzebuję sięgać do noty PDF żeby sprawdzić co znaczy który bit i rejestr .... <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... Ale ok gdyby chodziło o to że na świecie są TYLKO freelancerzy czyli pojedynczy programiści to czort z tym - każdy sobie rzepkę skrobie - niech piszę jak chce ... I można byłoby na tym temat zamknąć - gdyby nie fakt - że jednak na świecie są też zespoły programistów i chodzi o pewne ułatwienia. Ale PAL PIES na razie zespoły programistów. Jeszcze chwilkę spójrzmy z poziomu pojedynczego freelancera <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> czyli mnie samego. To ja mogę jeszcze jedną rzecz powiedzieć na obronę tego &quot;długiego niby kodu - tej pisaniny&quot; .... co? ... otóż jeśli odłożę go nawet na 10 lat (tak tak - to normalne i tak się może zdarzyć - pomimo to że młodzi ludzie widzą TYLKO to co jest TU i TERAZ i rzadko myślą co będzie za 10 ba! nawet za 5 albo i za 2 lata <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... <br /><br />to jest to o czym piszę i o czym MÓWIĘ wyraźnie i przez całą swoją pierwszą książkę niebieską ale i zieloną i w każdym poradniku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ZAWSZE starajmy się pisać kod tak jakbyśmy go pisali dla jakiegoś zespołu programistów a nie dla samego siebie ... dlaczego ? bo PAMIĘĆ ! ... o ile ta elektroniczna bywa niezawodna to ta w głowie zawodzi i to KAŻDEGO .....<br /><br />spójrz sobie na moje przykłady z Bluebooka gdzie pokazuję jak programuje hmmm (bez urazy nie mówię wwojtek tego teraz do ciebie) ... niedoświadczony programista <br /><br />[syntax=c]TCCRA = 0xB2;[/syntax]<br /><br />a jak to samo programuje nieco bardziej doświadczony programista pomimo że musi się więcej rozpisać:<br /><br />[syntax=c]TCCRA |= (1&lt;&lt;WGM01); // tryb CTC<br />TCCRA |= (1&lt;&lt;COM0A); // pwm out<br />TCCRA |= (1&lt;&lt;&gt;CS01)|(1&lt;&lt;CS02); // presklaer[/syntax]<br /><br />Matko! ... na górze jedna linijka a na dole aż trzy linijki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> co więcej przez te operacje |= stracimy kilka bajtów! ... o żesz w mordę <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> nio trudno ale wolę tak pisać bo nie tylko ja będę wiedział za 10 lat od razu o co kaman i to nawet gdyby tu komentarzy nie było .... Z drugiej zaś strony gdyby ten początkujący po tym = 0xB2; dodał komentarze a chciał szybko później zmienić preskaler to już widzę jak po 10 latach pamiętałby które bity w tym procku odpowiadają za preskaler ....<br /><br />Co więcej - ten mój drugi rozpisany sposób - spowoduje - że jeśli przypadkiem będę musiał komuś przekazać ten kod - to czas na jego analizę zajmie minimum czasu ....<br /><br />REASUMUJĄC - jak zajrzałem sobie do ARM'ów to okazało się, że tu jest sporo fajnych narzędzi które nie tylko ułatwiają i porządkują pracę ale przede wszystkim pozwalają aby kod był bardziej czytelny ....<br /><br />No ja rozumiem że ludzie przy AVR'kach się wykłócali kto napisze kod o kilka bajtów mniejszy gdy np brali ATtiny5 ! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> .... ale TU?!?!?! ... przy potworach ARM/ach z dużą ilością każdej pamięci .... nadal toczyć boje i kopie o kilkaset nawet bajtów ? o ew czas wykonania i to czego - inicjalizacji procka czy zajmie to już nawet nie ileś ms a us !? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> nie nie nie ... brrrr to brzmi dla mnie osobiście troszkę jak koshmar .... <br /><br />Poza tym nie za bardzo mogę zrozumieć tych kilka wypowiedzi niektórych kolegów wyżej - że to programowanie za pomocą struktur jest mniej czytelne - że co ? że mniej czytelne ? JEZU ? no to może hmmm programujemy w całkiem innych językach ? Struktury i długie nazwy przepięknie tu porządkują to co dla OKA! To ma w efekcie końcowym dać co? OSZCZĘDNOŚĆ CZASU! <br /><br />Ale jak mówię - na szczęście - i tak każdy zrobi jak lubi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> zresztą kolega mokrowski jak zwykle zresztą z charakterystycznym dla siebie ale jakże fajnym podejściem - jeśli chodzi o mnie - to PRZEŚLICZNIE to opisał. Ja tylko wypowiadam się tu jako gość - który po raz pierwszy dotyka i patrzy na kod ARM'ów i takie tam ma luźne proste przemyślenia<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 mar 2015, o 21:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2015-03-10T20:48:02+01:00</updated>
<published>2015-03-10T20:48:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122972#p122972</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122972#p122972"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122972#p122972"><![CDATA[
Witam,<br /><br /><strong>rezasurmar</strong>, dzięki. -). Właśnie taką obsługę UART-a miałem sobie napisać, korzystając z GB, zaoszczędziłeś mi pracy, jeszcze raz dzięki.<br /><br />A  co do pisania &quot;po rejestrach&quot;, czy korzystania z STDlibs, no cóż, temat wraca jak bumerang. Najlepiej chyba podsumowuje to:<div class="quotetitle">Likwidator napisał(a):</div><div class="quotecontent"><br />...Każdy niech pisze w tym co lubi, ważne, żeby kod rozumiał i wiedział co tak naprawdę się dzieje.<br /></div> <br />Ja już chyba się w życiu &quot;po rejestrach&quot; napisałem ( dużo robiłem na '51 w .asm), więc teraz, jeśli tylko mogę, staram się korzystać z STDLibs, &quot;cudzych&quot; bibliotek i czego się tylko da, aby bez potrzeby się nie narobić... <br />Pozdrawiam, QuadMan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 10 mar 2015, o 20:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Likwidator]]></name></author>
<updated>2015-03-10T19:35:50+01:00</updated>
<published>2015-03-10T19:35:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122960#p122960</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122960#p122960"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122960#p122960"><![CDATA[
Trzeba dodatkowo poruszyć fakt, żeby pisać w tym Std od ST to trzeba przebrnąć przez dokumentację samej biblioteki - czego oczywiście zdecydowana większość nie robi - bo są gotowce w internecie i ot po prostu copy &amp; paste. Powiedz, żeby inaczej skonfigurowali dane peryferium i zaczynają się schody. Czasami takie coś robi, aby podnieść swoją samoocenę (?) że robię na ARM. Każdy niech pisze w tym co lubi, ważne, żeby kod rozumiał i wiedział co tak naprawdę się dzieje. <br /><br />PS. W firmach zajmujących się systemami wbudowanymi &quot;pisze się po rejestrach&quot;.<br /><br />Moim skromnym zdaniem byłbym skłonny powiedzieć, że dokumentacja do STMów jest tak samo przyjemna jak do AVR, z tą różnicą, że w AVR znajdziemy gotowe kody w dokumentacji, a tutaj how-to, spis rzeczy które trzeba ustawić, żeby ruszyć. Warto spróbować wielu środków, aby wybrać ten dla siebie najodpowiedniejszy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6190">Likwidator</a> — 10 mar 2015, o 19:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-10T13:31:35+01:00</updated>
<published>2015-03-10T13:31:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122916#p122916</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122916#p122916"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122916#p122916"><![CDATA[
<div class="quotetitle">wwojtek napisał(a):</div><div class="quotecontent"><br />Sprawdzałeś może jak kompilator reaguje na &quot;register&quot; w odniesieniu do zmiennej 8bit?<br /></div><br /><br />Nie.<br /><br />Ani nie prościej, ani mniej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />, bo to tylko kolejne powielanie tych samych bloków, to po pierwsze, po drugie spróbuj to szybko przenieść na inny procek <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />. <br />No i j.w pisałem, to nie jest tematem topicu co lepiej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br /><br />Już kilka razy były prośby na forum, o przykłady dla STM/Kinetis, na rejestrach, echo.<p>Statystyki: Napisane przez Gość — 10 mar 2015, o 13:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-10T13:28:11+01:00</updated>
<published>2015-03-10T13:28:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122914#p122914</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122914#p122914"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122914#p122914"><![CDATA[
<div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent"><br />Na rejestrach to jest samobójstwo, masochizm w czystej postaci <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br />Ale za to o ile prościej i mniej pisaniny ;P<br />[syntax=c]void uart_init(uint32_t f_cpu, uint16_t baud) {<br />    RCC-&gt;APB2ENR |= RCC_APB2ENR_USART1EN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN;<br />    gpio_pin_cfg(GPIOA, PA9, gpio_mode_alternate_PP_50MHz);<br />    gpio_pin_cfg(GPIOA, PA10, gpio_mode_input_floating);<br /><br />    USART1-&gt;BRR = driver_uart_brrCount(f_cpu, baud);<br /><br />    USART1-&gt;CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE | USART_CR1_RXNEIE;<br /><br />    NVIC_ClearPendingIRQ(USART1_IRQn);<br />    NVIC_EnableIRQ(USART1_IRQn);<br />}[/syntax]<br />w porównaniu z tym:<br />[syntax=c]void USART1_Config(void){<br />        GPIO_InitTypeDef GPIO_InitStruct;<br />        USART_InitTypeDef  USART_InitStruct;<br />        USART_ClockInitTypeDef USART_ClockInitStruct;<br />        // ****************  UART1  ************************<br />        /* Enable GPIOs clock for RxTx*/<br />        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);<br />  /* Enable UART1 clock */<br />        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);<br />        //PA9 - Tx<br />       GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;<br />       GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;<br />       GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;<br />       GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;<br />       GPIO_Init(GPIOA, &amp;GPIO_InitStruct);<br /> <br />        //PA10 - Rx<br />        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;<br />        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;<br />        GPIO_Init(GPIOA, &amp;GPIO_InitStruct);<br />       <br />        /* Connect RxTX UART1 to port alternate */<br />        GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);<br />        GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);<br />       <br />          //konfigurowanie ukladu USART<br /> <br />  USART_InitStruct.USART_BaudRate = 115200;                                      //Predkosc transmisji w bps<br />  USART_InitStruct.USART_WordLength = USART_WordLength_8b;                     //Dlugosc dlowa danych<br />  USART_InitStruct.USART_StopBits = USART_StopBits_1;                          //Bity stopu (1 bit)<br />  USART_InitStruct.USART_Parity = USART_Parity_No;                             //Bit parzystosci (wylaczony)<br />  USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //Sprzetowa kontrola przeplywu wylaczona<br />  USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                 //Tryb pracy (odbior i nadawnie)<br />       <br />        USART_Init(USART1, &amp;USART_InitStruct);<br /> <br />        /* clock settings  */<br />        USART_ClockInitStruct.USART_Clock   = USART_Clock_Disable ;<br />        USART_ClockInitStruct.USART_CPOL    = USART_CPOL_High ;<br />        USART_ClockInitStruct.USART_LastBit = USART_LastBit_Disable;<br />        USART_ClockInitStruct.USART_CPHA    = USART_CPHA_1Edge;<br />        USART_ClockInit(USART1, &amp;USART_ClockInitStruct);<br /> <br />        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);<br />        USART_Cmd(USART1, ENABLE);  <br />}[/syntax]<br /><br />Próba skonfigurowania ciekawszych peryferiów (typu np. FMC/FSMC) z wykorzystaniem bibliotek to jest elaborat na kilka stron <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Sprawdzałeś może jak kompilator reaguje na &quot;register&quot; w odniesieniu do zmiennej 8bit?<p>Statystyki: Napisane przez Gość — 10 mar 2015, o 13:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[volt_1]]></name></author>
<updated>2015-03-10T13:18:15+01:00</updated>
<published>2015-03-10T13:18:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122912#p122912</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122912#p122912"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122912#p122912"><![CDATA[
Cube  generuje kod z użyciem HAL i w dodatku pod pewne środowiska, oczywiście można to sobie potem ręcznie poprzerabiać, przy okazji nauczyć się tego i owego. Niema to jednak jak datascheet i rejestry, na początku ciężko i oczy rozbiegane po rozdziałach ds, ale jak już opanujesz to wiesz co robisz i kod jakiś lżejszy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Cube  generuje kod z użyciem HAL i w dodatku pod pewne środowiska, oczywiście można to sobie potem ręcznie poprzerabiać, przy okazji nauczyć się tego i owego. Niema to jednak jak datascheet i rejestry, na początku ciężko i oczy rozbiegane po rozdziałach ds, ale jak już opanujesz to wiesz co robisz i kod jakiś lżejszy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2611">volt_1</a> — 10 mar 2015, o 13:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-10T12:52:12+01:00</updated>
<published>2015-03-10T12:52:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122910#p122910</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122910#p122910"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122910#p122910"><![CDATA[
<div class="quotetitle">gizmo5418 napisał(a):</div><div class="quotecontent"><br />W HAL to chyba tylko dla procków stm32F4 z tego co zauważyłem, natomiast dla stm32f1 (akurat w nucleo taki mam) generuje w stdlibs. Mogę się oczywiście mylić, gdyż dla innych nie próbowałem generować.<br /></div><br /><br />Mylisz się, dla L1 też generuje w HAL.<br /><br /><div class="quotetitle">gizmo5418 napisał(a):</div><div class="quotecontent"><br />ale nie jest to aż taką tragedią, jak to większość opisuje.<br /></div><br /><br />Na początku może i nie jest, bo j.w pisałem poznajesz procesor, ale w przypadku gdy ważna jest przenośność kodu, czy szybkość implementacji, tragedia to mało powiedziane.<br /><br />Jak pisałem, &quot;śpeców&quot; którzy twierdzą że na rejestrach jest łatwo, przewala się przez polski internet mnóstwo, tylko spróbuj zapytać o coś, albo znajdź dobre przykłady, nie migania diodą czy właśnie prostej konfiguracji UARTa, a coś bardziej zaawansowanego. Powodzenia.<br /><br />Ale nie wyższość rejestrów nad CMSIS/HAL jest tematem tego topicu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<p>Statystyki: Napisane przez Gość — 10 mar 2015, o 12:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2015-03-10T12:38:12+01:00</updated>
<published>2015-03-10T12:38:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122907#p122907</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122907#p122907"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122907#p122907"><![CDATA[
Witam,<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Na rejestrach to jest samobójstwo, masochizm w czystej postaci <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />, ale co kto lubi.<br /></div><br /><br />W przypadku UARTA i pracy w trybie 8n1 oczywiście bez DMA to ustawienie zaledwie paru bitów.<br />Fakt, że na początku datasheet nie opuszcza rąk, ale nie jest to aż taką tragedią, jak to większość opisuje.<br /><br />Konfigurację zegara też pisałem na rejestrach i bezproblemowo ruszyło. Ważne, aby zrozumieć zasadę i kolejność działania. Dla mnie początkującego, łatwiej jest w taki sposób konfigurować, ktoś inny robi to inaczej.<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Widziałem że do procków STM jest takie fajne narzędzie, nazywa się jakoś Cube....<br /></div><br /><br />Tak Mirku jest to STM32CubeMx, działa bezproblemowo również pod linuksem, ale jak popatrzyłem w kod który wygenerował to też wszystko było konfigurowane poprzez struktury. Fakt łatwiej jest, bo tylko się klika i widać jak na dłoni wszystkie ustawienia.<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Dokładnie tak, z tym że on generuje właśnie w HAL....<br /></div><br /><br />W HAL to chyba tylko dla procków stm32F4 z tego co zauważyłem, natomiast dla stm32f1 (akurat w nucleo taki mam) generuje w stdlibs. Mogę się oczywiście mylić, gdyż dla innych nie próbowałem generować.<br /><br />Pozdrawiam, Paweł<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 10 mar 2015, o 12:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-10T12:12:07+01:00</updated>
<published>2015-03-10T12:12:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122906#p122906</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122906#p122906"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122906#p122906"><![CDATA[
Na rejestrach to jest samobójstwo, masochizm w czystej postaci <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />, ale co kto lubi.<br /><br />Dla mnie istotna jest prostota i przenośność kodu, to nie Atiny z 1KB flasha i 64B ramu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />. <br /><br />Można się sporo nauczyć przy rejestrach, ale j.w łatwo o błąd i dla mnie przynajmniej nie warto się męczyć, też byłem zwolennikiem pracowania na rejestrach, po wypowiedziach elektrodowych &quot;śpeców&quot;<br />Tylko, że jakoś na świecie panuje całkiem odwrotna tendencja, owszem, jak projekt chcesz wcisnąć w jakiegoś małego L0, to można się pobawić, ale wbrew pozorom, struktury nie takie straszne. <br />HAL jest przerośniety znaczniej, StdLibs są znośne.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Widziałem że do procków STM jest takie fajne narzędzie, nazywa się jakoś Cube i tam się graficznie zaznacza z jakich peryferiów się korzysta a ono ładnie generuje cały kod do inicjalizacji <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> może warto tego spróbować ?<br /></div><br /><br />Dokładnie tak, z tym że on generuje właśnie w HAL, co prawda przy dużych prockach kilka KB w tą czy w tą nie robi różnicy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br /><br />No i można zobaczyć jak to wszystko jest inicjowane itd.<p>Statystyki: Napisane przez Gość — 10 mar 2015, o 12:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-10T12:09:29+01:00</updated>
<published>2015-03-10T12:09:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122904#p122904</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122904#p122904"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122904#p122904"><![CDATA[
Widziałem że do procków STM jest takie fajne narzędzie, nazywa się jakoś Cube i tam się graficznie zaznacza z jakich peryferiów się korzysta a ono ładnie generuje cały kod do inicjalizacji <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> może warto tego spróbować ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 mar 2015, o 12:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2015-03-10T12:07:41+01:00</updated>
<published>2015-03-10T12:07:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122903#p122903</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122903#p122903"/>
<title type="html"><![CDATA[Re: Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122903#p122903"><![CDATA[
Witam,<br /><br />O proszę, sam przenoszę bibliotekę od uartu z GB, a idzie mi to bardzo powoli gdyż początkujący jestem, a tu taka niespodzianka. Świetnie, ale mam straszną awersję do konfigurowania peryferii za pomocą struktur, bo nic nie mogę z tego wywnioskować i jakieś takie ociężałe mi się to wydaje, więc z pomocą datasheeta powolutku skrobię konfigurację na rejestrach.<br /><br />Pozdrawiam, Paweł<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 10 mar 2015, o 12:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-03-10T11:26:57+01:00</updated>
<published>2015-03-10T11:26:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122899#p122899</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122899#p122899"/>
<title type="html"><![CDATA[Uart callback na STM32L152 al'a Kardaś]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10997&amp;p=122899#p122899"><![CDATA[
Wrzucam (nie pełny, trzeba mieć GB <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" />) kod jak obsłużyć ładnie UART z STM32L152 (łatwo przeportować na inny) callbackami opisanymi w Green Booku.<br /><br />uart.c<br />[syntax=c]#include &lt;stdlib.h&gt;<br />#include &quot;stm32l1xx.h&quot;<br />#include &quot;uart.h&quot;<br /><br />........................<br /><br />// Zdarzenie do odbioru danych łańcucha tekstowego z bufora cyklicznego<br />void UART_RX_STR_EVENT(char * rbuf) {<br />.......................<br />}<br /><br />// definiujemy funkcję dodającą jeden bajt do/z bufora cyklicznego<br />void uart_putc( char data ) {<br />.......................<br />USART_ITConfig(USART1, USART_IT_TXE, ENABLE);<br />}<br /><br /><br />void uart_puts(char *s)// wysyła łańcuch z pamięci RAM na UART<br />{<br />..........<br />}<br /><br />void uart_putint(int value, int radix)// wysyła na port szeregowy liczbę<br />{<br />..........<br />}<br /><br /><br />// definiujemy funkcję pobierającą jeden bajt z bufora cyklicznego<br />......<br /><br /><br />void USART1_Config(void){<br />GPIO_InitTypeDef GPIO_InitStruct;<br />USART_InitTypeDef  USART_InitStruct; <br />USART_ClockInitTypeDef USART_ClockInitStruct;<br />// ****************  UART1  ************************<br />/* Enable GPIOs clock for RxTx*/<br />RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);<br />  /* Enable UART1 clock */<br />RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);<br />//PA9 - Tx<br />       GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;<br />       GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;<br />       GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;<br />       GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;<br />       GPIO_Init(GPIOA, &amp;GPIO_InitStruct);<br /><br /> //PA10 - Rx<br /> GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;<br /> GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;<br /> GPIO_Init(GPIOA, &amp;GPIO_InitStruct);<br /><br />/* Connect RxTX UART1 to port alternate */<br />GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);<br />GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);<br /><br />  //konfigurowanie ukladu USART<br /><br />  USART_InitStruct.USART_BaudRate = 115200;                                      //Predkosc transmisji w bps<br />  USART_InitStruct.USART_WordLength = USART_WordLength_8b;                     //Dlugosc dlowa danych<br />  USART_InitStruct.USART_StopBits = USART_StopBits_1;                          //Bity stopu (1 bit)<br />  USART_InitStruct.USART_Parity = USART_Parity_No;                             //Bit parzystosci (wylaczony)<br />  USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //Sprzetowa kontrola przeplywu wylaczona<br />  USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                 //Tryb pracy (odbior i nadawnie)<br /><br />USART_Init(USART1, &amp;USART_InitStruct);<br /><br />/* clock settings  */<br />USART_ClockInitStruct.USART_Clock   = USART_Clock_Disable ;<br />USART_ClockInitStruct.USART_CPOL    = USART_CPOL_High ;<br />USART_ClockInitStruct.USART_LastBit = USART_LastBit_Disable;<br />USART_ClockInitStruct.USART_CPHA    = USART_CPHA_1Edge;<br />USART_ClockInit(USART1, &amp;USART_ClockInitStruct);<br /><br />USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);<br />        USART_Cmd(USART1, ENABLE);  <br />}<br /><br />void USART1_IRQHandler(void)<br />{<br />  GPIO_ToggleBits(GPIOB, GPIO_Pin_2);<br /><br />if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)<br />  {<br />    <br />register uint8_t tmp_head;<br />                register char data;<br /><br />data = USART_ReceiveData(USART1);    //Odczyt danej automatycznie kasuje flage przerwania           <br /><br />    // obliczamy nowy indeks „głowy węża”<br />    .............<br /><br /> }<br /><br />// Obsługa Przerywania TX<br />if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET){<br />............................<br />............................<br />............................<br />USART_SendData(USART1,UART_TxBuf&#91;UART_TxTail&#93;);<br />}<br />else{<br />USART_ITConfig(USART1, USART_IT_TXE, DISABLE);    //Wylacz przerwanie = koniec transmisji<br />}<br />}<br /><br /><br />// ********* Obsługa Stringów **************************<br /><br />//<br /><br />void itoa(unsigned int i, char *buf, int base){<br />char *s;<br />#define LEN10<br />int rem;<br />char rev&#91;LEN+1&#93;;<br /><br />if (i == 0)<br />s = &quot;0&quot;;<br />else<br />{<br />rev&#91;LEN&#93; = 0;<br />s = &amp;rev&#91;LEN&#93;;<br />while (i)<br />{<br />rem = i % base;<br />if (rem &lt; 10)<br />*--s = rem + '0';<br />else if (base == 16)<br />*--s = &quot;abcdef&quot;&#91;rem - 10&#93;;<br />i /= base;<br />}<br />}<br />strcpy(buf, s);<br />}[/syntax]<br /><br />pliku .h nie ma sensu wrzucać, praktycznie to samo, po za dołączeniem iota, można olać, jeżeli wasz IDE wspiera.<br /><br />Jak widać zmian jest niewiele, usunięte są niezmienione fragmenty skopiowane wprost z biblioteki Mirka z GB.<br /><br /><br />Tema wklejam jako ciekawostkę, że spokojnie można przeportować praktycznie każdą bibliotekę z książek Mirka bez większych problemów na inne procesory.<br /><br /><span style="color: #FF0000"><span style="font-size: 120%; line-height: normal">Nie udostępniam całej biblioteki, nie pomagam uruchomić całości (od tego jest GB). Nie odpowiadam w tej kwestii na PW.</span></span><p>Statystyki: Napisane przez Gość — 10 mar 2015, o 11:26</p><hr />
]]></content>
</entry>
</feed>