Práca s LCD indikátorom na vývojovej doske STM32L-Discovery. Tréning na STM32 pre masy Blok frekvenčného deliča

Všeobecné informácie

Vývojová doska STM32L-Discovery má displej z tekutých kryštálov (LCD) so šiestimi 14 segmentovými znakmi, 4 dvojbodkami (dvojbodka), 4 bodkami (DP), 4 pruhmi (pruh). Všetky segmenty sú spojené do skupín COM0, COM1, COM2, COM3 po 24 segmentoch. Každá skupina má svoj vlastný samostatný „spoločný vodič“.


Na ladiacej doske je nainštalovaný mikrokontrolér STM32L152RBT6. Mikrokontrolér má zabudovaný LCD ovládač, ktorý ovláda monochromatické LCD indikátory.
LCD ovládač:

  1. Umožňuje nakonfigurovať frekvenciu aktualizácie (snímková frekvencia - frekvencia, s ktorou sa aktualizujú informácie na LCD)
  2. Podporuje statický a multiplexný režim ovládania
  3. Podporuje inštalácia softvéru kontrast
  4. Umožňuje viac úrovní riadiaceho napätia (až štyri)
  5. Používa dvojitú vyrovnávaciu pamäť, ktorá umožňuje aktualizáciu údajov v registroch LCD_RAM ​​kedykoľvek počas vykonávania programu bez narušenia integrity zobrazených informácií

pamäťové registre ovládača LCD

Mikrokontrolér STM32L152RB má špeciálne registre LCD_RAM, v ktorých uložené informácie zodpovedajú skupine segmentov COM0 - COM3. Každá skupina zodpovedá dvom 32-bitovým registrom. Tento počet registrov umožňuje mikrokontroléru ovládať LCD c veľké množstvo segmenty ako tie, ktoré sú nainštalované na vývojovej doske.

Na ovládanie LCD so 176 segmentmi sa používajú 4 skupiny COM0 - COM3 po 44 segmentov, na ovládanie LCD s 320 segmentmi 8 skupín COM0 - COM7 po 40 segmentov.



Vývojová doska STM32L-Discovery využíva LCD s 96 segmentmi, rozdelenými do 4 skupín COM0 - COM3 po 24 segmentoch.


LCD na vývojovej doske STM32L-Discovery je zapojené tak, že sa používajú bity S40, S41 druhých registrov LCD_RAM ​​v každej skupine a bity S0-S27 prvých registrov LCD_RAM. Aby sa znížil počet použitých registrov, informácie z bitov S40-S43 sa zapíšu do voľných bitov S28-S31 pomocou funkcie premapovania.

Blok frekvenčného deliča

Blok frekvenčného deliča (Frequency generator) umožňuje dosiahnuť na LCD rôzne snímkové frekvencie v rozsahu od 32 kHz do 1 MHz. Ako zdroj časovacieho signálu možno použiť:
  1. Externý nízkofrekvenčný generátor s frekvenciou 32 kHz (LSE. Low speed externý)
  2. Interný nízkofrekvenčný generátor s frekvenciou 37 kHz (LSI. Low speed interný)
  3. Externý RF generátor s frekvenčnými deličmi 2,4,8 a 16 a maximálnou frekvenciou 1 MHz. (HSE. Vysokorýchlostné externé)
Na dosiahnutie presného načasovania a zníženie posunu napätia priamy prúd Prostredníctvom segmentov LCD musí byť zdroj časovacieho signálu stabilný. Hodinový signál LCDCLK sa odosiela do ovládača LCD. Frekvencia hodinového signálu je rozdelená podľa deliacich faktorov, ktoré sú nastavené bitmi PS, DIV registra LCD_FCR (Frame Control Register). Výsledná frekvencia na výstupe bloku frekvenčného deliča sa vypočíta podľa vzorca:

F ck_div =F LCDCLK / (2 PS *(16+DIV))

Snímková frekvencia sa vypočíta podľa vzorca:

F Rám =f ck_div *povinnosť

Kde clo je pracovný cyklus - pomer trvania impulzu k jeho perióde. Počas jednej snímky sa na LCD postupne zobrazujú informácie z registrov LCD_RAM[x], LCD_RAM ​​atď. Pri LCD inštalovanom na vývojovej doske musí v jednej snímke LCD radič vydávať informácie zo 4 skupín segmentov COM0 - COM3, preto trvanie riadiaceho impulzu pre jednu skupinu bude 1/4 trvania snímky, t.j. clo = 1/4.

LCD ovládanie

Existujú dva spôsoby ovládania LCD - režim statického ovládania a režim ovládania multiplexu. Pri statickej indikácii je každý segment bitu indikátora pripojený k výstupu mikrokontroléra. Pokiaľ ide o LCD, na ladiacej doske STM32LDiscovery je potrebných 6 * 14 = 84 kolíkov mikrokontroléra (okrem dvojbodiek, bodiek a pásikov). Vďaka použitiu takého počtu pinov bude pripojenie ďalších periférií nemožné. Mikrokontrolér STM32L152RB má 64 pinov. V režime multiplexného riadenia (dynamický režim riadenia) sa identické segmenty číslic indikátora spájajú do skupín. Informácie sa zobrazujú striedavým osvetlením segmentov číslic indikátora s frekvenciou, ktorú ľudské oko nepostrehne.

Multiplexné ovládanie umožňuje ovládať veľké množstvo segmentov. Namiesto samostatného ovládania každého prvku môžu byť adresované riadkami a stĺpcami (COM a SEG), čím sa zjednoduší riadiaci obvod, pretože každý segment nevyžaduje vlastnú riadiacu líniu. Ak chcete zapnúť vybraný segment, musí sa naň aplikovať potenciálny rozdiel COM a SEG. Príklad fungovania prvej číslice indikátora (ukazovateľ zobrazuje „1:“):


Prvá číslica indikátora v čase t 0


Prvá číslica indikátora v čase t 1


Prvá číslica indikátora v čase t 2


Všeobecná schéma pripojenia segmentov k pinom LCD


Schéma zapojenia pinov LCD k portom mikrokontroléra

Pre vedenia SEG sa používa riadiace napätie, ktorého počet úrovní je určený koeficientom predpätia. LCD na vývojovej doske používa režim multiplexného riadenia s clonou=1/4 a predpätím=1/3. Hodnoty cla a bias sa nastavujú cez register LCD_CR (Control Register) v bitoch DUTY a BIAS.

Prax

Konfigurácia portov mikrokontroléra

Ak chcete ovládať LCD, porty mikrokontroléra musia byť nakonfigurované podľa toho:
  1. K východu
  2. Používanie funkcie AF 11 Alternate
  3. Majú výstupné frekvencie do portu 400 kHz
  4. Použite prevádzkový režim push-pull
  5. Žiadne pull-up odpory
Keď port pracuje v režime alternatívnej funkcie, vyrovnávacia pamäť výstupných údajov portu je riadená signálmi prichádzajúcimi z periférneho zariadenia. Hlavičkový súbor stm32lxx.h knižnice CMSIS obsahuje popis všetkých periférnych registrov, ako aj štruktúru pre prístup k nim.

Piny LCD sú pripojené k portom GPIOA (PA1-PA3,PA8-PA10,PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3,PC6-PC11) mikrokontroléra. Aby LCD displej fungoval, musí byť do vybraných portov privedený hodinový signál. GPIO porty mikrokontroléra sú taktované zo zbernice AHB systému RCC (Reset and Clock Control) - systém hodín a resetov. Hodinový signál je dodávaný nastavením zodpovedajúcich bitov v registri RCC_AHBENR (AHB periférne hodiny umožňujúce register).

Zaregistrujte RCC_AHBENR (obrázok ukazuje prvých 15 bitov)

Pre porty GPIOA, GPIOB, GPIOC je potrebné nastaviť 1 až 0, 1, 2 bity registra.

Ďalej uvediem kód pre zápis informácie do registra pomocou bitovej masky a pomocou hexadecimálnych kódov. Používanie bitových masiek je pohodlnejšie, ale práca s hexadecimálnymi kódmi umožňuje pochopiť podstatu práce s registrami.

RCC->AHBENR |=(RCC_AHBENR_GPIOAEN|RCC_AHBENR_GPIOBEN|RCC_AHBENR_GPIOCEN); alebo RCC->AHBENR = 0x7; /* 0x7=111 */

