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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-02-12T19:07:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=10615&amp;mode</id>
<entry>
<author><name><![CDATA[simoon87]]></name></author>
<updated>2015-02-12T19:07:14+01:00</updated>
<published>2015-02-12T19:07:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118615#p118615</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118615#p118615"/>
<title type="html"><![CDATA[Re: STM32 [ZL27ARM] problem z wysłaniem zawartości bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118615#p118615"><![CDATA[
Dzięki wielkie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> , 3dni patrzyłem na ten kod i nie wiedziałem gdzie mam zonk... Teraz muszę tylko wykombinować jak to poprawić, tak żeby nie przeszkadzało później. Docelowo aplikacja ma współpracować z GPSem ale chwiałbym też mieć możliwość wysłania czegoś na terminal bez wielkich zmian.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=335">simoon87</a> — 12 lut 2015, o 19:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-02-12T12:13:26+01:00</updated>
<published>2015-02-12T12:13:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118567#p118567</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118567#p118567"/>
<title type="html"><![CDATA[Re: STM32 [ZL27ARM] problem z wysłaniem zawartości bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118567#p118567"><![CDATA[
Aaa tu mnie masz, faktycznie nie trzeba kasować - mea culpa <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />To była dobra wiadomość... zła jest taka, że nie mam innych pomysłów  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br /><br />Tzn. coś mi nie pasuje w buforze kołowym. Chyba za bardzo chciałeś uprościć z tym przekazywaniem bufora bezpośrednio do puts - ale mogę się mylić bo tak skoro świt to ciężko się myśli <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Po resecie procka bufory Rx i Tx są wyzerowane, więc <em>USART_Puts( USART1, UART_RxBuf );</em> od razu wraca. <br />Przychodzi jakiś znak - dajmy na to 'x'. Odpala się przerwanie od odbioru i dzieje się coś takiego (pominąłem to co nie ważne):<br />[syntax=c]TmpBeg = (RxBeg + 1) &amp; UART_RX_MASK; // TmpBeg = 1 (RxBeg po resecie było zerem)<br />default: RxBeg = TmpBeg; UART_RxBuf&#91;TmpBeg&#93; = byte; // RxBeg = 1, 'x' zapisuje się pod adresem &#91;1&#93; w buforze[/syntax]czyli bufor wygląda mniej więcej tak: RxBuf = {0, 'x', 0, 0, 0, 0... };<br /><br />Przerwanie się kończy, wracamy do pętli głównej - odpala się <em>USART_Puts( USART1, UART_RxBuf );</em> i... i od razu wraca bo <em>UART_RxBuf</em> wskazuje na początek bufora - czyli na 0; odebrany znak jest na kolejnej pozycji. <br /><br />To by tłumaczyło czemu nie działa, chyba że po drodze coś zgubiłem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez Gość — 12 lut 2015, o 12:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[simoon87]]></name></author>
<updated>2015-02-12T11:42:02+01:00</updated>
<published>2015-02-12T11:42:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118565#p118565</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118565#p118565"/>
<title type="html"><![CDATA[Re: STM32 [ZL27ARM] problem z wysłaniem zawartości bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118565#p118565"><![CDATA[
<div class="quotetitle">wwojtek napisał(a):</div><div class="quotecontent"><br />Pierwsze co się rzuca w oczy to to, że nie zerujesz flag w przerwaniu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br /><strong>RM0008.pdf page: 662</strong><br />In single buffer mode, clearing the RXNE bit is performed by a software read to the USART_DR register.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=335">simoon87</a> — 12 lut 2015, o 11:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2015-02-11T19:18:19+01:00</updated>
<published>2015-02-11T19:18:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118429#p118429</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118429#p118429"/>
<title type="html"><![CDATA[Re: STM32 [ZL27ARM] problem z wysłaniem zawartości bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118429#p118429"><![CDATA[
Pierwsze co się rzuca w oczy to to, że nie zerujesz flag w przerwaniu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez Gość — 11 lut 2015, o 19:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[simoon87]]></name></author>
<updated>2015-02-11T21:58:00+01:00</updated>
<published>2015-02-11T18:40:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118419#p118419</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118419#p118419"/>
<title type="html"><![CDATA[STM32 [ZL27ARM] problem z wysłaniem zawartości bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10615&amp;p=118419#p118419"><![CDATA[
Witam, Otóż mam pewien problem z obsługą USARTu na STM32F103VBT6. Proszę Was o podpowiedz co robię nie tak. Używam przerwań, dla pierwszych testów chciałem stworzyć program który odbierze dane nadesłane z terminala a następnie odpowie tym samym. Do tego celu w pliku USART.c zadeklarowałem 2 bufory (UART_RxBuf[32], UART_TxBuf[32]) oraz indexy początku (TxBeg, RxBeg) i końca (RxBeg, TxBeg) dla każdego z nich oraz zmienną ascii_cr która liczy znaki CR w buforze. Problem polega na tym, że dane są odbierane ale mam problem z ich wysłaniem. Do wysyłania napisałem funkcje poniżej:<br /><br />[syntax=c]volatile uint8_t UART_RxBuf&#91;UART_RX_BUF_SIZE&#93;;<br />volatile uint8_t RxBeg;<br />volatile uint8_t RxEnd;<br /><br />volatile uint8_t UART_TxBuf&#91;UART_TX_BUF_SIZE&#93;;<br />volatile uint8_t TxBeg;<br />volatile uint8_t TxEnd;<br /><br /><br />void USART_Puts( USART_TypeDef* USARTx, uint8_t *s )// wysyła łańcuch z pamięci RAM na UART<br />{<br />while(*s)  USART_SendChar(USARTx, *s++);<br />}<br /><br />void USART_SendChar(USART_TypeDef* USARTx, uint8_t Char)<br />{<br />/* Check the parameters */<br />assert_param(IS_USART_ALL_PERIPH(USARTx));<br />assert_param(IS_USART_DATA(Char));<br /><br />/* Fill Tx buffor */<br />uint8_t tmp_head;<br />tmp_head = (TxBeg+1) &amp; UART_TX_MASK;<br />while(tmp_head == TxEnd) {}<br />UART_TxBuf&#91;tmp_head&#93;=Char;<br />TxBeg=tmp_head;<br /><br />/* Turn On Tx Interrupt / Starting transmit */<br />USART_ITConfig(USARTx, USART_IT_TXE, ENABLE);<br />}[/syntax]<br /><br /><br />sama funkcja działa gdy wyślę coś w stylu:<br />[syntax=c]USART_Puts( USART1, &quot;test&quot;);[/syntax]<br /><br /><br />Skąd wiem, że dane zostały odebrane? a no stad, że gdy w pętli głównej zrobię coś takiego:<br />[syntax=c]// Infinite loop<br />    while(1)<br />    {<br />if( ascii_cr )<br />{<br />                        ascii_cr=0;<br />for(int i=0; i&lt;32; i++)// to działa<br />{<br />USART_SendChar( USART1, UART_RxBuf&#91;i&#93; );<br />}<br />}<br />    }[/syntax]<br /><br /><br />dostaje zawartość całego bufora:<br /><a href="http://forum.atnel.pl/_obrazki/o/335/4adee831006831ac12078b0d25a2da22.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/335/4adee831006831ac12078b0d25a2da22.jpg" alt="Obrazek" /></a><br /><br />Natomiast gdy podmienię tą pętle for na funkcję poniżej to w terminalu dostaje WIELKIE NIC;/<br /><br />[syntax=c]USART_Puts( USART1, UART_RxBuf );[/syntax]<br /><br /><br />Poniżej załączam kod mojego przerwania:<br />[syntax=c]/*******************************************************************************<br />* Function Name  : USART1_IRQHandler<br />* Description    : This function handles USART1 global interrupt request.<br />* Input          : None<br />* Output         : None<br />* Return         : None<br />*******************************************************************************/<br />void USART1_IRQHandler(void)<br />{<br />if( USART_GetITStatus(USART1, USART_IT_RXNE)==SET)<br />{<br />register uint8_t TmpBeg;<br />register uint8_t byte;<br /><br />GPIO_WriteBit( GPIOB, GPIO_Pin_15, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_15)) ); //XOR LED8<br />TmpBeg = (RxBeg + 1) &amp; UART_RX_MASK;<br />byte = (uint8_t)(USART1-&gt;DR);<br /><br />if(TmpBeg==RxEnd) RxBeg = RxEnd;<br /><br />else<br />{<br />switch(byte)<br />    {<br />        case 0:// ignoruje NUL<br />        case 10: break;// ignoruje LineFeed<br />        case 13: ascii_cr++;// CarriageReturn w buforze<br /><br />        default : RxBeg = TmpBeg; UART_RxBuf&#91;TmpBeg&#93; = byte;<br />        }<br />        }<br />}<br /><br />if( USART_GetITStatus(USART1, USART_IT_TXE)==SET )<br />{<br />if( TxBeg != TxEnd )<br />{<br />TxEnd = (TxEnd + 1) &amp; UART_TX_MASK;<br />USART1-&gt;DR = UART_TxBuf&#91;TxEnd&#93;;<br />}<br />else USART_ITConfig(USART1, USART_IT_TXE, DISABLE);  // wylacz przerwanie = koniec transmisji<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=335">simoon87</a> — 11 lut 2015, o 18:40</p><hr />
]]></content>
</entry>
</feed>