Re: Re: Sikovný levný modulek se STM32F103

Petr Labaj labaj na volny.cz
Středa Listopad 12 18:48:30 CET 2014


Odpovím na příspěvky na pánů weka a VP najednou.

Tak třeba to GPIO.
Inicializace byla u nejstarší řady F1 hodně nešťastná, v jednom 32-bit registru
se iniciuje vždy jen 8 bitů daného GPIO, takže musely vzniknout registry
CRL a CRH pro dolních a horních 8 bitu.
Tedy naprosto nešťastná konfigurace pro inicializaci pomocí konstant (#define).
A to ani nikoho v STM nenapadlo aspoň do struktury, která popisuje offset
jednotlivých registrů, to dát jako pole. Aby se aspoň dalo použít indexování.

Navíc v stm32f10x_gpio.h jsou naprosto nelogicky nadefinové symboly pro
inicializaci režimů (např. GPIO_Mode_Out_PP atd.).
Není to tak, jak je zvykem, že je to prostě binární hodnota, která se jen posune
o příslušný počet bitů a zapíše se do registrů. To by bylo moc jednoduché.
Tady to "architekt" toho includu vymyslel tak, že tam kromě těch bitů, které
patří do registru zapsat, přidal ještě další bity navíc (pro potřebu svého
úžasně napsaného cyklu v knihovně). Takže pokud to použijete (jako se to
normálně dělá) např.:
GPIO->CRL |= ((GPIO_OUT_PP | GPIO_PL_SPEED_10MHz) << ((GPIO_BIT_POS%8)*4));
tak si těmi bity navíc přepíšete konfiguraci dalších linek GPIO!
Opravdu k pomilování.

Ano, odpověď se nabízí: použij knihovnu.
Tak ať se někdo podívá, jak je ta knihovna napsaná, a zamyslí se nad efektivitou
kódu. Nárust kódu i času zpracování je v desítkách tisíc procent.
U novějších řad se tohle naštěstí změnilo (ale efektivita knihoven ne).

No a k používání:
F1 - má registr BSRR a RBB (v tom prvním se atomicky nastavují nebo mažou bity,
        v tom druhém se jen mažou)
F4 - (který je vyšší model a přišel výrazně později) má jen BSRR, a to ještě v *.h
       tak nešťastně pojmenovaný, že je formálně rozdělen na dva 16-bit registry,
       aby to vyvolalo zdání, že se dá dělat SET i RESET
       A to jestě nazvali ty registry tak hezky - BSRRL a BSRRH
       Kvízová otázka: ve kterém registru se bude nastavovat bit do H?
       Odpověď: v BSRRL.
F0 - no a pak přišla laciná řada F0, tady se pro změnu zase objevily BSRR i RBB

PL

***************************************

From: "Jan Waclawek" <konfera na efton.sk>
To: "HW-news" <hw-list na list.hw.cz>
Sent: Wednesday, November 12, 2014 5:44 PM
Subject: Re: Re: Sikovný levný modulek se STM32F103

----- Original Message ----- 
From: V P 
To: HW-news 
Sent: Wednesday, November 12, 2014 6:07 PM
Subject: Re: Re: Sikovný levný modulek se STM32F103

Myslim, ze medzi F0 a F2+F4 nie je v GPIO rozdiel, mylim sa?

Na absolutne ofsety registrov sa mozete vykaslat - pouzivajte symboly
definovane v stm32NNxxx.h

wek



Další informace o konferenci Hw-list