Na označenie prevádzkových režimov portu sa používa register GPIOx_MODER (register režimu portu GPIO) (x = A..H). Všetky bity registra sú zoskupené do skupín MODERY, kde y je číslo pinu zodpovedajúceho portu. Porty musia byť nakonfigurované pre režim alternatívnej funkcie, t.j. v skupine zodpovednej za pin nastavte hodnotu na 10. Pre port GPIOA musíte nakonfigurovať piny 1-3,8-10,15, teda nastaviť 1 na 3,5,7,17,19, 21,31 číslic.


Zaregistrujte GPIOx_MODER (register režimu portu GPIO)

GPIOA->MODER |= (GPIO_MODER_MODER1_1 | GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1 | GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1 | GPIO_5MODER_MODER); alebo GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
Porty mikrokontroléra musia byť prepnuté do režimu push-pull. Aby ste to dosiahli, musíte nastaviť 1 v registri GPIOx_OTYPER (register typu výstupu GPIO portu) v bitoch zodpovedných za kolíky.


Zaregistrujte GPIOx_OTYPER (register typu výstupu portu GPIO)

GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_1 | GPIO_OTYPER_OT_2 | GPIO_OTYPER_OT_3 | GPIO_OTYPER_OT_8 | GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT_15); alebo GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
Obe možnosti ovplyvňujú vybrané kolíky. (Pre port GPIOA sú nakonfigurované kolíky 1-3,8-10,15). Ak potrebujete prepnúť všetky piny portu do režimu push-pull, môžete do registra zapísať nasledujúcu hodnotu:
GPIOA->OTYPER = 0x0;
Na určenie frekvencie výstupu informácií na port sa používa register GPIOx_OSPEEDR (register výstupnej rýchlosti portu GPIO). Všetky bity registra sú zoskupené do skupín OSPEEDRy, kde y je číslo pinu príslušného portu. V tejto práci by mala byť frekvencia nastavená na 400 kHz t.j. v skupine zodpovednej za pin nastavte hodnotu na 00.


Registrovať GPIOx_OSPEEDR (register výstupnej rýchlosti portu GPIO)

GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPRIOSPEOSPEEDR_1 GPRIOPEOSPEEDR_GPRIOPEOSPEEDR_GPRIOPEOSPEEDR alebo GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Ak potrebujete nastaviť výstupnú frekvenciu portu na 400 kHz pre všetky piny, môžete zapísať hodnotu do registra:
GPIOA->OSPEEDR = 0x0;
Pre vypnutie pull-up a pull-down rezistorov pre vybrané piny použite register GPIOx_PUPDR (pullup/pull-down register GPIO portu). Všetky bity registra sú zoskupené do skupín PUPDRy, kde y je číslo pinu príslušného portu. Ak chcete deaktivovať pull-up odpory v skupine zodpovednej za kolík, nastavte hodnotu na 00.


Zaregistrujte GPIOx_PUPDR (výsuvný/rozťahovací register GPIO portu)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPOPIO_PUPDR3); alebo GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Ak potrebujete vypnúť pull-up rezistory pre všetky piny, môžete zapísať hodnotu do registra:
GPIOA->PUPDR = 0x0;
Ak chcete použiť alternatívnu funkciu pre porty mikrokontroléra, dva registre GPIOx_AFRL (nižší register alternatívnej funkcie GPIO), zodpovedné za nízke kolíky (0 až 7) a GPIOx_AFRH (horný register alternatívnej funkcie GPIO), zodpovedné za vysoké kolíky (8 až 15). ), sa používajú. Všetky bity registra sú zoskupené do skupín AFRLy a AFRHy, kde y je číslo pinu príslušného portu. Porty musia byť nakonfigurované tak, aby používali alternatívnu funkciu AF11, na to musí byť skupina zodpovedná za pin nastavená na 1011.


Register GPIOx_AFRL (dolný register alternatívnej funkcie GPIO)


Register GPIOx_AFRH (horný register alternatívnej funkcie GPIO)

Aby ste to dosiahli, musíte do registrov zapísať nasledujúce hodnoty:
GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB; /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

AFR = 0xBBB0 – zapíše hodnotu do registra GPIOx_AFRL.
AFR = 0xB0000BBB – zapíše hodnotu do registra GPIOx_AFRH.

Nastavenia zodpovedajúcich pinov portov GPIOB a GPIOC sa vykonávajú rovnakým spôsobom.

Nastavenie ovládača LCD

Pri práci s LCD ovládačom, podobne ako pri iných perifériách, musí byť doň privádzaný hodinový signál. Hodinový signál je dodávaný aj do systému správy napájania. Regulátor a systém správy napájania využívajú na taktovanie zbernicu APB1. Ak chcete povoliť taktovanie v registri RCC_APB1ENR (registre povolenia periférnych hodín APB1), musíte nastaviť 1 v bitoch 9 a 28.


Registrovať RCC_APB1ENR (register aktivácie periférnych hodín APB1)

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; alebo RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
Aby LCD ovládač fungoval, je potrebné špecifikovať zdroj hodinových signálov. Zdroj je špecifikovaný v registri RCC_CSR. Štandardne je zápis do tohto registra zakázaný. Ochrana proti zápisu v registri RCC_CSR je odstránená v registri riadenia výkonu PWR_CR. Register RCC_CSR riadi zdroje hodín regulátora RTC a LCD
Zápis do registra RCC_CSR je povolený nastavením bitu 8 registra PWR_CR na 1.


Register PWR_CR (register riadenia výkonu PWR)

PWR->CR |= PWR_CR_DBP; alebo PWR->CR |= 0x100; /* 0x100 = 1 000 0000 */
Ak chcete zmeniť zdroj hodín ovládača LCD (a tiež hodín RTC), musíte najskôr resetovať zdroj hodín nastavením bitu RTCRST (nastavenie 1 až bit 23) v registri RCC_CSR (riadiaci/stavový register).


Registrovať RCC_CSR (kontrolný/stavový register)

RCC->CSR |= RCC_CSR_RTCRST;
Alebo zapísaním hodnoty do registra pomocou operátora „|=“, pretože hodnota podľa
predvolený register sa líši od 0x0:
RCC->CSR |= 0x800000; /* 0x800000 = 1 000 0000 0000 0000 0000 0000 */
Ak chcete vybrať nový zdroj hodín, musíte odstrániť bit RTCRST:
RCC->CSR &= ~RCC_CSR_RTCRST; alebo RCC->CSR &= ~0x800000;
Ako zdroj hodinového signálu je zvolený externý nízkofrekvenčný generátor. Na zapnutie generátora v registri RCC_CSR je potrebné nastaviť bit LSEON (nastaviť 1 až 8 bit):
RCC->CSR |= RCC_CSR_LSEON; alebo RCC->CSR |= 0x100; /* 0x100 = 1 000 0000 */
Po zapnutí generátora trvá určitý čas, kým sa stabilizuje. Pripravenosť generátora sa kontroluje hardvérovým nastavením bitu LSERDY v registri RCC_CSR:
while(!(RCC->CSR&RCC_CSR_LSERDY));
Výber externého nízkofrekvenčného generátora ako zdroja hodín sa vykonáva nastavením registra RCC_CSR na 01 v skupine RTCSEL:
RCC->CSR |= RCC_CSR_RTCSEL_LSE; alebo RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
V ovládači LCD je potrebné nainštalovať požadovaný režim zaujatosť. Na to je potrebné v registri LCD_CR (riadiaci register LCD) nastaviť hodnotu 10 v skupine BIAS. Pred inštaláciou bitov je potrebné vyčistiť kusy od „odpadkov“.


Register LCD_CR (riadiaci register LCD)

Obnoviť bity:
LCD->CR &= ~LCD_CR_BIAS; alebo LCD->CR &= ~0x60;
Výber režimu skreslenia = 1/3 pomocou bitovej masky:
LCD->CR |= LCD_CR_BIAS_1; alebo LCD->CR |= 0x40;
Nastavte režim prevádzky = 1/4. Aby sme to dosiahli, najprv resetujeme všetky bity:
LCD->CR &=~LCD_CR_DUTY; alebo LCD->CR &= ~0x1C;
Nastavte hodnotu 011 do skupiny DUTY registra LCD_CR pre
režimová prevádzka = 1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; alebo LCD->CR |= 0xС;
Aktivujeme funkciu opätovného priradenia pinov. Za týmto účelom nastavte 1 až 7 bitov registra LCD_CR:
LCD->CR |= LCD_CR_MUX_SEG; alebo LCD->CR |= 0x80;
Nastavíme hodnoty frekvenčných deliacich koeficientov hodinového signálu LCDCLK. Hodnoty koeficientov sa nastavujú v registri LCD_FCR (riadiaci register rámca LCD). Najprv tiež vymažeme všetky bity a potom nastavíme potrebné.


