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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2022-06-14T13:57:19+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=24248&amp;mode</id>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2022-06-14T13:57:19+01:00</updated>
<published>2022-06-14T13:57:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235617#p235617</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235617#p235617"/>
<title type="html"><![CDATA[Re: STM32F103 - Makra dla GPIO na rejestrach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235617#p235617"><![CDATA[
Jeszcze chwile kombinowałem z tymi makrami i dałem sobie spokój, może diabeł tkwi w szczegółach.<br />Z funkcją gpio_pin_cfg() wszystko śmiga bez problemu:)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 14 cze 2022, o 13:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2022-06-13T20:57:38+01:00</updated>
<published>2022-06-13T20:57:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235614#p235614</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235614#p235614"/>
<title type="html"><![CDATA[Re: STM32F103 - Makra dla GPIO na rejestrach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235614#p235614"><![CDATA[
Super. Dzięki <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=968">gordon10</a> — 13 cze 2022, o 20:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2022-06-13T20:54:29+01:00</updated>
<published>2022-06-13T20:54:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235613#p235613</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235613#p235613"/>
<title type="html"><![CDATA[Re: STM32F103 - Makra dla GPIO na rejestrach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235613#p235613"><![CDATA[
To ten fragment:<br />[syntax=c]if ( (mode &amp; ((uint32_t)16|8)) == ((uint32_t)16|8) ) {<br />                port-&gt;ODR |= pinTmp;<br />        }[/syntax]<br />Zabrakło po prostu wpisu w rejestrze ODR<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16487">Zealota</a> — 13 cze 2022, o 20:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2022-06-13T20:46:43+01:00</updated>
<published>2022-06-13T20:46:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235611#p235611</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235611#p235611"/>
<title type="html"><![CDATA[Re: STM32F103 - Makra dla GPIO na rejestrach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235611#p235611"><![CDATA[
To skorzystam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> To ta funkcja gpio_pin_cfg() co wkleiłeś?<br />Bo z tym rzutowaniem coś nie idzie... albo coś motam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 13 cze 2022, o 20:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2022-06-13T20:21:35+01:00</updated>
<published>2022-06-13T20:21:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235610#p235610</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235610#p235610"/>
<title type="html"><![CDATA[Re: STM32F103 - Makra dla GPIO na rejestrach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235610#p235610"><![CDATA[
U mnie jest poprawka na PullUpy<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16487">Zealota</a> — 13 cze 2022, o 20:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2022-06-13T19:49:27+01:00</updated>
<published>2022-06-13T19:49:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235609#p235609</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235609#p235609"/>
<title type="html"><![CDATA[Re: STM32F103 - Makra dla GPIO na rejestrach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235609#p235609"><![CDATA[
Dzięki za podpowiedź. <br />Rejestry CRL są 32-bit. Najpierw sprawdzę z rzutowaniem.<br />W sumie zapomniało mi się o Szczywronku - jego funkcji już jakiś czas nie używałem, bo nie obsługuje pull-upów, ale tu będzie ok.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 13 cze 2022, o 19:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2022-06-13T19:21:22+01:00</updated>
<published>2022-06-13T19:21:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235608#p235608</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235608#p235608"/>
<title type="html"><![CDATA[Re: STM32F103 - Makra dla GPIO na rejestrach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235608#p235608"><![CDATA[
Rejestry teoretycznie są 16 bitowe, ale może dochodzi do promocji na int. Rzutuj zatem te literały, dla pewności. Od tego bym zaczął.<br />Oprócz tego proponuję zajrzeć do poradnika Szczywronka, tam są uniwersalne funkcje do konfiguracji<br />W uproszczeniu tak to wygląda<br />[syntax=c]typedef enum {<br />/* Push-Pull */<br />gpio_mode_output_PP_2MHz = 2,<br />gpio_mode_output_PP_10MHz = 1,<br />gpio_mode_output_PP_50MHz = 3,<br />/* Open-Drain */<br />gpio_mode_output_OD_2MHz = 6,<br />gpio_mode_output_OD_10MHz = 5,<br />gpio_mode_output_OD_50MHz = 7,<br />/* Push-Pull */<br />gpio_mode_alternate_PP_2MHz = 10,<br />gpio_mode_alternate_PP_10MHz = 9,<br />gpio_mode_alternate_PP_50MHz = 11,<br />/* Open-Drain */<br />gpio_mode_alternate_OD_2MHz = 14,<br />gpio_mode_alternate_OD_10MHz = 13,<br />gpio_mode_alternate_OD_50MHz = 15,<br />/* Analog input (ADC) */<br />gpio_mode_input_analog = 0,<br />/* Floating digital input. */<br />gpio_mode_input_floating = 4,<br />/* Digital input with pull-up/down (depending on the ODR reg.). */<br />gpio_mode_input_pull_down = 8,<br />gpio_mode_input_pull_up = 8|16<br />} T_GPIO_MODE;<br /><br />typedef enum {<br />PA0 = 0x00000001UL,<br />PA1 = 0x00000002UL,<br />PA2 = 0x00000004UL,<br />PA3 = 0x00000008UL,<br />PA4 = 0x00000010UL,<br />PA5 = 0x00000020UL,<br />PA6 = 0x00000040UL,<br />PA7 = 0x00000080UL,<br />PA8 = 0x00000100UL,<br />PA9 = 0x00000200UL,<br />PA10 = 0x00000400UL,<br />PA11 = 0x00000800UL,<br />PA12 = 0x00001000UL,<br />PA13 = 0x00002000UL,<br />PA14 = 0x00004000UL,<br />PA15 = 0x00008000UL,<br />} T_GPIO_PIN;<br /><br />void gpio_pin_cfg(GPIO_TypeDef * const port, T_GPIO_PIN pin, T_GPIO_MODE mode) {<br />T_GPIO_PIN pinTmp = pin;<br />pin = __builtin_ctz(pin) * 4;<br />uint32_t volatile * cr_reg;<br />uint32_t cr_val;<br />cr_reg = &amp;port-&gt;CRL;<br />if (pin &gt; 28) {<br />pin -= 32;<br />cr_reg = &amp;port-&gt;CRH;<br />}<br />cr_val = *cr_reg;<br />cr_val &amp;= ~((uint32_t) (0x0f &lt;&lt; pin));<br />cr_val |= (uint32_t) (mode &lt;&lt; pin);<br />*cr_reg = cr_val;<br /><br />if ( (mode &amp; ((uint32_t)16|8)) == ((uint32_t)16|8) ) {<br />port-&gt;ODR |= pinTmp;<br />}<br />}<br /><br />inline void gpio_pin_LO( GPIO_TypeDef * const port, T_GPIO_PIN pin ) {<br />port-&gt;BRR = pin;<br />}<br />inline void gpio_pin_HI( GPIO_TypeDef * const port, T_GPIO_PIN pin ) {<br />port-&gt;BSRR = pin;<br />}<br /><br />#define PORTA GPIOA<br />#define PORTB GPIOB// itd.<br /><br /><br />#define SCK_PORTPORTA<br />#define SCK_PINPA1<br />#define CS_PORTPORTA<br />#define CS_PINPA2<br /><br />#define CS_LO()gpio_pin_LO( SCK_PORT, SCK_PIN )<br />#define CS_HI()gpio_pin_HI( SCK_PORT, SCK_PIN )<br /><br />int main(void) {<br />gpio_pin_cfg( SCK_PORT, SCK_PIN, gpio_mode_output_PP_10MHz );<br />gpio_pin_cfg( CS_PORT,  CS_PIN,  gpio_mode_output_PP_50MHz );<br /><br />CS_LO();<br /><br />while(1) {<br /><br /><br />}<br />}<br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16487">Zealota</a> — 13 cze 2022, o 19:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2022-06-13T18:43:07+01:00</updated>
<published>2022-06-13T18:43:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235607#p235607</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235607#p235607"/>
<title type="html"><![CDATA[STM32F103 - Makra dla GPIO na rejestrach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24248&amp;p=235607#p235607"><![CDATA[
Witam,<br />Czy próbował ktoś tworzyć makra w STM32 do ustawiania pinów?<br />Ja próbuję stworzyć makra #define dla GPIO w STM32F103 (dla wyświetlacza ST7565), żeby móc łatwo zmieniać numery pinów dla odpowiednich sygnałów. Jednak coś idzie nie tak, i dla dowolnie przypisanych numerów pinów, zawsze tylko pierwsze 3 (najniższe numery) są prawidłowo skonfigurowane. Nie mam pomysłu od czego to zależy. Robię to w ten sposób:<br />[syntax=c]// PORT<br />#define ST_PORTGPIOA//<br /><br />// PINs<br />#define CS  1//Chip select<br />#define RST  2//Reset (Lo is active)<br />#define DC 3//H-data, L-command<br />#define SCK 4//Clock<br />#define MOSI 5//Serial Input<br />#define LED6<br /><br />#define CS_LOST_PORT-&gt;BRR = (1&lt;&lt;CS)<br />#define CS_HIST_PORT-&gt;BSRR = (1&lt;&lt;CS)<br />#define RST_LOST_PORT-&gt;BRR = (1&lt;&lt;RST)<br />#define RST_HIST_PORT-&gt;BSRR = (1&lt;&lt;RST)<br />#define DC_LOST_PORT-&gt;BRR = (1&lt;&lt;DC)<br />#define DC_HIST_PORT-&gt;BSRR = (1&lt;&lt;DC)<br />#define SCK_LOST_PORT-&gt;BRR = (1&lt;&lt;SCK)<br />#define SCK_HIST_PORT-&gt;BSRR = (1&lt;&lt;SCK)<br />#define MOSI_LOST_PORT-&gt;BRR = (1&lt;&lt;MOSI)<br />#define MOSI_HIST_PORT-&gt;BSRR = (1&lt;&lt;MOSI)<br />#define LED_LOST_PORT-&gt;BRR = (1&lt;&lt;LED)<br />#define LED_HIST_PORT-&gt;BSRR = (1&lt;&lt;LED)<br /><br />// inicjalizacja portu/pinów<br />RCC-&gt;APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN;// wlacz zegar dla GPIOA i GPIOB<br /><br />ST_PORT-&gt;CRL &amp;= ~(// bity CNF - pozycje 2,6,10,14... wyjscia push-pull<br />(3UL &lt;&lt; (CS*2U+2)) |//<br />(3UL &lt;&lt; (RST*2U+2)) |<br />(3UL &lt;&lt; (DC*2U+2)) |<br />(3UL &lt;&lt; (SCK*2U+2)) |//<br />(3UL &lt;&lt; (MOSI*2U+2)) |//<br />(3UL &lt;&lt; (LED*2U+2))<br />);<br /><br />ST_PORT-&gt;CRL |=// bity MODE - pozycje 0,4,8,12... szybkosc wyjsc 10MHz<br />(1UL &lt;&lt; CS*2U) |//<br />(1UL &lt;&lt; RST*2U) |<br />(1UL &lt;&lt; DC*2U) |<br />(1UL &lt;&lt; SCK*2U) |//<br />(1UL &lt;&lt; MOSI*2U) |//<br />(2UL &lt;&lt; LED*2U)// dla LED 1UL:10MHz, 2UL:2MHz<br />;[/syntax]<br />Dla konfiguracji &quot;na sztywno&quot; (poniżej) wszystkie piny portu są skonfigurowane ok i wszystko działa poprawnie.<br />[syntax=c]ST_PORT-&gt;CRL = 0;// wyjscia push-pull<br />ST_PORT-&gt;CRL = 0x11111111;// wszystkie piny jako 10MHZ[/syntax]<br /> <br />Może miał ktoś podobny problem i sobie z nim poradził?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 13 cze 2022, o 18:43</p><hr />
]]></content>
</entry>
</feed>