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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-09-14T07:54:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=15813&amp;mode</id>
<entry>
<author><name><![CDATA[Sparrow-hawk]]></name></author>
<updated>2016-09-14T07:54:59+01:00</updated>
<published>2016-09-14T07:54:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=168711#p168711</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=168711#p168711"/>
<title type="html"><![CDATA[Re: Problem z obsługą UART (przerwań) STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=168711#p168711"><![CDATA[
A gdzie masz funkcję main? Jeśli tak rzeczywiście wygląda twój plik main.c, to polecam przynajmniej zacząć od jakiegoś kursu programowania w języku c.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10614">Sparrow-hawk</a> — 14 wrz 2016, o 07:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jitkino]]></name></author>
<updated>2016-09-13T22:09:40+01:00</updated>
<published>2016-09-13T22:09:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=168693#p168693</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=168693#p168693"/>
<title type="html"><![CDATA[Re: Problem z obsługą UART (przerwań) STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=168693#p168693"><![CDATA[
Witam<br /><br />Próbuję odpalić ten projekt, wyskakują mi następujące błędy.<br /><br /><br />[cc] undefined reference to `main'<br />       [cc] collect2.exe: error: ld returned 1 exit status<br /><br />Ma ktoś pomysł co może być przyczyną? <br /><br /><br />W main.c mam :<br /><br />#include &quot;uart.h&quot;<br /><br />void uart_putc(char data)<br />{<br />TxString(&quot;Tekst\r\n&quot;);<br />}<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10161">Jitkino</a> — 13 wrz 2016, o 22:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysssztof]]></name></author>
<updated>2016-07-21T16:05:56+01:00</updated>
<published>2016-07-21T16:05:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164442#p164442</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164442#p164442"/>
<title type="html"><![CDATA[Re: Problem z obsługą UART (przerwań) STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164442#p164442"><![CDATA[
Jeśli kogoś interesuje rozwiązanie tego problemu to informuję, że<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />void USART3_IRQHandler(void){...}<br /></div><br />działa znacznie lepiej od<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />void USART_3_IRQHandler(void){...}<br /></div>.<br /><br />Taka durna literówka, a przez 2 dni nie mogłem jej znaleźć.<br />Najsmutniejsze jest to, że kompilator tego nie wykrył <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Chociaż po prawdzie to nie miał do tego podstaw.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4274">krzysssztof</a> — 21 lip 2016, o 16:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2016-07-21T11:14:25+01:00</updated>
<published>2016-07-21T11:14:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164410#p164410</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164410#p164410"/>
<title type="html"><![CDATA[Re: Problem z obsługą UART (przerwań) STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164410#p164410"><![CDATA[
Witam,<br /><br /><div class="quotetitle">krzysssztof napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent">Dopisane: zakładam, że masz prawidłowo ustawiony stos dla przerwań w skrypcie linkera - jeśli używasz skryptu z dwoma stosami, to sprawdź jeszcze, czy przypadkiem ten PSP nie jest na zero.<br /></div><br />Tego to akurat do końca nie zrozumiałem ale spróbuję się przyjrzeć plikom w projekcie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />To może inaczej, z jakiego środowiska korzystasz ? Jeśli Eclipce + GCC, to w projekcie masz plik z rozszerzeniem .ld, umieść go tutaj.<br /><br /><div class="quotetitle">krzysssztof napisał(a):</div><div class="quotecontent"><br />Ma znaczenie w którym pliku umieszczę obsługę procedury przerwania czy mogę to zrobić w dowolnym pliku ... .c ?<br /></div><br /><br />Znaczenia nie ma żadnego, ważne by plik był widziany w projekcie.<br /><br />Pozdrawiam, QuadMan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 21 lip 2016, o 11:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysssztof]]></name></author>
<updated>2016-07-20T04:59:25+01:00</updated>
<published>2016-07-20T04:59:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164327#p164327</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164327#p164327"/>
<title type="html"><![CDATA[Re: Problem z obsługą UART (przerwań) STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164327#p164327"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Używasz niewłaściwych operatorów do sprawdzania tych flag, ma być &amp; a nie | - bo przecież chcesz sprawdzać tą konkretną flagę, a nie inne, czyli np:<br /></div><br />Racja, tutaj błąd, poprawię.<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Dopisane: zakładam, że masz prawidłowo ustawiony stos dla przerwań w skrypcie linkera - jeśli używasz skryptu z dwoma stosami, to sprawdź jeszcze, czy przypadkiem ten PSP nie jest na zero.<br /></div><br />Tego to akurat do końca nie zrozumiałem ale spróbuję się przyjrzeć plikom w projekcie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Ma znaczenie w którym pliku umieszczę obsługę procedury przerwania czy mogę to zrobić w dowolnym pliku ... .c ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4274">krzysssztof</a> — 20 lip 2016, o 04:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2016-07-20T01:09:18+01:00</updated>
<published>2016-07-20T01:09:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164325#p164325</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164325#p164325"/>
<title type="html"><![CDATA[Re: Problem z obsługą UART (przerwań) STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164325#p164325"><![CDATA[
Witam,<br /><br />pierwsze, co mi się rzuciło w oczy to:[syntax=c]if(USART3-&gt;SR | USART_SR_RXNE){   // jesli odebrano jakis bajt (flaga RXNE), to zapisz ten bajt pod adres_zapisu_bufora_rx i przesun ten adres na nastepna komorke bufora[/syntax]<br /><br />i to :[syntax=c]if(USART3-&gt;SR | USART_SR_TXE){  // jesli uart jest gotowy do nadawania (flaga TXE) to wyslij bajt spod adres_odczytu_bufora_tx i przesun ten adres na nastepna komorke[/syntax]<br /><br />Używasz niewłaściwych operatorów do sprawdzania tych flag, ma być <strong>&amp;</strong> a nie <strong>|</strong> - bo przecież chcesz sprawdzać tą konkretną flagę, a nie inne, czyli np:[syntax=c]if(USART3-&gt;SR &amp; USART_SR_TXE){  // jesli uart jest gotowy do nadawania (flaga TXE) to wyslij bajt spod adres_odczytu_bufora_tx i przesun ten adres na nastepna komorke[/syntax]<br /><br />Pozdrawiam, QuadMan.<br /><br />Dopisane: zakładam, że masz prawidłowo ustawiony stos dla przerwań w skrypcie linkera - jeśli używasz skryptu z dwoma stosami, to sprawdź jeszcze, czy przypadkiem ten PSP nie jest na zero.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 20 lip 2016, o 01:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysssztof]]></name></author>
<updated>2016-07-19T19:48:25+01:00</updated>
<published>2016-07-19T19:48:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164305#p164305</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164305#p164305"/>
<title type="html"><![CDATA[Re: Problem z obsługą UART (przerwań) STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164305#p164305"><![CDATA[
Wywołuję funkcję NVIC_Enable(odpowiedni numer przerwania), ustawiałem też bezpośrednio w rejestrze ISER. Według mnie odbywa się to prawidłowo, jedynkę mam na odpowiednim bicie w rejestrach ISER i ICER.<br /><br />Priorytetów przerwań nie tykam, domyślnie powinno być w porządku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4274">krzysssztof</a> — 19 lip 2016, o 19:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2016-07-19T19:41:33+01:00</updated>
<published>2016-07-19T19:41:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164303#p164303</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164303#p164303"/>
<title type="html"><![CDATA[Re: Problem z obsługą UART (przerwań) STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164303#p164303"><![CDATA[
A ustawiasz NVIC?<br />więcej o nim tutaj (choć akurat nie w powiązaniu z USART-em): <a href="http://www.stm32.eu/node/48"  class="postlink">http://www.stm32.eu/node/48</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 19 lip 2016, o 19:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysssztof]]></name></author>
<updated>2016-07-19T19:10:40+01:00</updated>
<published>2016-07-19T19:10:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164302#p164302</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164302#p164302"/>
<title type="html"><![CDATA[Problem z obsługą UART (przerwań) STM32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15813&amp;p=164302#p164302"><![CDATA[
Witajcie,<br /><br />próbuję napisać sobie obsługę UART na mikrokontrolerze serii STMF103.<br />Bez obsługi przerwań działa - wysyła pożądane ciągi znaków.<br /><br />Natomiast gdy próbuję zrobić to samo na przerwaniu, program się zawiesza (pojawia się flaga o wystąpieniu przerwania, natomiast wydaje mi się, że nie następuje skok do obsługi tego przerwania).<br /><br />Kod wygląda następująco :<br /><br />uart.c:<br />[syntax=c]#include &quot;uart.h&quot;<br /><br />#define UART_RX_BUF_SIZE 32<br />#define UART_RX_BUF_MASK ( UART_RX_BUF_SIZE - 1 )<br />volatile char UART_RxBuf&#91;UART_RX_BUF_SIZE&#93;;<br />volatile uint8_t UART_RxHead;<br />volatile uint8_t UART_RxTail;<br /><br />#define UART_TX_BUF_SIZE 32<br />#define UART_TX_BUF_MASK ( UART_RX_BUF_SIZE - 1 )<br />volatile char UART_TxBuf&#91;UART_TX_BUF_SIZE&#93;;<br />volatile uint8_t UART_TxHead;<br />volatile uint8_t UART_TxTail;<br /><br /><br />void USART_3_IRQHandler(void){<br />uint8_t tmp_head;<br />char data;<br /><br />if(USART3-&gt;SR | USART_SR_RXNE){   // jesli odebrano jakis bajt (flaga RXNE), to zapisz ten bajt pod adres_zapisu_bufora_rx i przesun ten adres na nastepna komorke bufora<br />data = USART3-&gt;DR;<br />tmp_head = ( UART_RxHead +1) &amp; UART_RX_BUF_MASK;<br />if (tmp_head == UART_RxTail){<br /><br />}<br />else{<br />UART_RxHead = tmp_head;<br />UART_RxBuf&#91;tmp_head&#93; = data;<br />}<br />}<br /><br />if(USART3-&gt;SR | USART_SR_TXE){// jesli uart jest gotowy do nadawania (flaga TXE) to wyslij bajt spod adres_odczytu_bufora_tx i przesun ten adres na nastepna komorke<br />if(UART_TxHead != UART_TxTail){<br />UART_TxTail = (UART_TxTail +1) &amp; UART_TX_BUF_MASK;<br />USART3-&gt;DR = UART_TxBuf&#91;UART_TxTail&#93;;<br />}<br />else{<br />USART3-&gt;CR1 &amp;= ~(USART_CR1_TXEIE);  // jesli w buforze nie ma danych to wylacz pzrerwanie do wysylania ( TXE )<br />}<br />}<br />}<br /><br /><br />void uart_putc(char data){<br />uint8_t tmp_head;<br /><br />tmp_head = ( UART_TxHead + 1 ) &amp; UART_TX_BUF_MASK;<br /><br />while (tmp_head == UART_TxTail) {}<br />UART_TxBuf&#91;tmp_head&#93; = data;<br />UART_TxHead = tmp_head;<br /><br />USART3-&gt;CR1 |= (USART_CR1_TXEIE);<br />}<br /><br />void uart_putstr(const char* s){<br />while (*s)<br />uart_putc(*s++);<br />}<br /><br />char uart_getc(void){<br />if (UART_RxHead == UART_RxTail){<br />return 0;<br />}<br />UART_RxTail = ( UART_RxTail + 1 ) &amp; UART_RX_BUF_MASK;<br />return UART_RxBuf&#91;UART_RxTail&#93;;<br />}<br /><br /><br />void uart_init(void){<br /><br />RCC-&gt;APB2ENR |= RCC_APB2ENR_AFIOEN; // gpio alternate function clock<br />RCC-&gt;APB1ENR |= RCC_APB1ENR_USART3EN; // usart3 en<br /><br />USART3-&gt;BRR = 0x75 &lt;&lt; 4 | 0x3; // 19200 Kbps<br />USART3-&gt;CR1 |= USART_CR1_RE | USART_CR1_TE | USART_CR1_RXNEIE /*| USART_CR1_TXEIE */| USART_CR1_UE; // usart 3 read enable, text enable, input register not empty, enable<br /><br />GPIOB-&gt;CRH |= GPIO_CRH_MODE10_0 | GPIO_CRH_CNF10_1;  // PIN B10 OUTPUT PUSH-PULL 10Mhz, PIN B11 FLOATING INPUT<br /><br />//NVIC_EnableIRQ( USART3_IRQn );<br />NVIC-&gt;ISER&#91;1&#93; |= 1&lt;&lt;7; // to samo co linijke wyzej, w wyniku desperacji napisane na rejestrze<br />}[/syntax]<br /><br />uart.h:<br />[syntax=c]#ifndef UART_H_<br />#define UART_H_<br /><br />#include &quot;stm32f10x.h&quot;<br /><br />void uart_init(void);<br />char uart_getc(void);<br />void uart_putc(char data);<br />void uart_putstr(const char* s);<br /><br />void USART_3_IRQHandler(void);<br /><br /><br /><br />#endif /* UART_H_ */[/syntax]<br /><br />I w pętli głównej wywołanie funkcji uart_putstr.<br /><br />Obserwacje na debugerze : program się wiesza kilka cykli po pojawieniu się flagi wystąpienia przerwania, z czego przypuszczam, że nie potrafi odnaleźć obsługi tego przerwania...<br /><br />Co powinienem poprawić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4274">krzysssztof</a> — 19 lip 2016, o 19:10</p><hr />
]]></content>
</entry>
</feed>