Register LCD_FCR (register riadenia rámca LCD)

LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; alebo LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
Hodnoty koeficientov delenia frekvencie hodinového signálu sú nastavené na ck_ps = LCDCLK/16, ck_div = ck_ps/17. Ak to chcete urobiť, nastavte 1 až 24 a 18 číslic:
LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
Ak chcete nastaviť požadovanú úroveň kontrastu, musíte v skupine CC nastaviť hodnotu 010 a tiež najprv vymazať bity zo starých hodnôt:
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; alebo LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
Po nastavení všetkých hodnôt nejaký čas trvá synchronizácia registra LCD_FCR. Synchronizácia registrov sa kontroluje nastavením bitu FCRSF v hardvéri v registri LCD_SR (stavový register LCD).

Registrovať LCD_SR (stavový register LCD)

Kým(!(LCD->SR&LCD_SR_FCRSR));
Ako zdroj napätia pre LCD volíme interný step-up menič na vytvorenie V lcd. Na tento účel je prvý bit registra LCD_CR (riadiaci register LCD) nastavený na 0:
LCD->CR &= ~LCD_CR_VSEL; alebo LCD->CR &= ~0x2;
Činnosť ovládača LCD je povolená nastavením bitu registra LCD_CR (riadiaci register LCD) na 0:
LCD->CR |= LCD_CR_LCDEN; alebo LCD->CR |= 0x1;
Po inštalácii interného zvyšovacieho meniča ako zdroja napätia musíte počkať, kým bude pripravený. Pripravenosť sa kontroluje hardvérovým nastavením bitu RDY v registri LCD_SR (stavový register LCD):
while(!(LCD->SR&LCD_SR_RDY));
Po povolení prevádzky ovládača LCD musíte počkať, kým nebude pripravený. Pripravenosť sa kontroluje hardvérovým nastavením bitu ENS v registri LCD_SR (stavový register LCD):
while(!(LCD->SR&LCD_SR_ENS));

Vytvorenie obrazu na LCD

Všetky segmenty indikátorov sú spojené do skupín COM0 - COM3 s 24 segmentmi (SEG0-SEG23). Informácie o segmentoch sú uložené v registroch LCD_RAM ​​v pamäti ovládača LCD. Elektrické vedenie vytlačená obvodová doska je taká, že čísla segmentov nezodpovedajú bitovým číslam registrov LCD_RAM.

Ak chcete zobraziť 1 na prvej číslici LCD, musíte rozsvietiť segmenty 1B, 1C. Segment 1B patrí do skupiny COM0, segment 1C patrí do skupiny COM1. Informácie o nich sa preto musia zapisovať do registrov RAM (LCD_RAM0), RAM (LCD_RAM2), resp. Segment 1B je zodpovedný za LCD výstup LCDSEG22, o ktorom je informácia uložená v SEG40 bite registra RAM (LCD_RAM1). Pomocou funkcie premapovania bude segment LCDSEG22 priradený bitu SEG28 registra RAM (LCD_RAM0). Segment 1C je zodpovedný za výstup LCD LCDSEG1, o ktorom sú informácie uložené v bite SEG1 registra RAM (LCD_RAM2).

LCD->RAM= 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
Pred zápisom hodnôt do pamäťových registrov je potrebné skontrolovať, či bol ukončený predchádzajúci prenos dát na LCD. Za týmto účelom sa kontroluje bit UDR (Update display request) registra LCD_SR (LCD status register). LCD ovládač má dve výstupné vyrovnávacie pamäte, informácie sa zadávajú do prvej vyrovnávacej pamäte a na LCD sa odosielajú z druhej vyrovnávacej pamäte. Bit UDR sa nastavuje počas prenosu z prvej vyrovnávacej pamäte do druhej, čím sa registre LCD_RAM ​​​​chránia pred zápisom:
while(LCD->SR & LCD_SR_UDR);
Po zapísaní informácií do registrov LCD_RAM ​​​​je potrebné nastaviť bit UDR v registri LCD_SR (stavový register LCD) (nastaviť 1 až 2 bity):
LCD->SR |= LCD_SR_UDR; alebo LCD->SR |= 0x4; /*0x4 = 100 */

Na mučenie a štúdium tohto zariadenia. Len čo sa povie, tak urobí. Šatka sa pozbierala a išlo sa. Ó áno! Téma nášho rozhovoru sa zvrtla na porovnanie oboch MK. Ten vyššie je proti ATmega328. Prečo práve oni? Oba MK sú v balení TQFP-32. (Pravdaže, ATmega328 sa dodáva aj v DIP balíku)
Teraz sa pozrime bližšie na ich vnútro. Pre lepšie pochopenie som všetky potrebné údaje zozbieral do jednej tabuľky.

možnosti ATmega328 STM32F030K6T6
Bitová hĺbka 8 bit 32 bitov
BLESK 32 kb 32 kb
SRAM 1 kb 4 kb
EEPROM 512b -
Časovač 8 bit 2 ks -
Časovač 16 bit 1 PC 16 ks
PWM 3 kanály 6 kanálov
USART 1 PC 1 PC
SPI 1 PC 1 PC
I2C 1 kus (TWI) 1 PC
ADC 8 kanálov 10 bit 16 kanálov 12 bit
Výživa 2,7 - 5,5 2,4 - 3,6
Rýchlosť 0 - 16 MHz 48MHz s externým 4 - 32MHz
cena 160 - 170 rubľov. 80 - 140 rubľov.
Ako môžete vidieť z tabuľky, STM32 je oveľa zaujímavejší a bohatší ako AVR. Je tu naozaj jedna maličkosť. STM32 nemá EEPROM, ale má DMA, ktoré jednoducho úplne zabije AVR. Pravda, AVR sa môže pochváliť Arduinom a jednoduchým programovaním. Nehádam sa, ale STM32 má STM32Cube, ktorý generuje kód pre IAR a stará sa o celú rutinu nastavenia periférií. A posledným klincom do rakvy AVR je RTOS. Áno, môžete ho nainštalovať aj na AVR, ale musíte na to prísť, ale v STM32 zaškrtneme políčko „FREERTOS“ a je to. Systém sám urobí všetko, čo je potrebné, a nám zostáva len vytvárať vlákna a písať do nich kód. No, toto je len pre začiatok. V skutočnosti je tam všetko trochu komplikovanejšie. STM32 sa mi skrátka páči a aby som si vás konečne získal pre túto platformu, hodím Arduino do zásuvky vášho stola, vytvorím dosku od začiatku do konca a ukážem vám, ako sa s ňou pracuje. Oh, zabudol som. Všetky STM32 majú SWD debugger. Sú to tri vodiče SWDIO, SWCLK, GND a cez riadky kódu môžete preskakovať priamo v hardvéri a nie ako ATmega328 virtuálne v Proteuse. K tomu potrebujete iba univerzálny programátor ST-LINK. Dá sa použiť, ak si zakúpite dosku Discovery alebo samostatný programátor. A teraz od slov k činom.
Schéma. Väčší
Túto dosku som vyrobil ako modul pre moju ladiacu dosku pre AVR. Ale môžete to zopakovať distribúciou dosky podľa vlastného uváženia (na konci článku uverejním projekt pre DipTrace). Čo je na diagrame. A schéma ukazuje jednoduchý zväzok ako pre AVR. 8 MHz quartz s dvoma 20p kondenzátormi. Rovnako ako v AVR je zostavený napájací obvod pre podporu ADC. Resetujte okruh ako AVR. Jediným rozdielom je obvod BOOT. Na rozdiel od AVR majú všetky STM32 zabudovaný hardvérový bootloader. Štandardne je pripojený k USART. To znamená, že ak stlačíte kolík BOOT0 k zdroju napájania a reštartujete MK, potom pomocou programu Flash Loader Demonstrator môžete flashovať MK bez programátora. Táto funkcia užitočné, ak už máte pripravené a funkčné zariadenie a potrebujete aktualizovať firmvér, potom potrebujete iba adaptér USB USART. Mnoho ľudí sa nechce baviť s STM32, pretože napájanie nie je väčšie ako 3,6 voltov. Nezmysel. Ak sa pozriete na tabuľku pinov, všimnete si, že všetky nohy môžu prijať 5 voltov bez následkov. Poďme ďalej.

A takto to vyzerá nainštalované na doske.

Teraz pripojíme programátor ST-LINK-GA ku konektoru SWD.

Teraz, keď je všetko pripravené, stiahnite si najnovšiu verziu z webovej stránky ST (odkaz úplne dole na stránke). Nainštalujte a spustite.

