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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-23T18:35:05+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=6464&amp;mode</id>
<entry>
<author><name><![CDATA[Rafael86]]></name></author>
<updated>2014-03-23T18:35:05+01:00</updated>
<published>2014-03-23T18:35:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6464&amp;p=75444#p75444</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6464&amp;p=75444#p75444"/>
<title type="html"><![CDATA[sprzętowa obsługa timera outpu compare - nie działa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6464&amp;p=75444#p75444"><![CDATA[
Witam wszystkich<br /><br />mam problem z miganiem dwoma diodami, ale czysto sprzętowo, za pomocą timera 3 (kanały 3 i 4) w trybie outpu compare.<br />Pisząc program wzorowałem się na kodzie ze strony <!-- m --><a class="postlink" href="http://en.radzio.dxp.pl/stm32vldiscovery/lesson5,blinking,with,timer,hardware.html" >http://en.radzio.dxp.pl/stm32vldiscover ... dware.html</a><!-- m --> .<br />Mój kod różni się tylko tym, że nie wykonuje tutaj remmapu, ponieważ w moim uC (stm32f103vct6) TIM3_CH3 i TIM3_CH4 jest podłączony do wyjść PB0 i PB1 w alternate function jako default, a nie remap. <br /><br />Nie mam pojęcia w czym jest problem ale to nie działa. Chce uzyskać miganie obu diodek co pół sekundy.<br />Oto mój kod:<br /><br />[syntax=c]//niezbędne pliki nagłówkowe<br />#include &lt;stddef.h&gt;<br />#include &quot;stm32f10x.h&quot;<br /><br />//deklaracje funkcji<br />void CPU_F(void);<br /><br />int main(void)<br />{<br />CPU_F();//AHB = 32 MHz, TIM_CLK = 32 MHz, APB1 = 16 MHz, APB2 = 32 MHz<br /><br /><br />RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//uaktywnienie zegara dla TIM3  TIM_CLK= 32MHz<br />RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//uaktywnienie zegara dla GPIOx<br />RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE);<br /><br />//inicjalizacja portów do pracy jako wyjscie alternatywne, Push-Pull, 50MHz<br />GPIOB-&gt;CRL |= 0x000000BB; //output PP - alternative function<br /><br />TIM3-&gt;PSC = 31999;//preskaler = 32000 , 32 MHz/32000 = 1000 &quot;tykniec&quot; na sekundę<br />TIM3-&gt;ARR = 1000;//wartosc dokąd ma zliczac timer - przepełnia się co 1 s<br />TIM3-&gt;CCR3 = 500; //wartosc porównania z CNT jak się zrówna wartosc CNT z CCRx to OCx channel ustawia się w stan wysoki<br />TIM3-&gt;CCR4 = 500;//<br /><br />TIM3-&gt;CCER |= (1&lt;&lt;8)|(1&lt;&lt;12); //enable compare output 3 and 4 , polarity - active high<br /><br />TIM3-&gt;CCMR2 |= (1&lt;&lt;12)|(1&lt;&lt;13)|(1&lt;&lt;4)|(1&lt;&lt;5);//toggle - OCxREF toggles when TIMx_CNT = TIMxCCRx, OC4M ustawione 011 , tak samo OC3M<br /><br />         TIM3-&gt;CR1 |= (1&lt;&lt;0);                                       //timer 3 enable<br /><br /><br />  while (1);<br /><br />}[/syntax]<br /><br />Nie wiem też czy dobrze rozumiem działanie trybu output compare (nie rozumiem także czym się różni output compare od capture/compare , pojęcia te w reference manual są używane i nie do końca dostrzegam różnice między nimi). Myśle, że tryb output compare działa w następujący sposób, licznik zlicza od zera do wartości zapisanej w ARR, podczas zliczania gdy wartość licznika zrówna się z wartością CCRx to wyjście OC wystawia stan wysoki lub niski (w zależności od ustawień w rejestrze), następnie po przepełnieniu się licznika cały cykl zaczyna się od nowa.<br /><br />Bardzo prosił bym o pomoc co robię źle, dlaczego to nie działa, wcześniej miganie diodek realizowałem poprzez badanie flagi UIF i poprzez przerwania i wszystko mi ładnie działało,<br />ale chciałbym nauczyć się obsługiwać timer czysto sprzętowo.<br /><br />Z góry dzięki, pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1392">Rafael86</a> — 23 mar 2014, o 18:35</p><hr />
]]></content>
</entry>
</feed>