Kliknite na položku Nový projekt. A v zobrazenom okne nájdeme náš ovládač. Kliknite na tlačidlo OK.

Po malom zamyslení. Program zobrazí takéto okno.

Nebudem popisovať čo a prečo, keďže toto je téma na samostatný článok. Teraz napríklad urobte to, čo vám ukážem. Čo urobíme. Spustíme operačný systém a v jedinom vlákne budeme blikať LED. Akési „Heloy Word“ z dela.))) Ak to chcete urobiť, v ľavom okne kliknite na znamienko plus vedľa nápisu „FREERTOS“ a začiarknite políčko v rozbaľovacom zozname.

Navyše, akonáhle je vybraný externý kremeň, na pravej strane ovládača sa zeleno zvýraznia nohy, na ktoré ho musíte zavesiť. Ďalšia vec, ktorú musíte urobiť, je vybrať nohu, na ktorej bude LED visieť. Vybral som port B a kolík 0. A našiel som hrable. Zo strachu, neviem prečo, som otočil výstupný hrebeň prvých štyroch kolíkov hore nohami. Preto ten zmätok na porte B. Tento problém sa týka iba mojej dosky. Ale nič, MK to nezastavilo v práci. A tak nakonfigurujte pin. Faktom je, že s STM môžu všetky kolíky nadobudnúť veľa hodnôt, ale ak sa dotknete diskrétneho vstupu/výstupu, potom môžu existovať tri možnosti pre výstup. Výstup do vzduchu, výstup s ťahom na zdroj plus, výstup s ťahom na spoločnú zbernicu. Štandardne visí STM32CubeMX nohu vo vzduchu. No nech sa páči, musíme len skontrolovať prácu a demonštrovať silu STM32. Ak chcete nakonfigurovať nohu, musíte na ňu kliknúť ľavým tlačidlom myši a v zobrazenom okne vybrať GPIO_Output. Ak je MK príliš malý, môžete otočiť kolieskom a zväčšiť ho.)))

Ďalším krokom je úprava taktovania MK. Faktom je, že STM32 je v tejto veci veľmi nejasný. Na rozdiel od AVR má STM32 na vstupe quartz s frekvenciou 4 až 32 MHz a na zberniciach sa dá pretaktovať na 48 MHz. Vo vnútri MK je veľmi zložitý systém taktovania, no na pomoc nám opäť prichádza STM32CubeMX. Prejdite na kartu Konfigurácia hodín a nakonfigurujte ju ako na obrázku nižšie.

To je všetko. Kliknite na ikonu ozubeného kolieska v hornej časti.

Zobrazí sa okno ako toto.

A tu som zabudol povedať. Stiahnite si a nainštalujte IAR pre seba. Dá sa stiahnuť od úradníkov, ale zníži sa množstvo kódu alebo sa dá nájsť v torrentoch. Alebo ak máte veľa peňazí navyše, môžete si kúpiť licenciu. Myslím si, že mnohí budú nasledovať cestu s CodeVisionAVR. Vo všeobecnosti to nechávam na vašom uvážení. Mám verziu 7.40. Vráťme sa ku Kocke. V okne pomenujte projekt, ale iba v latinčine, IAR nemá rád ruské písmená v cestách. A špecifikujte, kde bude projekt uložený. V okne IDE musíte vybrať (a je to štandardne) EWARM. Kliknite na tlačidlo OK. Program premýšľa a potom zobrazí okno, ako je toto. Bla bla bla. Vo všeobecnosti kliknite na otvorenie projektu (pre tých, ktorí sú v nádrži, stredné tlačidlo).

Okno zmizne a namiesto toho sa spustí IAR a náš projekt. Vľavo prejdite na Aplikáciu->Používateľ a spustite main.c. Túto kopu kódu nám vygeneroval STM32CubeMX.

A čo teraz robiť s touto hrôzou? Ale na to potrebujeme celú sériu článkov))) A teraz len nájdeme tento kúsok kódu.

Toto je náš jediný tok. V tele pre slučku(;;) vymažeme jedinú funkciu osDelay(1); a namiesto toho napíšeme tento kód. HAL_GPIO_WritePin(GPIO_PIN_0,GPIO_PIN_SET);
osDelay(500);
HAL_GPIO_WritePin(GPIO_PIN_0,GPIO_PIN_RESET);
osDelay(500);

úžasné. Teraz stačí kliknúť na tlačidlo so zelenou šípkou vpravo hore a počkať na kompiláciu a stiahnutie.

Ak je všetko správne a bez chýb, program zostaví celý projekt, vytvorí všetko potrebné a nahrá firmvér do MK. Potom prejde do režimu ladenia. Tu je. Sen muža AVR. Ak máte neodolateľnú túžbu ho používať, potom stačí prejsť krok za krokom na hardvér, riadok po riadku. A ak chcete vidieť, ako program funguje, stlačte krížik vľavo hore a vychutnajte si blikanie LED diódy.

To je všetko. Mikrokontroléry je možné kúpiť za najnižšiu cenu, až 78 rubľov za kus v obchode ChipResistor. No ak to chcete lacnejšie, je tu aj malý veľkoobchod. Od 35 kusov už za 50 rubľov.
Projekt pre DipTrace.
A samozrejme video.


hosť 31.12.15 10:35

Nedávno som chcel vyrobiť merač frekvencie na ATMEGA16 plus externý 8-bitový čítač na 74 logike, ale nebolo to dosť rýchle.Nezvládam písanie v assembleri, ohradiť externý čítač so 16-bitmi je trápenie. zadok.AVR je minule storocie,nie lacny radic.podporim autora,AVR je Etapa presla, kupil som si aj cip stm32f100 plus CP2103 USB adapter chip, onedlho sa vsetci vzdaju AVR.

Alexey 31.12.2015 12:26

Nesúhlasím. Napriek tomu sa Arduino stále vyvíja a mnohí sú na ňom závislí a to druhé zase funguje na AVR. Prejsť na STM je ako prejsť na ďalšiu úroveň. Takpovediac zo škôlky do školy.

ANONYM 12.02.16 10:44

AVR a STM32 sú procesory, ktoré si navzájom nekonkurujú. Váš tanier neobsahuje najdôležitejší parameter - to je prúdový odber!! A pri pohľade na ne vám môže vyroniť slza. Atmega 328 - – Aktívny režim: 0,2 mA – Režim vypnutia: 0,1 µA – Režim úspory energie: 0,75 µA (vrátane 32 kHz RTC) STM32F030K6T6 48 MHz - Aktívny režim: periférne zariadenia zapnuté 23,1 mA Zastavenie periférií: mA 1 0,048 mA STM32 nemilosrdne spotrebuje elektrickú energiu - zhruba 100-krát viac ako AVR. Zariadenie STM32 nemôžete napájať z batérie. Ale AVR budú fungovať mesiace. Takže je ťažké vzdať sa AVR. Veľa šťastia všetkým.

Alexey 12. 2. 2016 10:54

A nikto nenavrhuje, aby sme opustili AVR. Len ukazujem rozdiel na periférii. Stále udržiavam knižnicu AVR a stále mám ATMega8A ako môj hlavný MCU.

Sergey 24.02.2016 18:02

Podľa môjho názoru je nejako zvláštne porovnávať čerstvý STM32 s vyradeným AVR. Ak chcete porovnať STM32 s regulátormi ATMEL, tak ich porovnajte s rodinou ATSAM, ale nie s AVR.

Andrej 24.02.16 18:06

Kto je tento dôchodca? AVR žije a bude žiť ktovie ako dlho. A pri pohľade na tabuľku je podľa mňa porovnanie skôr na periférii, a nie na architektúre.

Alexey 24.02.16 19:04

No začína to. Poďme teraz diskutovať o AMD a Intel.

Sergey 24.02.2016 22:02

Na hube jeden “expert” napísal, že AVR nemá paralelnú zbernicu na pripojenie štandardného LCD, ale STM32 áno...

Alexey 24.02.16 22:36

Čo znamená štandardný LCD? Ide o FSMC? Neplatí to teda len pre displej, ale aj pre pamäť. Len paralelný autobus. Má to aj AVR, napríklad Mega8515. SRAM sa k nemu dá pripojiť cez latch register.

Sergets 25.02.2016 06:24

Alexey, o čom to hovorím?! Zdá sa, že sa ani nesnažíte pochopiť význam mojich správ.

Alexey 25.02.2016 09:38

Aký má zmysel porovnávať dva rovnaké mikrokontroléry od rôznych spoločností? Oba sú na jadre ARM. Ak ste naozaj vyberaví, potom naozaj musíte porovnať AVR s STM8. Potom som sa držal blízkosti periférie, tvarového faktora a ceny. A proste iná architektúra.

Adlan 03.06.16 17:40

Ahoj. Pomôžte, prosím, kto môže. Nainštalované Najnovšia verzia Kuba 4.15, knižnice F1 1.4.0. Vytvorený prázdny projekt v EWARM sa neskompiluje - je tam viac ako sto chýb. čo by to mohlo byť? Ďakujem [e-mail chránený]

Alexey 6. 3. 2016 20:48

Adlan, prvá vec, ktorú musíte urobiť, je nahrať projekt, ktorý sa neskompiluje.

Doc 18. 7. 2016 21:51

"Je pravda, že AVR sa môže pochváliť Arduinom a jednoduchým programovaním." ČÍM sa môže chváliť? ;D

Alexey 19.7.2016 11:41

Toto je hlúpe prirovnanie. Po prvé, STM má analóg Arduina nazývaný nucleo. Programy sa píšu v online IDE priamo cez prehliadač. Ale ak výhody kameňa osobne, potom. Pracovná frekvencia jadra je 72 MHz, o takejto rýchlosti by AVR nemohlo ani snívať. Samozrejme, ak blikneš LEDkou, tak rozdiel nie je, ale ak spustíš os a kopu periférií, AVR odfúkne. Bitová kapacita, 32 je ďaleko od 8. Periférie na STM môžu obsahovať 3 I2C, 3 SPI, 6 UART, USB, CAN, Ethernet. Takmer všetko má schopnosť premapovať, teda preniesť na iné nohy mk. Nechýba ani DMA, jedná sa o nezávislý koprocesor pre prácu s perifériami. Takže prerušenia AVR nervózne fajčia na vedľajšej koľaji. K dispozícii je hardvérové ​​​​SDIO plnohodnotnú prácu s CD kartami, a nie barličkou ISP v AVR. Vo všeobecnosti je toho tam oveľa viac, no najväčším kameňom v záhrade AVR je odolnosť proti hluku. Knokautovať AVR s káblom, ktorý vedie neďaleko od elektromotora, nie je problém, ale STM treba vyskúšať. Takže by som neodporúčal byť sarkastický s Arduinom.

hosť 8/11/16 23:27

MICROCHIP absorboval AVR!)))))))))))

Alexey 8/12/16 08:35

Meškali sme so správami, ako pred piatimi rokmi.

Vladimír 17.08.2016 22:56

Alexej! V januári 2016 kúpil Microchip Atmel za 3,56 miliardy dolárov. Akých 5 rokov?

Alexey 18.08.2016 10:30

Je to de iure, ale de facto to trvá už od roku 2008. Takže som sa naozaj pomýlil, nie pred 5 rokmi, ale pred 8 rokmi.))))

Vladimír 18.08.16 23:53

Alexey! Začal som prechádzať na stm32! A čo sa týka spotreby v autonómnom režime, radí nehodinovať všetko, potom sa odberový prúd zníži.

Oleg 09.11.16 22:31

V datashete na STM som nenašiel grafy spotreby CLK systémových hodín ako v AVR - a podľa tých tabuliek, ktoré tam sú, STM32 vyložene stráca aj v normálnom režime aj v Idle režime. Ano a tento STM32 nema takt 72 MHz - iba 48 max, to je vsetko, takze aj s 32 bitovym 8 beatnikom AVR - vychadza lepsie a mimochodom vyrobca v datasheete nenapisal kolko taktovacie cykly v strojovom cykle STM32, ktorý má, takže ak sa ukáže, že sú to 2 hodinový cyklus oproti 1 pre AVR - potom uvažujte, že 48/2 = 24 skutočných MHz - takmer to isté ako 20 MHz pre AVR. Otázka teda znie – kde je ten zázrak tohto STM32, o ktorom všetci hovoríte?

ANONYM 09.11.16 23:03
Alexey 10.11.2016 00:23

Ani sa nechcem hádať. Čo je lepšie Intel alebo AMD? Alebo Zhiguli alebo Volga? STM má hardvérové ​​USB, CAN, Ethernet, SDIO a kopu ďalších periférií, o ktorých môže AVR len snívať. Nakoniec je tu DMA ako nezávislý koprocesor s priamym prístupom do pamäte, pred ktorým všetky prerušenia AVR nervózne dymia na vedľajšej koľaji. Napríklad prvá séria má na palube 3 UART, 2 SPI, 3 I2C. Existuje premapovanie portov a nemusíte sa starať o to, ako rozobrať dosku. Ak máte radi prácu s AVR, potom pracujte, kto vás obťažuje. Dodnes robím mega osminky na malé projekty a nesťažujem sa. Ach áno, prilepte AVR vedľa štartéra a sledujte, ako mu odstrelí hlavu rušením. AVR nemá ochranu proti EMI. Preto boli PIK vždy inštalované v autoalarmoch, pretože AVR v takýchto podmienkach zomiera. Načo sa hádať, je to mŕtve číslo.

Cornet 27.11.16 21:22

No, mimochodom, na STM32 už je Arduino. Toto je Amperka a všelijaké Espruino v JS) Navyše, ak Microchip bral Atmel, tak ich šuhaj

Alexey 27.11.16 21:44

Názov Espruino paroduje Arduino, najslávnejšiu hobby platformu tej doby, ale Espruino nie je kompatibilné s klasickým Arduino Uno ani mechanicky, ani programovo.(citát Amperka)
Ja mám tiež Nucleo dosku a tiež to nemá nič spoločné s Arduinom, okrem samotnej geometrie dosky)))
Vo všeobecnosti v podstate používam MK, ktorý je vhodný pre aktuálnu úlohu.

Andrej 20.12.16 22:50

Kto rád prepláca: stojí za to attiny2313-20 - 2Kb-flash /128bit-ram/16bit_ timer -1/8bit_ timer -1 =2.1$ vs stm32f103c8t6 64Kb-flash/20Kb-sram+ 16BIT timer pre duálny časovač -channel PWM mode ) -4/ADC-2/72MHz CPU/=2,3$.Podla mna je takmer nemozne urobit merač impedancie pre RLC obvod pomocou AVR,alebo je tam 10 kameňov.Ale dá sa to to s STM a FFT (pomáha DMA).Skúšal som to nejako urobiť frekvenčný merač na Mega10 (presnosť 1 hertz) - jednoducho to nebolo dosť rýchle (alebo nainštalovať externé 32-bitové počítadlo s posuvným registrom - kde sú rozmery Pred rokom som sa vzdal AVR, ukázalo sa, že AVR je pre bohatých ľudí.

Andrej 20. 12. 2016 22:53

ANONYMOUS napísal – „A tu je ďalší citát z popisu STM32 v ruštine – „...S
moment
prijímanie
preruší
predtým
začala
exekúcie
najprv
tímov
psovod
preruší
sa míňa
iba
dvanásť
cyklov
hodiny
signál"

To je pravda, ale vynásobte dve 32-bitové čísla avr - jasne 8-10 hodinových cyklov!

Alexey 20.12.2016 23:31

Áno, už ľutujem, že tento halivar začal.))))

Alexander 21.12.2016 00:27

Prečítal som si komentáre a spomenul som si.
Dve deti na pieskovisku
Jeden duduka!
Po druhé, pípnutie!
Po prvé, Duduka! (intonácia hrozivejšia)
Po druhé, BIBIKA! (S ešte výraznejšou intonáciou)
Prvá DUDUKA! (Už kričí)
Druhá BIBIKA!!! (Takmer plač)
....
Táto bitka sa skončila, obaja stoja a plačú, jeden hlasnejšie ako druhý.)))

Val 10.02.2017 01:43

Aká to bude frekvencia, ak zacyklíte bez oneskorenia?
zatiaľ čo (1)
{
HAL_GPIO_WritePin(GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIO_PIN_0,GPIO_PIN_RESET);
}

Alexey 10.02.17 10:07

Ten v autobuse APB

Igor 6.8.2017 22:33

Okamžite teda integrujme notebooky do embedded systémov, sú stokrát lepšie ako STM a tých periférií je tam sakra veľa, už je tam Wi-Fi a bluetooth a ani programátorov netreba, hneď je monitor s klávesnicu na napísanie programu a okamžité spustenie a nie sú potrební programátori a debuggeri.
Je to ako kúpiť si bager na osobné použitie na chate, aby ste OBČAS vykopali niekoľko polmetrových dier.
Dať STM do termostatu, hodín, váh, no, podľa mňa to nie je normálne. Mimochodom áno, čo tak energeticky nezávislá pamäť, tak robím termostat, nastavujem teplotu, potom svetlá zhasnú, no a čo, nastavenia sú stratené. Ale vo vstavaných systémoch, ktoré musia byť nakonfigurované raz pre ďalšiu prevádzku, musia byť hodnoty uložené navždy

Alexey 6. 9. 2017 8:25

Napríklad čip-dip STM32F030F4P6 stojí 48 rubľov a priamy analóg ATtiny2313 stojí 98 rubľov. Myslím, že na zostavenie termostatu bude stačiť ktorýkoľvek z nich. A kompenzácia pamäte pre STM môže byť v akomkoľvek snímači teploty. Áno, aspoň v rovnakom DS18B20. Pokiaľ ide o notebooky, každý terminál na prijímanie platieb má nainštalovaný počítač s OS a monitorom. Takže existujú aj také systémy. Pri výbere MK si v prvom rade vyberajte ten, ktorý je lacnejší. Ak je toto koníček, môžete si kúpiť Arduino, aby ste sa neobťažovali spájkovaním, a keď sa plánuje uvedenie systému do výroby a výroba v stovkách, potom sa počíta každý cent. A preplatenie 50 rubľov za MK, keď je jeho cena 48, je nedostupný luxus.

Ruslan 17.06.2017 21:46

Alexey, prečo si si vybral programovacie prostredie IAR?
Ktoré prostredie je pre nováčika lepšie zvoliť (aby bolo veľa rád ako v Atmel Studio)?

Alexey 17.06.2017 22:07
Ruslan 17.06.2017 22:56
Ak som nevyzeral „zle“, dajte mi odkaz, kde sa môžem pozrieť alebo si prečítať, ako na to!
Ešte lepšie, urobte video, myslím, že veľa začiatočníkov (nielen) bude mať záujem si to pozrieť!
Vopred ďakujem!
Alexey 8.5.2017 10:19
Ruslan 22.11.17 12:17

Mal som na mysli toto https://www.youtube.com/watch?v=wOIlhRd-vN8
5-7 minút!!!

Ruslan 22.11.17 12:18

Alexey, prosím, povedzte mi, ako pracovať s „vyčíslením“, inak takéto informácie nikde nie sú a vo vašich videách „C pre najmenších“ tiež nie je, ale naozaj to potrebujem!
Keď som sa hral s AVR, nikdy som nevidel taký zázrak ako enumerácia, ale teraz ma zaujímajú STM a je ich veľa! A neexistujú žiadne informácie o tom, ako s nimi pracovať!
Tu je príklad zo skutočného kódu:


StatusCode MIFARE_Read(byte blockAddr, byte * buffer, byte * bufferSize);

Kde je zoznam StatusCode:


enum StatusCode: byte (
STATUS_OK , // Úspech
STATUS_ERROR , // Chyba v komunikácii
STATUS_COLLISION , // Zistená kolízia
STATUS_TIMEOUT , // Časový limit v komunikácii.
STATUS_NO_ROOM , // Vyrovnávacia pamäť nie je dostatočne veľká.
STATUS_INTERNAL_ERROR , // Vnútorná chyba v kóde. Nemalo by sa to stať ;-)
STATUS_INVALID , // Neplatný argument.
STATUS_CRC_WRONG , // CRC_A sa nezhoduje
STATUS_MIFARE_NACK = 0xff // MIFARE PICC odpovedal s NAK.
};

Toto je z knižnice Arduino (C++), ale Keil na to nadáva!
Ako správne napísať návrat funkcie enumerácie?

Ruslan 22.11.17 12:29

A ako deklarovať jeden z argumentov vo funkcii, ktorá je enumeráciou:


void PCD_WriteRegister(register PCD_Register, hodnota bajtu);

Kde je PCD_Register uvedený:


enum PCD_Register: byte (
// Stránka 0: Príkaz a stav
// 0x00 // vyhradené pre budúce použitie
CommandReg = 0x01<< 1, // starts and stops command execution
ComIEnReg = 0x02<< 1, // enable and disable interrupt request control bits
DivIEnReg = 0x03<< 1, // enable and disable interrupt request control bits
ComIrqReg = 0x04<< 1, // interrupt request bits
...
};

A reg, ako to chápem, je enumerácia, ale nie je nikde deklarovaná v kóde a nechápem, odkiaľ pochádza!
Prečítal som si veľa stránok na internete a našiel som informácie, že tieto enumerácie sa dajú nahradiť definíciami, no aj tak som chcel vedieť, ako s nimi pracovať!!!

Ruslan 22.11.17 12:35

Teším sa na vašu odpoveď!
Možno natočte video o tom, ako s nimi pracovať, aby to fungovalo aj pre ostatných, myslím si, že video bude veľmi užitočné, pretože také videá neexistujú (aspoň ja som ich nenašiel)!

Dmitrij 28.11.17 22:02

"jednoduché programovanie"

Zaujímavý organ na programovanie ovládačov. Vo všeobecnosti nie je jasné, ako bolo možné porovnať 32-bitové s 8-bitovými. Ako Porsche Cayenne so Zarporožcom.

Alexey 29. 11. 2017 10:24

Môžete porovnávať, môžete. Len treba brať do úvahy, že v tomto porovnaní je Porsche lacnejšie ako Záporožci. Čo sa týka urológie, je to pikantnejšie. Tak to neopravím.

Konštantín 23.12.17 00:06

Ruslan, nerozumiem, ako hľadáš a nič nenájdeš (zrejme nehľadáš). Toto sú úplné základy jazyka C (nielen pre MK, ale aj pre počítače). Prečítajte si knihu od Kernighan a Ritchieho, všetko C je tam perfektne popísané.
A nikto ti neodpovie na tvoje otázky, toto sú elementárne veci.

ANONYM 11.02.18 16:27

Prečo porovnávaš 32-bitový ST MK s 8-bitovým Atmelom. Hlúpe prirovnanie. Je to ekvivalentné porovnaniu 32-bitového Atmel AT91SAM s 8-bitovým STM8, aj keď vezmeme do úvahy, že Atmel má 32 ešte výkonnejších vybíjačov.

Alexey 13.02.2018 12:18

Pretože v čase písania tohto článku neboli 8-pásmové ST v predaji a mega a STM32 sú cenovo rovnaké.

STM32_Dev 19.06.2019 13:59

No, AVR potrebuje 4-5 hodinových cyklov, aby urobil to isté!!! Len. A tu sa opäť ukazuje, že AVR je vyrobený lepšie ako STM32 s jeho nafúknutými hodinami a STM32 nemá vo vnútri EEPROM ako AVR

Takt AVR pri 16 MHz - 1/16000000 = 0,0000000625 s = 62,5 ns * 5 taktov = 312,5 ns.
Hodiny ARM na 48 MHz - 1/48000000 = 0,0000000208 s = 20,8 ns * 12 hodín = 250 ns.

Zdá sa, že atmega múzea počíta svojich 5 hodinových cyklov dlhšie ako 12 hodinových cyklov STM32)))

Nemá STM32 eprom? Samozrejme? STM32L152 - 8kB eprom! A čo atmega? 512 bajtov? Ach toľko!!! ani neviem co tam mam napisat. Predstavme si... mmm... 16 premenných po 4 bajty)) No, medzi ovládačmi je len búrka))

SIM31 30. 6. 2019 19:29

Čo sa týka spotreby, dá sa aj porovnávať, nová atmega a attiny sú veľmi ekonomické.
A všetko má svoje využitie. Ak potrebujete napájanie, vezmite si Raspbery Pi 4 a nebojte sa, Python má ešte viac možností, dokonca nastaviť plnohodnotný webový server, dokonca spustiť Quake 3D.
Ak potrebujete spracovať dátové toky, je tu pls (pozri projekt „Mars Rover“ „Mars Rover 2“)
Autor má kopec pozitív, no to, že Arduina je živšia ako všetko živé, znamená, že nie všetko je také jednoduché.


Rádioamatéri už mnoho rokov používajú osembitové mikrokontroléry rodiny PIC a AVR. Sú obľúbené vďaka nízkej cene, podrobnej dokumentácii, jednoduchosti programovania a ľahkej inštalácie. Pomerne často sa však vyskytujú prípady, keď výkon takéhoto mikrokontroléra nestačí na vyriešenie úlohy. Najjednoduchším príkladom je merač frekvencie alebo generátor signálu na mikrokontroléri, kde maximálna nameraná alebo generovaná frekvencia priamo závisí od rýchlosti spracovania alebo výstupu informácií.

Okrem rýchlosti majú osembitové mikrokontroléry aj ďalšie obmedzenia, napríklad mnohé modely AVR majú iba jeden hardvérový sériový port, ktorý neumožňuje prijímať informácie z externého zariadenia a súčasne odosielať výsledky ich spracovania spotrebiteľovi. Nehovoriac o takých „banálnych“ veciach, ako je zobrazovanie informácií na grafickom indikátore, čo si vyžaduje veľké zdroje rýchlosti aj pamäte. Po analýze množstva takýchto obmedzení prišiel autor s myšlienkou prejsť na mikrokontroléry rodiny STM32.

Zvážte napríklad dva mikrokontroléry rovnakej cenovej kategórie - STM32F103C6 a ATmega328P.

stôl 1

Typ mikrokontroléra

Veľkosť procesora

Stúpanie olova, mm

Hodinová frekvencia, MHz

Objem pamäte FLASH. KB

Množstvo pamäte RAM, kB

číslo USART

Počet 16-bitových časovačov

Počet I/O liniek

Približná cena, rub.

Ich porovnávacie parametre sú uvedené v tabuľke. 1. Výsledky porovnania sú dokonca trochu prekvapujúce. 32-bitový mikrokontrolér je nielen výkonnejší ako osembitový mikrokontrolér takmer vo všetkých ohľadoch, ale je aj lacnejší. Samozrejme, spájkovanie mikrokontroléra s rozstupom pinov 0,5 mm doma nie je také jednoduché. Našťastie to vo väčšine prípadov nie je potrebné – na trhu je množstvo typov vývojových dosiek s mikrokontrolérmi rodiny STM32, postačujúcich pre rôzne aplikácie. Pozrime sa na ne podrobnejšie.

STM32F4-DISCOVERY

Táto doska (zobrazená na obr. 1) je možno najvhodnejšia pre začiatočníkov študujúcich mikrokontroléry STM. Po prvé, má veľkú sadu periférnych zariadení. Doska obsahuje okrem mikrokontroléra mikroelektromechanický akcelerometer, mikrofón, audio DAC, dva USB konektory, tlačidlo a štyri LED diódy.

Piny mikrokontroléra sú vyvedené na kontaktné plôšky pre montáž kolíkových konektorov na ľavom a pravom okraji dosky, čo uľahčuje pripojenie všetkých potrebných externých zariadení k nim. Mikrokontrolér STM32F407VGT6 osadený na doske má veľmi dobré parametre: 1 MB pamäte FLASH, 192 KB RAM a taktovacej frekvencie 168 MHz.

Nakoniec je doska vybavená vstavaným debuggerom ST-LINK/V2, pomocou ktorého je možné ladiť programy nielen na mikrokontroléri na doske, ale aj na mikrokontroléroch rovnakej rodiny umiestnených na iných doskách. Prepínanie na ne sa vykonáva pomocou odnímateľného jumperu a SWD konektora.

Cena dosky je asi 800 rubľov, čo možno považovať za celkom prijateľné.

Vývojová doska STM32F103RBT6

Ďalšou zaujímavou možnosťou je vývojová doska s mikrokontrolérom STM32F103RBT6 (obr. 2).

Je o niečo slabšia ako tá nainštalovaná na predchádzajúcej doske – taktová frekvencia 72 MHz, 128 KB FLASH pamäte a 20 KB RAM, no veľmi zaujímavé sú periférne zariadenia. K dispozícii je dotykový TFT displej s rozlíšením 320x240 bodov a uhlopriečkou 2,8", vstavaný USB port na výmenu informácií s počítačom, slot na pamäťovú SD kartu, 32768 Hz quartz hodiny, priehradka na batéria hodín reálneho času a konektor ST-LINK na ladenie programov.

Cena tejto dosky je tiež asi 800 rubľov, ale treba poznamenať, že nemá vstavaný debugger. Ak chcete stiahnuť programy, musíte si buď zakúpiť samostatný debugger ST-LINK, alebo použiť dosku STM32F4-DISCOVERY, o ktorej sme hovorili vyššie.

Maple Mini

Vonkajšia podobnosť tejto dosky (obr. 3) so známymi modulmi Arduino je zarážajúca. A to nie je náhoda.

Doska Maple Mini bola navrhnutá ako náhrada za Arduino Nano. Programovací jazyk a vývojové prostredie pre rodinu mikrokontrolérov AVR inštalovaných v Arduine boli prispôsobené rodine STM. Prejdite na stránku http://leaflabs.com/docs/maple-q uickstart.html, kde nájdete podrobné informácie o programovacom jazyku a vývojovom prostredí Maple IDE.

Vývojová doska má mikrokontrolér STM32F103CBT6 pracujúci na frekvencii 72 MHz, 128 KB pamäte FLASH a 20 KB RAM, čo je nepochybne viac ako ktorýkoľvek modul Arduino. A ešte väčším plusom je, že vývojové prostredie zostalo prakticky nezmenené.

Samostatne poznamenávame, že napriek svojej miniatúrnej veľkosti poskytuje Maple Mini veľmi rozmanité periférie: 34 I/O liniek, dva SPI a dva I2C kanály rozhrania, tri sériové porty. To umožňuje jeho úspešné použitie v rôznych amatérskych vývojoch. Maple Mini je možné vďaka malým rozmerom zabudovať priamo do vyvíjaného zariadenia.

Pôvodnú dosku Maple Mini je možné zakúpiť za 35 dolárov na stránke jej vývojárov. Poštovné bude stáť ďalších 5 dolárov. Kópia dosky vyrobená v Číne bude stáť polovicu.

softvér

Existuje niekoľko možností pre vývojové prostredia, ktoré možno použiť na prípravu programov pre mikrokontroléry rodiny STM32:

Komerčné IAR Embedded Workbench, AtollicTrueSTUDIO, Keil atď. Tieto plnohodnotné produkty sú pomerne drahé, s cenou licencie od 1000 eur, ale existujú aj bezplatné demo verzie s obmedzením objemu vyvíjaného programu; jednoduché projekty sú celkom dosť;

Bezplatný Eclipse s kompilátorom ARM-GCC vyžaduje pred použitím netriviálnu konfiguráciu kompilátora. Jediným plusom pre dnešok je schopnosť pracovať nielen vo Windows, ale aj v Linuxe;

Zadarmo CooCox IDE (CoIDE) založené na rovnakom editore Eclipse. Načítava a ladí programy cez ST-LINK. Na rozdiel od predchádzajúcej možnosti CoIDE nevyžaduje žiadne špeciálne nastavenia a funguje ihneď po inštalácii. Táto možnosť je najpohodlnejšia a stojí za to ju použiť.

Využime CooCox IDE na vytvorenie vzorového programu pre dosku STM32F4-DISCOVERY, ktorý implementuje klasické LED blikanie prvého programu pre ľubovoľný mikrokontrolér. Na doske STM32F4-DIS-COVERY sú štyri LED diódy, sú pripojené na piny PD12-PD15 mikrokontroléra. Necháme ich striedavo blikať.

Krok 1. Spustite vývojové prostredie CoIDE a vytvorte projekt. Z rozbaľovacieho zoznamu zobrazeného na obr. 4, vyberte mikrokontrolér STM32F407VG.

Krok 2. Ako je znázornené na obr. 5, vyberte komponenty, ktoré budú použité v projekte. Hlavnými sú GPIO (vstup-výstup), C Library (základné funkcie jazyka C) a M4 Core (funkcie jadra procesora). Keď aktivujete komponent, CoIDE automaticky skopíruje potrebné súbory do priečinka projektu, čo je veľmi výhodné.

Krok 3. Zadanie textu programu. Je dosť krátky a je uvedený v tabuľke. 2.

Ako vidíte, všetko je jednoduché a zrejmé. Tí, ktorí majú napísané programy pre mikrokontroléry AVR, pravdepodobne uvidia známe návrhy - inicializáciu portov označujúcich smer (vstup alebo výstup), hlavnú slučku, v ktorej sa vykonávajú potrebné akcie. Vo všeobecnosti syntax programu plne zodpovedá jazyku C, ku ktorému je literatúry viac než dosť. Na internete je tiež veľa článkov o programovaní pre STM32. Mnoho príkladov sa dodáva s vývojovou doskou a možno ich použiť aj ako vzorky.

Po zadaní textu programu kliknutím na tlačidlo obrazovky „Download to flash“ sa program stiahne do mikrokontroléra. LED diódy na doske začnú blikať. Samostatne stojí za zmienku možnosti ladenia - bod prerušenia je možné nastaviť kdekoľvek v programe, program môžete spustiť krok za krokom a zobraziť hodnoty premenných.

Samozrejme, tento príklad nie je ideálny. Môžete napríklad použiť prerušenia časovača na ovládanie blikania LED diód, čím sa uvoľní hlavná slučka programu pre iné úlohy. Kto chce, môže na to prísť sám.

Záver

Vo všeobecnosti po prvom zoznámení zanechali mikrokontroléry rodiny STM32 veľmi príjemný dojem. Ukázalo sa, že všetko nie je také zložité a pohodlie vývojového prostredia, proces ladenia a veľké množstvo štandardných funkcií dokonca trochu pripomenuli prechod z MS DOS na Windows - zdá sa, že všeobecné body sú rovnaké, ale všetko je. oveľa pohodlnejšie a funkčnejšie.

Ale hlavnou nevýhodou tejto rodiny pre amatérsky vývoj je stále príliš malá rozteč kolíkov. Dizajn a spájkovanie dosky s rozstupom kolíkov 0,5 mm doma je veľmi netriviálna úloha. Ale pri súčasných cenách sú ladiace dosky s už namontovanými mikrokontrolérmi celkom dostupné každému rádioamatérovi.

Oplatí sa všetko previesť na STM a 32-bitovú architektúru? Samozrejme, že nie. Sú úlohy, na ktoré ATtiny úplne postačuje. Ale napríklad na analýzu spektra v domácom prijímači SDR alebo na príjem a prenos veľkého množstva informácií cez sieť je oveľa efektívnejšie okamžite použiť výkonný mikrokontrolér, aby ste nenarazili na nedostatok pamäte alebo výkonu, keď zlepšenie zariadenia.

Na základe jadra Cortex si začali aktívne získavať popularitu medzi profesionálnymi aj začínajúcimi vývojármi zariadení na mikrokontroléroch. Existuje na to niekoľko dôvodov:
- nízka cena v porovnaní s konkurenciou;
- veľké množstvo vstavaných rozhraní;
- jednoduchosť programovania a vysoká spoľahlivosť.
Ale je tu aj jeden dôležitý nedostatok - všetky mikrokontroléry STM sa nevyrábajú v DIP obaloch, čo začiatočníkov často jednoducho odstraší, pretože vyrobiť si dosku s dráhami menšími ako 0,3 mm doma je problematické. Tento stav viedol k tomu, že sa na trhu objavilo veľké množstvo ladiacich dosiek, a to ako od spoločnosti ST Microelectronics (Discovery), tak dosiek vyrobených spoločnosťami tretích strán (Olimex, Pinboard). Discovery som si vybral z troch dôvodov:
- relatívne nízka cena (dosku je možné zakúpiť od 300 rubľov);
- dobré spracovanie (aj keď existujú nejaké sťažnosti týkajúce sa zapojenia, ale nie sú také významné);
- veľa zdrojov a príkladov je zverejnených na webovej stránke výrobcu;
- prítomnosť vstavaného programátora (nemusíte ho kupovať samostatne).
Účelom prvej lekcie je pomôcť začínajúcemu vývojárovi vybrať si ladiacu dosku a v budúcnosti naučiť základy programovania.
Tak, poďme.

STM32F0DISCOVERY

Táto doska bola vydaná vo februári 2012, aby prilákala vývojárov, ktorí predtým používali 8-bitové mikrokontroléry, čím zaplnili túto medzeru. Nemôžem o nej povedať nič zlé ani dobré. Bežná doska, lacná, je skvelá na začiatok. Má nasledujúce vlastnosti:
- mikrokontrolér: STM32F051R8T6 (Cortex M0, 48 MHz, flash 64 KB, RAM 8 KB);
- vstavaný ST-link/V2, ktorý možno použiť oddelene od dosky;
- napájanie z USB alebo z externého 3/5V zdroja;
- 4 LED diódy a 2 tlačidlá;
- rozhrania: USART, SPI, I2C, HDMI;
- časovače 16 a 32 bitov;
- všetky výstupy sú vyvedené na dva jednoradové hrebene.
V skutočnosti je takáto doska už dosť zastaraná a odporúča sa ju brať len na úplný začiatok tréningu.

STM32VLDISCOVERY

Od predchádzajúcej dosky sa líši iba procesorom STM32F100RBT6B (Cortex M3, 24 MHz, flash 128 KB, RAM 8 KB) a rozložením periférnych hrebeňov. Rovnako ako ten, o ktorom sme hovorili vyššie, je vhodný pre začínajúcich vývojárov. Viac o nej niet čo povedať.

STM32LDISCOVERY

STM32LDISCOVERY je dôstojnou evolúciou predchádzajúcej dosky. Čo je na tom zaujímavé:
- mikrokontrolér STM32L152RBT6 (Cortex M3, 32 MHz, flash 128Kb, RAM 8Kb, EEPROM 4Kb)
- rozhrania: USB, USART, SPI, I2C;
- 8 časovačov;
- 24-kanálový 12-bitový ADC;
-12-bitový DAC;
- hodiny reálneho času;
- LCD ovládač 8x40
- vstavaný ST-link/V2.
Na doske sú nainštalované:
- LCD displej 24x8;
- 4 LED diódy;
- 2 tlačidlá;
- dotyková klávesnica;
- 2 jednoradové hrebene s voľnými vývodmi.
Samostatne by som chcel povedať o USB: radič podporuje USB 2.0 plnú rýchlosť, režim hostiteľa a zariadenia, čo sa v MK tejto triedy zriedka vyskytuje.
V skutočnosti je doska najlepšou voľbou pre prácu s jadrom Cortex-M3, takže si ju môžete bezpečne vziať, pretože cena je nízka.

STM32F3DISCOVERY

STM32F3DISCOVERY patrí do ďalšej generácie vývojových dosiek od STM a má nasledujúce vlastnosti:
- mikrokontrolér STM32F303VCT6 (Cortex M4, 72 MHz, flash 256 KB, RAM 48 KB)
- hodiny reálneho času;
- vstavaný ST-link/V2;
- 13 časovačov;
- 12 kanálový ovládač DMA;
- 4 ADC;
- 4 operačné zosilňovače;
- rozhrania: CAN, USB 2.0, USART/UART, SPI, I2C;
- 87 GPIO liniek.

- vlastný port USB;
- 3-osový akcelerometer a 3-osový geomagnetický senzor v jednom kryte;
- 3-osový gyroskop;
- 10 LED diód;
- 2 tlačidlá;
- 2 dvojradové hrebene.
Veľmi zaujímavá doska, veľa príležitostí na experimentovanie. Všeobecne platí, že názor na ňu zostáva dobrý, ale jej zameranie na sledovanie fyzického stavu a polohy výrazne znižuje priestor na experimentovanie, hoci rozširujúcu dosku si môžete ľahko vyrobiť sami.

STM32F4DISCOVERY

S touto doskou som mal možnosť pracovať najviac a páčila sa mi viac ako ostatné – ovplyvnilo ju komplexné zameranie.
Tu je to, čo to je:
- mikrokontrolér STM32F407VGT6 (Cortex M4, 168 MHz, flash 1 MB, RAM 192 KB)
- vstavaný ST-link/V2;
- časovače;
- DMA ovládač;
- ADC/DAC;
- rozhrania: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
Doska obsahuje nasledujúce periférie:
- vlastný port USB;
- 3-osový akcelerometer;
- 8 LED diód;
- 2 tlačidlá;
- 2 dvojradové hrebene;
- audio DAC so zosilňovačom triedy D;
- všesmerový digitálny mikrofón.

Ako som písal vyššie, táto doska sa pre mňa stala hlavnou, potešila ma možnosť práce so zvukom a akcelerometer.

Ďalšie lekcie budú založené na tejto tabuli.

Zhrnutie.
Ak sa rozhodnete začať pracovať s ladiacimi doskami STM, potom vám odporúčam vziať si STM32F4DISCOVERY, podľa môjho názoru má najväčšiu funkčnosť. Ďalšie články budú založené práve na práci s ním. V blízkej budúcnosti budú napísané články na nasledujúce témy:
- práca s GPIO, časovačmi, prerušeniami atď.;
- práca s UART, SPI, I2C a 1-wire rozhraniami s využitím príkladov reálnych zariadení, ako sú displeje, GPS a GSM moduly, teplotné senzory, komunikácia s počítačom cez RS-232 a mnohé ďalšie.
Konečným cieľom tohto cyklu je vytvoriť rozširujúcu dosku pre STM32F4. Všetok firmvér a schémy zapojenia budú verejne dostupné.