Práce s LCD indikátorem na vývojové desce STM32L-Discovery. Trénink na STM32 k masám Blok děliče frekvence

Obecná informace

Vývojová deska STM32L-Discovery má displej z tekutých krystalů (LCD) se šesti 14 segmentovými znaky, 4 dvojtečkami (dvojtečka), 4 tečkami (DP), 4 pruhy (čára). Všechny segmenty jsou sloučeny do skupin COM0, COM1, COM2, COM3 po 24 segmentech. Každá skupina má svůj vlastní samostatný „společný vodič“.


Na ladicí desce je nainstalován mikrokontrolér STM32L152RBT6. Mikrokontrolér má vestavěný LCD ovladač, který ovládá monochromatické LCD indikátory.
LCD ovladač:

  1. Umožňuje nakonfigurovat frekvenci aktualizace (snímací frekvence - frekvence, se kterou se aktualizují informace na LCD)
  2. Podporuje režim statického a multiplexního ovládání
  3. Podporuje instalace softwaru kontrast
  4. Umožňuje více úrovní ovládacího napětí (až čtyři)
  5. Využívá dvojité ukládání do vyrovnávací paměti, což umožňuje aktualizaci dat v registrech LCD_RAM ​​kdykoli během provádění programu bez narušení integrity zobrazovaných informací

Registry paměti LCD ovladače

Mikrokontrolér STM32L152RB má speciální registry LCD_RAM, v nichž uložené informace odpovídají skupině segmentů COM0 - COM3. Každá skupina odpovídá dvěma 32bitovým registrům. Tento počet registrů umožňuje mikrokontroléru ovládat LCD c velké množství segmenty než ty, které jsou instalovány na vývojové desce.

K ovládání LCD se 176 segmenty se používají 4 skupiny COM0 - COM3 po 44 segmentech, k ovládání LCD se 320 segmenty 8 skupin COM0 - COM7 po 40 segmentech.



Vývojová deska STM32L-Discovery používá LCD s 96 segmenty, rozdělenými do 4 skupin COM0 - COM3 po 24 segmentech.


LCD na vývojové desce STM32L-Discovery je zapojeno tak, že jsou použity bity S40, S41 druhých registrů LCD_RAM ​​v každé skupině a bity S0-S27 prvních registrů LCD_RAM. Pro snížení počtu použitých registrů budou informace z bitů S40-S43 zapsány do volných bitů S28-S31 pomocí funkce přemapování.

Blok frekvenčního děliče

Blok frekvenčního děliče (Frequency generator) umožňuje dosáhnout na LCD různé snímkové frekvence v rozsahu od 32 kHz do 1 MHz. Jako zdroj časovacího signálu lze použít následující:
  1. Externí nízkofrekvenční generátor s frekvencí 32 kHz (LSE. Low speed externí)
  2. Vnitřní nízkofrekvenční generátor s frekvencí 37 kHz (LSI. Low speed interní)
  3. Externí RF generátor s frekvenčními děliči 2,4,8 a 16 a maximální frekvencí 1 MHz. (HSE. Vysokorychlostní externí)
Pro dosažení přesného načasování a snížení napěťového offsetu stejnosměrný proud Prostřednictvím segmentů LCD musí být zdroj časovacího signálu stabilní. Hodinový signál LCDCLK je odeslán do ovladače LCD. Frekvence hodinového signálu je rozdělena podle dělicích faktorů, které jsou nastaveny bity PS, DIV registru LCD_FCR (Frame Control Register). Výsledná frekvence na výstupu bloku frekvenčního děliče se vypočítá podle vzorce:

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

Snímková frekvence se vypočítá pomocí vzorce:

F Rám =f ck_div *povinnost

Kde clo je pracovní cyklus - poměr trvání impulsu k jeho periodě. Během jednoho snímku se na LCD postupně zobrazují informace z registrů LCD_RAM[x], LCD_RAM ​​atd. U LCD instalovaného na vývojové desce musí v jednom snímku řadič LCD vydávat informace ze 4 skupin segmentů COM0 - COM3, proto bude doba trvání řídicího impulsu pro jednu skupinu 1/4 doby trvání snímku, tzn. clo = 1/4.

LCD ovládání

Existují dva způsoby ovládání LCD - režim statického ovládání a režim ovládání multiplexu. Při statické indikaci je každý segment bitu indikátoru připojen k výstupu mikrokontroléru. Ve vztahu k LCD je na ladicí desce STM32LDiscovery vyžadováno 6 * 14 = 84 pinů mikrokontroléru (kromě dvojteček, teček a pruhů). Vzhledem k použití takového počtu pinů bude připojení dalších periferií nemožné. Mikrokontrolér STM32L152RB má 64 pinů. V režimu multiplexního řízení (dynamický režim řízení) se identické segmenty číslic indikátoru spojují do skupin. Informace jsou zobrazovány střídavým osvětlením segmentů číslic indikátoru s frekvencí, která je lidským okem nepostřehnutelná.

Multiplexní řízení umožňuje ovládat velké množství segmentů. Namísto samostatného ovládání každého prvku mohou být adresovány řádky a sloupci (COM a SEG), čímž se zjednoduší řídicí obvod, protože každý segment nevyžaduje vlastní ovládací vedení. Pro zapnutí vybraného segmentu je třeba na něj aplikovat potenciální rozdíl COM a SEG. Příklad funkce první číslice indikátoru (ukazatel zobrazuje „1:“):


První číslice indikátoru v čase t 0


První číslice indikátoru v čase t 1


První číslice indikátoru v čase t 2


Obecné schéma připojení segmentů k pinům LCD


Schéma zapojení pinů LCD k portům mikrokontroléru

Pro vedení SEG se používá řídicí napětí, jehož počet úrovní je určen koeficientem zkreslení. LCD na vývojové desce používá režim multiplexního řízení s clonou=1/4 a předpětím=1/3. Hodnoty cla a bias se nastavují přes registr LCD_CR (Control Register) v bitech DUTY a BIAS.

Praxe

Konfigurace portů mikrokontroléru

Pro ovládání LCD musí být porty mikrokontroléru nakonfigurovány odpovídajícím způsobem:
  1. K východu
  2. Použití funkce AF 11 Alternativní
  3. Mít výstupní frekvence do portu 400 kHz
  4. Použijte provozní režim push-pull
  5. Žádné pull-up odpory
Když port pracuje v alternativním funkčním režimu, výstupní datová vyrovnávací paměť portu je řízena signály přicházejícími z periferie. Hlavičkový soubor stm32lxx.h knihovny CMSIS obsahuje popis všech periferních registrů a také strukturu pro přístup k nim.

Piny LCD jsou připojeny k portům GPIOA (PA1-PA3,PA8-PA10,PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3,PC6-PC11) mikrokontroléru. Aby LCD fungovalo, musí být do vybraných portů přiveden hodinový signál. GPIO porty mikrokontroléru jsou taktovány ze sběrnice AHB systému RCC (Reset and Clock Control) - systém hodin a reset. Hodinový signál je dodáván nastavením odpovídajících bitů v registru RCC_AHBENR (AHB periferní hodiny umožňující registr).

Zaregistrujte RCC_AHBENR (obrázek ukazuje prvních 15 bitů)

Pro porty GPIOA, GPIOB, GPIOC je potřeba nastavit 1 až 0, 1, 2 bity registru.

Dále uvedu kód pro zápis informace do registru pomocí bitové masky a pomocí hexadecimálních kódů. Použití bitových masek je pohodlnější, ale práce s hexadecimálními kódy umožňuje pochopit podstatu práce s registry.

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

Pro indikaci provozních režimů portu se používá registr GPIOx_MODER (registr režimu portu GPIO) (x = A..H). Všechny bity registru jsou seskupeny do skupin MODERY, kde y je číslo pinu odpovídajícího portu. Porty musí být nakonfigurovány pro alternativní funkční režim, tzn. ve skupině odpovědné za pin nastavte hodnotu na 10. Pro port GPIOA je třeba nakonfigurovat piny 1-3,8-10,15, tedy nastavit 1 na 3,5,7,17,19, 21,31 číslic.


Zaregistrujte GPIOx_MODER (registr 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); nebo GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
Porty mikrokontroléru musí být přepnuty do režimu push-pull. K tomu je potřeba nastavit 1 v registru GPIOx_OTYPER (registr typu výstupu GPIO portu) v bitech odpovědných za piny.


Registrovat GPIOx_OTYPER (registr 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); nebo GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
Obě možnosti ovlivňují vybrané piny. (Pro port GPIOA jsou nakonfigurovány piny 1-3.8-10.15). Pokud potřebujete přepnout všechny piny portu do režimu push-pull, můžete do registru zapsat následující hodnotu:
GPIOA->OTYPER = 0x0;
Pro specifikaci frekvence výstupu informací na port se používá registr GPIOx_OSPEEDR (registr výstupní rychlosti portu GPIO). Všechny bity registru jsou seskupeny do skupin OSPEEDRy, kde y je číslo pinu odpovídajícího portu. V této práci by měla být frekvence nastavena na 400 kHz tzn. ve skupině odpovědné za pin nastavte hodnotu na 00.


Registrovat GPIOx_OSPEEDR (registr výstupní rychlosti portu GPIO)

GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | 1 GPRIOSPEOPEEDR_1 GPRIOSPEEDER_GPRIOPEOSPEEDR) nebo GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Pokud potřebujete nastavit výstupní frekvenci portu na 400 kHz pro všechny piny, můžete zapsat hodnotu do registru:
GPIOA->OSPEEDR = 0x0;
Pro deaktivaci pull-up a pull-down rezistorů pro vybrané piny použijte registr GPIOx_PUPDR (GPIO port pullup/pull-down registr). Všechny bity registru jsou seskupeny do skupin PUPDRy, kde y je číslo pinu odpovídajícího portu. Chcete-li zakázat pull-up rezistory ve skupině odpovědné za pin, nastavte hodnotu na 00.


Zaregistrujte GPIOx_PUPDR (roztahovací/rozbalovací registr GPIO portu)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPOPIO_PUPDR3); nebo GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Pokud potřebujete zakázat pull-up rezistory pro všechny piny, můžete zapsat hodnotu do registru:
GPIOA->PUPDR = 0x0;
Chcete-li použít alternativní funkci pro porty mikrokontroléru, dva registry GPIOx_AFRL (nízký registr alternativní funkce GPIO), odpovědné za nízké kolíky (0 až 7) a GPIOx_AFRH (horní registr alternativní funkce GPIO), odpovědné za vysoké kolíky (8 až 15) , Jsou používány. Všechny bity registru jsou seskupeny do skupin AFRLy a AFRHy, kde y je číslo pinu odpovídajícího portu. Porty musí být nakonfigurovány pro použití alternativní funkce AF11, k tomu musí být skupina odpovědná za pin nastavena na 1011.


Registrovat GPIOx_AFRL (nízký registr alternativní funkce GPIO)


Registrovat GPIOx_AFRH (horní registr alternativní funkce GPIO)

Chcete-li to provést, musíte do registrů zapsat následující 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 registru GPIOx_AFRL.
AFR = 0xB0000BBB – zapíše hodnotu do registru GPIOx_AFRH.

Nastavení pro odpovídající piny portů GPIOB a GPIOC se provádí stejným způsobem.

Nastavení ovladače LCD

Při práci s LCD ovladačem, stejně jako s jinými periferiemi, musí být do něj přiváděn hodinový signál. Hodinový signál je rovněž dodáván do systému řízení spotřeby. Řadič a systém řízení spotřeby využívají k taktování sběrnici APB1. Chcete-li povolit taktování v registru RCC_APB1ENR (registr povolení periferních hodin APB1), musíte nastavit 1 v bitech 9 a 28.


Registrovat RCC_APB1ENR (registr povolení periferních hodin AB1)

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; nebo RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
Aby LCD ovladač fungoval, je nutné specifikovat zdroj hodinových signálů. Zdroj je uveden v registru RCC_CSR. Ve výchozím nastavení je zápis do tohoto registru zakázán. Ochrana proti zápisu v registru RCC_CSR je odstraněna v registru řízení výkonu PWR_CR. Registr RCC_CSR řídí zdroje hodin řadiče RTC a LCD
Zápis do registru RCC_CSR je povolen nastavením bitu 8 registru PWR_CR na 1.


Registrovat PWR_CR (registr řízení výkonu PWR)

PWR->CR |= PWR_CR_DBP; nebo PWR->CR |= 0x100; /* 0x100 = 1 000 0000 */
Chcete-li změnit zdroj hodin ovladače LCD (a také hodiny RTC), musíte nejprve resetovat zdroj hodin nastavením bitu RTCRST (nastavení 1 až bit 23) v registru RCC_CSR (kontrolní/stavový registr).


Registrovat RCC_CSR (kontrolní/stavový registr)

RCC->CSR |= RCC_CSR_RTCRST;
Nebo zápisem hodnoty do registru pomocí operátoru „|=“, protože hodnota podle
výchozí registr se liší od 0x0:
RCC->CSR |= 0x800000; /* 0x800000 = 1000 0000 0000 0000 0000 0000 */
Chcete-li vybrat nový zdroj hodin, musíte odstranit bit RTCRST:
RCC->CSR &= ~RCC_CSR_RTCRST; nebo RCC->CSR &= ~0x800000;
Jako zdroj hodinového signálu je zvolen externí nízkofrekvenční generátor. Chcete-li zapnout generátor v registru RCC_CSR, musíte nastavit bit LSEON (nastavit 1 až 8 bitů):
RCC->CSR |= RCC_CSR_LSEON; nebo RCC->CSR |= 0x100; /* 0x100 = 1 000 0000 */
Po zapnutí generátoru nějakou dobu trvá, než se stabilizuje. Připravenost generátoru se kontroluje hardwarovým nastavením bitu LSERDY v registru RCC_CSR:
while(!(RCC->CSR&RCC_CSR_LSERDY));
Výběr externího nízkofrekvenčního generátoru jako zdroje hodin se provádí nastavením registru RCC_CSR na 01 ve skupině RTCSEL:
RCC->CSR |= RCC_CSR_RTCSEL_LSE; nebo RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
V ovladači LCD je třeba nainstalovat požadovaný režim zaujatost. K tomu je potřeba v registru LCD_CR (řídicí registr LCD) nastavit hodnotu 10 ve skupině BIAS. Před instalací bitů je nutné vyčistit bity od „odpadků“.


Registr LCD_CR (řídicí registr LCD)

Reset bitů:
LCD->CR &= ~LCD_CR_BIAS; nebo LCD->CR &= ~0x60;
Výběr režimu zkreslení=1/3 pomocí bitové masky:
LCD->CR |= LCD_CR_BIAS_1; nebo LCD->CR |= 0x40;
Nastavte režim provozu=1/4. Za tímto účelem také nejprve resetujeme všechny bity:
LCD->CR &=~LCD_CR_DUTY; nebo LCD->CR &= ~0x1C;
Nastavte hodnotu 011 do skupiny DUTY registru LCD_CR pro
režimová zátěž = 1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; nebo LCD->CR |= 0xС;
Aktivujeme funkci opětovného přiřazení pinů. Chcete-li to provést, nastavte 1 až 7 bitů registru LCD_CR:
LCD->CR |= LCD_CR_MUX_SEG; nebo LCD->CR |= 0x80;
Nastavíme hodnoty koeficientů frekvenčního dělení hodinového signálu LCDCLK. Hodnoty koeficientů se nastavují v registru LCD_FCR (LCD frame control register). Nejprve také vymažeme všechny bity a poté nastavíme potřebné.


Registr LCD_FCR (registr řízení rámců LCD)

LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; nebo LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
Hodnoty koeficientů dělení frekvence hodinového signálu jsou nastaveny na ck_ps = LCDCLK/16, ck_div = ck_ps/17. Chcete-li to provést, nastavte 1 až 24 a 18 číslic:
LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
Chcete-li nastavit požadovanou úroveň kontrastu, musíte ve skupině CC nastavit hodnotu 010 a také nejprve vymazat bity ze starých hodnot:
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; nebo LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
Po nastavení všech hodnot nějakou dobu trvá synchronizace registru LCD_FCR. Synchronizace registrů se kontroluje nastavením bitu FCRSF v hardwaru v registru LCD_SR (stavový registr LCD).

Registrovat LCD_SR (stavový registr LCD)

While(!(LCD->SR&LCD_SR_FCRSR));
Jako zdroj napětí pro LCD zvolíme interní zvyšovací převodník do tvaru V lcd. Za tímto účelem je první bit registru LCD_CR (řídicí registr LCD) nastaven na 0:
LCD->CR &= ~LCD_CR_VSEL; nebo LCD->CR &= ~0x2;
Činnost ovladače LCD je povolena nastavením bitu registru LCD_CR (řídicí registr LCD) na 0:
LCD->CR |= LCD_CR_LCDEN; nebo LCD->CR |= 0x1;
Po instalaci interního zvyšovacího měniče jako zdroje napětí je třeba počkat, až bude připraven. Připravenost se kontroluje hardwarovým nastavením bitu RDY v registru LCD_SR (stavový registr LCD):
while(!(LCD->SR&LCD_SR_RDY));
Poté, co necháte ovladač LCD pracovat, musíte počkat, dokud nebude připraven. Připravenost se kontroluje hardwarovým nastavením bitu ENS v registru LCD_SR (stavový registr LCD):
while(!(LCD->SR&LCD_SR_ENS));

Vytvoření obrazu na LCD

Všechny segmenty indikátoru jsou sloučeny do skupin COM0 - COM3 po 24 segmentech (SEG0-SEG23). Informace o segmentech jsou uloženy v registrech LCD_RAM ​​v paměti ovladače LCD. Elektrické vedení tištěný spoj je taková, že čísla segmentů neodpovídají bitovým číslům registrů LCD_RAM.

Chcete-li zobrazit 1 na první číslici LCD, musíte rozsvítit segmenty 1B, 1C. Segment 1B patří do skupiny COM0, segment 1C patří do skupiny COM1. Informace o nich se tedy musí zapisovat do registrů RAM (LCD_RAM0), RAM (LCD_RAM2), resp. Segment 1B je zodpovědný za LCD výstup LCDSEG22, informace o něm jsou uloženy v bitu SEG40 registru RAM (LCD_RAM1). Pomocí funkce přemapování bude segment LCDSEG22 přiřazen bitu SEG28 registru RAM (LCD_RAM0). Segment 1C je zodpovědný za LCD výstup LCDSEG1, informace o něm je uložena v bitu SEG1 registru RAM (LCD_RAM2).

LCD->RAM= 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
Před zápisem hodnot do paměťových registrů je nutné zkontrolovat, zda byl dokončen předchozí přenos dat na LCD. K tomu se kontroluje bit UDR (Update display request) registru LCD_SR (LCD status register). Ovladač LCD má dvě výstupní vyrovnávací paměti, informace se zadávají do první vyrovnávací paměti a na LCD se vydávají z druhé vyrovnávací paměti. Bit UDR se nastavuje během přenosu z první vyrovnávací paměti do druhé a chrání registry LCD_RAM ​​před zápisem:
while(LCD->SR & LCD_SR_UDR);
Po zapsání informací do registrů LCD_RAM ​​​​je třeba nastavit bit UDR v registru LCD_SR (stavový registr LCD) (nastavit 1 až 2 bity):
LCD->SR |= LCD_SR_UDR; nebo LCD->SR |= 0x4; /*0x4 = 100 */

Za mučení a studium tohoto zařízení. Sotva řečeno, než uděláno. Šátek se sebral a šlo se. Ach ano! Téma našeho rozhovoru se stočilo na srovnání obou MK. Ten výše je proti ATmega328. Proč zrovna oni? Oba MK jsou v balení TQFP-32. (Je pravda, že ATmega328 je také dodáván v balíčku DIP)
Nyní se blíže podíváme do jejich nitra. Pro lepší pochopení jsem všechny potřebné údaje shromáždil do jedné tabulky.

Možnosti ATmega328 STM32F030K6T6
Bitová hloubka 8 bitů 32 bitů
BLIKAT 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álů
USART 1 PC 1 PC
SPI 1 PC 1 PC
I2C 1 kus (TWI) 1 PC
ADC 8 kanálů 10 bitů 16 kanálů 12 bit
Výživa 2,7 - 5,5 2,4 - 3,6
Rychlost 0 - 16 MHz 48MHz s externím 4 - 32MHz
Cena 160-170 rublů. 80-140 rublů.
Jak můžete vidět z tabulky, STM32 je mnohem zajímavější a bohatší než AVR. Je tu opravdu jedna maličkost. STM32 nemá EEPROM, ale má DMA, které jednoduše úplně zabije AVR. Pravda, AVR se může pochlubit Arduinem a snadným programováním. Nehádám se, ale STM32 má STM32Cube, který generuje kód pro IAR a stará se o celou rutinu nastavení periferií. A posledním hřebíkem do rakve AVR je RTOS. Ano, můžete jej nainstalovat také na AVR, ale musíte na to přijít, ale v STM32 zaškrtneme políčko „FREERTOS“ a je to. Systém sám udělá vše, co je potřeba, a nám nezbývá než vytvořit vlákna a napsat do nich kód. No, to je jen pro začátek. Ve skutečnosti je tam všechno trochu složitější. STM32 se mi zkrátka líbí a abych si vás konečně získal pro tuto platformu, hodící Arduino do šuplíku, vytvořím desku od začátku do konce a ukážu vám, jak se s ní pracuje. Oh, zapomněl jsem. Všechny STM32 mají SWD debugger. Jsou to tři dráty SWDIO, SWCLK, GND a můžete přeskakovat řádky kódu přímo v hardwaru a ne jako ATmega328 virtuálně v Proteus. K tomu potřebujete pouze univerzální programátor ST-LINK. Lze jej použít, pokud si zakoupíte desku Discovery nebo samostatný programátor. A nyní od slov k činům.
Systém. Větší
Tuto desku jsem vyrobil jako modul pro mou ladicí desku pro AVR. Můžete to ale zopakovat distribucí desky podle vlastního uvážení (na konci článku zveřejním projekt pro DipTrace). Co je na diagramu. A schéma ukazuje jednoduchý kabelový svazek, stejně jako u AVR. 8 MHz quartz se dvěma 20p kondenzátory. Stejně jako u AVR je sestaven napájecí obvod pro podporu ADC. Resetujte obvod jako AVR. Jediným rozdílem je BOOT obvod. Na rozdíl od AVR mají všechny STM32 na desce hardwarový zavaděč. Ve výchozím nastavení je připojen k USART. To znamená, že pokud stisknete pin BOOT0 k napájení a restartujete MK, pak pomocí programu Flash Loader Demonstrator můžete flashovat MK bez programátoru. Tato funkce užitečné, pokud již máte připravené a funkční zařízení a potřebujete aktualizovat firmware, pak potřebujete pouze adaptér USB USART. Mnoho lidí si nechce zahrávat s STM32, protože napájení není větší než 3,6 voltů. Nesmysl. Když se podíváte na pin tabulku, všimnete si, že všechny nohy mohou bez následků přijmout 5 voltů. Pokračujme.

A takto to vypadá nainstalované na desce.

Nyní připojíme programátor ST-LINK-GA ke konektoru SWD.

Nyní, když je vše připraveno, stáhněte si nejnovější verzi z webu ST (odkaz úplně dole na stránce). Nainstalujte a spusťte.

Klepněte na Nový projekt. A v okně, které se objeví, najdeme náš ovladač. Klepněte na tlačítko OK.

Po malém přemýšlení. Program zobrazí okno, jako je toto.

Nebudu popisovat co a proč, jelikož je to téma na samostatný článek. Teď například udělejte to, co vám ukážu. Co děláme. Spustíme operační systém a v jediném vláknu budeme blikat LED. Jakési „Heloy Word“ z děla.))) Chcete-li to provést, klikněte v levém okně na znaménko plus vedle nápisu „FREERTOS“ a zaškrtněte v rozevíracím seznamu.

Navíc, jakmile je vybrán externí quartz, na pravé straně ovladače se zeleně zvýrazní nožky, na které jej potřebujete zavěsit. Další věc, kterou musíte udělat, je vybrat nohu, na které bude LED viset. Vybral jsem port B a kolík 0. A našel jsem hrábě. Ze strachu, ani nevím proč, jsem otočil výstupní hřeben prvních čtyř kolíků vzhůru nohama. Proto ten zmatek na portu B. Tento problém se týká pouze mé desky. Ale nic, to nezastavilo MK v práci. A tak nakonfigurujte pin. Faktem je, že u STM mohou všechny piny nabývat hromady hodnot, ale pokud se dotknete diskrétního vstupu/výstupu, pak mohou existovat tři možnosti výstupu. Výstup do vzduchu, výstup s tahem na zdroj plus, výstup s tahem na společnou sběrnici. Standardně STM32CubeMX visí nohu ve vzduchu. No, nechme to být, musíme jen zkontrolovat práci a předvést sílu STM32. Chcete-li nakonfigurovat nohu, musíte na ni kliknout levým tlačítkem myši a v okně, které se objeví, vybrat GPIO_Output. Pokud je MK příliš malý, můžete kolečko otočit a zvětšit.)))

Dalším krokem je úprava taktování MK. Faktem je, že STM32 je v této záležitosti velmi nejasný. Na rozdíl od AVR má STM32 na vstupu quartz s frekvencí 4 až 32 MHz a na sběrnicích jej lze přetaktovat na 48 MHz. Uvnitř MK je velmi složitý systém hodin, ale na pomoc nám opět přichází STM32CubeMX. Přejděte na kartu Konfigurace hodin a nakonfigurujte ji jako na obrázku níže.

To je vše. Klikněte na ikonu ozubeného kola nahoře.

Objeví se okno jako toto.

A tady jsem zapomněl říct. Stáhněte a nainstalujte si IAR pro sebe. Lze jej stáhnout od úředníků, ale snížit množství kódu nebo jej lze nalézt v torrentech. Nebo pokud máte hodně peněz navíc, můžete si zakoupit licenci. No, myslím, že mnozí budou následovat cestu s CodeVisionAVR. Obecně to nechávám na vašem uvážení. Mám verzi 7.40. Vraťme se ke kostce. V okně pojmenujte projekt, ale pouze latinkou, IAR nemá ráda ruská písmena v cestách. A určete, kam bude projekt uložen. V okně IDE musíte vybrat (a je to standardně) EWARM. Klepněte na tlačítko OK. Program se zamyslí a poté zobrazí okno, jako je toto. Bla bla bla. Obecně klikněte na otevřít projekt (pro ty, kteří jsou v nádrži, prostřední tlačítko).

Okno zmizí a místo něj se spustí IAR a náš projekt. Vlevo přejděte na Aplikace->Uživatel a spusťte main.c. Tato hromada kódu je to, co pro nás STM32CubeMX vygeneroval.

A co teď s tou hrůzou dělat? Ale k tomu potřebujeme celou sérii článků))) A teď už jen najdeme tento kus kódu.

Toto je náš jediný tok. V těle pro smyčku(;;) odstraníme jedinou funkci osDelay(1); a místo 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);

Báječné. Nyní stačí kliknout na tlačítko se zelenou šipkou vpravo nahoře a počkat na kompilaci a stažení.

Pokud je vše v pořádku a bez chyb, pak program sestaví celý projekt, vytvoří vše potřebné a nahraje firmware do MK. Poté přejde do režimu ladění. Tady je. Sen muže AVR. Máte-li neodolatelnou touhu jej používat, pak stačí jít krok za krokem na hardware, řádek po řádku. A pokud chcete vidět, jak program funguje, pak stiskněte křížek vlevo nahoře a užijte si blikání LED diody.

To je vše. Mikrokontroléry lze zakoupit za nejnižší cenu, až 78 rublů za kus v obchodě ChipResistor. No, pokud to chcete levněji, existuje i malý velkoobchod. Od 35 kusů již za 50 rublů.
Projekt pro DipTrace.
A samozřejmě video.


host 31.12.15 10:35

Nedávno jsem chtěl udělat frekvenční měřič na ATMEGA16 plus externí 8bitový čítač na 74 logice, nebyl dostatečně rychlý.Moje hlava nezvládá zápis v assembleru, oplotit externí čítač 16bity je oříšek ass.AVR je minulé století,ne levný řadič.Podpořím autora,AVR je Etapa pominula,koupil jsem i čip stm32f100 plus čip adaptéru USB CP2103,brzy to AVR všichni vzdají.

Alexey 31. 12. 2015 12:26

Nesouhlasím. Přesto se Arduino stále vyvíjí a mnozí jsou na něm hákliví, a to druhé zase funguje na AVR. Přejít na STM je jako přejít na další úroveň. Takříkajíc od školky do školy.

ANONYMNÍ 12.02.16 10:44

AVR a STM32 jsou procesory, které si navzájem nekonkurují. Váš talíř neobsahuje nejdůležitější parametr - to je proudový odběr!! A při pohledu na ně můžete uronit slzu. Atmega 328 - – Aktivní režim: 0,2 mA – Režim vypnutí: 0,1 µA – Úsporný režim: 0,75 µA (včetně 32 kHz RTC) STM32F030K6T6 48 MHz - Aktivní režim: periferní zařízení zapnuto 23,1 mA periferie: vypnuto mA1 0,048 mA STM32 nemilosrdně spotřebovává elektřinu - zhruba 100krát více než AVR. Zařízení STM32 nelze napájet z baterie. Ale AVR budou fungovat měsíce. Je tedy těžké vzdát se AVR. Hodně štěstí všem.

Alexey 12. 2. 2016 10:54

A nikdo nenavrhuje, abychom opustili AVR. Jen ukazuji rozdíl na periferii. Stále udržuji knihovnu AVR a stále mám ATMega8A jako svůj hlavní MCU.

Sergey 24.02.16 18:02

Podle mého názoru je nějak zvláštní srovnávat čerstvý STM32 s vysloužilým AVR. Pokud chcete porovnat STM32 s regulátory ATMEL, pak je porovnejte s rodinou ATSAM, ale ne s AVR.

Andrej 24.02.16 18:06

Kdo je tento důchodce? AVR žije a bude žít kdoví jak dlouho. A při pohledu na tabulku je podle mě srovnání spíše na periferii, a ne na architektuře.

Alexey 24.02.16 19:04

Tak to začíná. Pojďme nyní probrat AMD a Intel.

Sergey 24.02.2016 22:02

Na hubu jeden „expert“ psal, že AVR nemá paralelní sběrnici pro připojení standardního LCD, ale STM32 ano...

Alexey 24.02.16 22:36

Co znamená standardní LCD? Jde o FSMC? Nejde tedy jen o displej, ale také o paměť. Prostě paralelní autobus. Má to i AVR, třeba Mega8515. SRAM k němu lze připojit přes latch registr.

Sergets 25.02.16 06:24

Alexey, o čem to mluvím?! Zdá se, že se ani nesnažíte pochopit význam mých zpráv.

Alexey 25.02.16 09:38

No a jaký má smysl srovnávat dva stejné mikrokontroléry od různých firem? Oba jsou na jádru ARM. Pokud jste opravdu vybíraví, pak opravdu musíte porovnat AVR s STM8. Pak jsem se držel blízkosti periferie, tvarového faktoru a ceny. A prostě jiná architektura.

Adlan 03.06.16 17:40

Ahoj. Pomozte, prosím, kdo může. Instalováno Nejnovější verze Kuba 4.15, knihovny F1 1.4.0. Vytvořený prázdný projekt v EWARM se nezkompiluje - je tam více než sto chyb. Co by to mohlo být? Děkuji [e-mail chráněný]

Alexey 6. 3. 2016 20:48

Adlane, první věc, kterou musíte udělat, je nahrát projekt, který se nezkompiluje.

Doc 18. 7. 2016 21:51

"Je pravda, že AVR se může pochlubit Arduinem a jednoduchým programováním." ČÍM se může chlubit? ;D

Alexey 19.07.2016 11:41

To je hloupé přirovnání. Za prvé, STM má analog Arduina s názvem nucleo. Programy se píší v online IDE přímo přes prohlížeč. Ale pokud výhody kamene osobně, pak. Pracovní frekvence jádra je 72 MHz, o takové rychlosti si AVR nemohlo ani zdát. Samozřejmě, že když blikneš LEDkou, tak v tom není rozdíl, ale když spustíš osu a hromadu periferií, tak to AVR odfoukne. Bitová kapacita, 32 je daleko od 8. Periferie na STM mohou obsahovat 3 I2C, 3 SPI, 6 UART, USB, CAN, Ethernet. Téměř vše má možnost přemapovat, tedy přenést na jiné nohy mk. Nechybí ani DMA, jedná se o nezávislý koprocesor pro práci s periferiemi. Takže přerušení AVR nervózně kouří na vedlejší koleji. K dispozici je hardwarové SDIO plnohodnotnou práci s CD kartami, a ne berlička ISP v AVR. Obecně je toho tam mnohem víc, ale největším kamenem v zahradě AVR je odolnost proti hluku. Knokautovat AVR kabelem vedoucím poblíž od elektromotoru je oříšek, ale STM je potřeba vyzkoušet. Takže bych nedoporučoval být s Arduinem sarkastický.

host 8/11/16 23:27

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

Alexey 8/12/16 08:35

Měli jsme zpoždění, jako před pěti lety.

Vladimír 17.08.16 22:56

Alexeji! V lednu 2016 koupil Microchip Atmel za 3,56 miliardy dolarů. Jakých 5 let?

Alexey 18.08.2016 10:30

To je de iure, ale de facto to trvá už od roku 2008. Takže jsem opravdu udělal chybu, ne před 5 lety, ale před 8 lety.))))

Vladimír 18.08.16 23:53

Alexey! Začal jsem přecházet na stm32! A pokud jde o spotřebu v autonomním režimu, radí netaktovat vše, pak se odběrový proud sníží.

Oleg 09.11.16 22:31

V datashetu na STM jsem nenašel grafy spotřeby CLK systémových hodin jako u AVR - a podle těch desek, které tam jsou, STM32 vyloženě ztrácí jak v normálním režimu, tak v Idle režimu. Jo a tento STM32 nemá takt 72 MHz - jen 48 max, toť vše, takže i s 32 bity 8 beatnik AVR - to vychází lépe a mimochodem výrobce v datasheetu nenapsal kolik hodinové cykly ve strojovém cyklu STM32, který má, takže pokud se ukáže, že je to 2 hodinový cyklus oproti 1 pro AVR - pak uvažte, že 48/2 = 24 skutečných MHz - téměř totéž jako 20 MHz pro AVR. Otázka tedy zní – kde je ten zázrak tohoto STM32, o kterém všichni mluvíte?

ANONYMNÍ 9.11.16 23:03
Alexey 11/10/16 00:23

Ani se nechci hádat. Co je lepší Intel nebo AMD? Nebo Žiguli nebo Volha? STM má hardwarové USB, CAN, Ethernet, SDIO a hromadu dalších periferií, o kterých si AVR může nechat jen zdát. Nakonec je tu DMA jako nezávislý koprocesor s přímým přístupem do paměti, před kterým všechna AVR přerušovaná nervózně kouří na vedlejší koleji. Například první série má na palubě 3 UART, 2 SPI, 3 I2C. Existuje přemapování portů a nemusíte se starat o to, jak desku rozebrat. Pokud rádi pracujete s AVR, pak pracujte, kdo vás obtěžuje. Dodnes dělám mega osminky pro malé projekty a nestěžuji si. Ach ano, přilepte AVR ke startéru a sledujte, jak mu rušením odstřelí hlavu. AVR nemá ochranu proti EMI. Proto byly PIK vždy instalovány do autoalarmů, protože AVR v takových podmínkách umírá. Proč se hádat, je to mrtvé číslo.

Cornet 27.11.16 21:22

No, mimochodem, na STM32 už je Arduino. To je Amperka a všelijaké Espruino v JS) Navíc, pokud Microchip bral Atmel, no tak je našroubujte

Alexey 27.11.16 21:44

Název Espruino paroduje Arduino, nejslavnější hobby platformu té doby, ale Espruino není kompatibilní s klasickým Arduino Uno ani mechanicky, ani programově.(citace Amperky)
Taky mám Nucleo desku a ta také nemá nic společného s Arduinem, kromě samotné geometrie desky)))
Obecně v podstatě používám MK, který je vhodný pro aktuální úkol.

Andrej 20.12.16 22:50

Kdo rád přeplácí: vyplatí se attiny2313-20 - 2Kb-flash /128bit-ram/16bit_ timer -1/8bit_ timer -1 =2.1$ vs stm32f103c8t6 64Kb-flash/20Kb-sram+ 16BIT časovač pro duální ovládání -channel PWM mode ) -4/ADC-2/72MHz CPU/=2.3$.Podle mého názoru je výroba měřiče impedance pro RLC obvod pomocí AVR téměř nemožná,nebo je tam 10 kamenů.Ale můžete to udělat s STM a FFT (pomáhá DMA).Zkoušel jsem to nějak udělat frekvenční měřič na Mega10 (přesnost 1 hertz) - prostě to nebylo dost rychlé (nebo nainstalovat externí 32bitový čítač s posuvným registrem - odkud jsou rozměry AVR jsem se vzdal před rokem, AVR je, jak se ukázalo, pro bohaté lidi.

Andrej 20.12.16 22:53

ANONYMOUS napsal – „A tady je další citát z popisu STM32 v ruštině – „...S
moment
přijímání
přeruší
před
začala
provedení
První
týmy
psovod
přeruší
je utraceno
pouze
dvanáct
cykly
hodiny
signál"

To je pravda, ale vynásobte dvě 32bitová čísla avr - jasně 8-10 hodinových cyklů!

Alexey 20. 12. 2016 23:31

Ano, už lituji, že tento halivar začal.))))

Alexandr 21. 12. 2016 0:27

Přečetl jsem si komentáře a zavzpomínal.
Dvě děti na pískovišti
Jeden duduka!
Za druhé, píp!
Za prvé, Duduka! (intonace hrozivější)
Za druhé, BIBIKA! (S ještě výraznější intonací)
První DUDUKA! (Už křičí)
Druhá BIBIKA!!! (skoro pláč)
....
Tato bitva skončila, oba stojí a pláčou, jeden hlasitěji než druhý.)))

Val 2. 10. 17 01:43

Jaká bude frekvence, pokud budete smyčkovat bez zpoždění?
zatímco (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

Tak rovnou integrujme notebooky do embedded systémů, jsou stokrát lepší než STM a těch periferií je tam prostě sakra hodně, už je Wi-Fi a bluetooth a ani programátoři nejsou potřeba, hned je monitor s klávesnice k napsání programu a jeho okamžitému spuštění a nejsou potřeba programátoři a debuggery.
Je to jako koupit si bagr pro osobní použití na chatě, abyste NĚKDY vykopali několik půlmetrových děr.
Dávat STM do termostatu, hodin, vah, no, podle mě to není normální. Mimochodem ano, co takhle energeticky nezávislá paměť, tak dělám termostat, nastavuji teplotu, pak světla zhasnou, no a co, nastavení se ztratí. Ale ve vestavěných systémech, které je nutné jednou nakonfigurovat pro další provoz, musí být hodnoty uloženy navždy

Alexey 6. září 2017 8:25

Například čip-dip STM32F030F4P6 stojí 48 rublů a přímý analog ATtiny2313 stojí 98 rublů. Myslím, že na stavbu termostatu bude stačit kterýkoli z nich. A kompenzace paměti pro STM může být v jakémkoli teplotním senzoru. Ano, alespoň ve stejném DS18B20. Co se týče notebooků, každý terminál pro přijímání plateb má nainstalovaný PC s OS a monitorem. Takže existují i ​​takové systémy. Při výběru MK v první řadě vybírejte ten, který je levnější. Pokud je toto koníček, pak si můžete koupit Arduino, abyste se neobtěžovali s pájením, a když se plánuje uvedení systému do výroby a výroba ve stovkách, pak se počítá každá koruna. A přeplatit 50 rublů za MK, když je jeho cena 48, je nedostupný luxus.

Ruslan 17.06.2017 21:46

Alexey, proč jste si vybral programovací prostředí IAR?
Které prostředí je pro nováčka lepší zvolit (aby bylo mnoho rad jako v Studio Atmel)?

Alexey 17.06.2017 22:07
Ruslan 17.06.2017 22:56
Pokud jsem nevypadal „špatně“, dejte mi odkaz, kde se mohu podívat nebo si přečíst, jak na to!
Ještě lépe natočte video, myslím, že mnoho začátečníků (nejen) bude mít zájem se na něj podívat!
Díky předem!
Alexey 8/05/17 10:19
Ruslan 22.11.17 12:17

Měl jsem na mysli toto https://www.youtube.com/watch?v=wOIlhRd-vN8
5-7 minut!!!

Ruslan 22.11.17 12:18

Alexey, prosím, řekněte mi, jak pracovat s „výčty“, jinak takové informace nikde nejsou a ve vašich videích „C pro nejmenší“ také není, ale opravdu to potřebuji!
Když jsem si hrál s AVR, nikdy jsem neviděl takový zázrak jako výčet, ale teď mě zajímají STM a je jich hodně! A chybí informace, jak s nimi pracovat!
Zde je příklad ze skutečného kódu:


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

Kde je výčet StatusCode:


enum StatusCode: byte (
STATUS_OK , // Úspěch
STATUS_ERROR , // Chyba v komunikaci
STATUS_COLLISION , // Byla zjištěna kolize
STATUS_TIMEOUT , // Časový limit v komunikaci.
STATUS_NO_ROOM , // Vyrovnávací paměť není dostatečně velká.
STATUS_INTERNAL_ERROR , // Interní chyba v kódu. Nemělo by se to stát ;-)
STATUS_INVALID , // Neplatný argument.
STATUS_CRC_WRONG , // CRC_A neodpovídá
STATUS_MIFARE_NACK = 0xff // MIFARE PICC odpověděl NAK.
};

Tohle je z knihovny Arduino (C++), ale Keil na to nadává!
Jak správně zapsat návrat výčtové funkce?

Ruslan 22.11.17 12:29

A jak deklarovat jeden z argumentů ve funkci, která je výčtem:


void PCD_WriteRegister(reg. registr PCD, hodnota bajtu);

Kde je uveden PCD_Register:


enum PCD_Register: byte (
// Stránka 0: Příkaz a stav
// 0x00 // vyhrazeno pro budoucí použití
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, jak tomu rozumím, je výčet, ale nikde v kódu není deklarován a nechápu, odkud se vzal!
Pročetl jsem spoustu stránek na internetu a našel informace, že tyto výčty lze nahradit definicemi, ale přesto jsem chtěl vědět, jak s nimi pracovat!!!

Ruslan 22.11.17 12:35

Těším se na vaši odpověď!
Možná natočte video o tom, jak s nimi pracovat, aby to fungovalo i pro ostatní, myslím, že to video bude velmi užitečné, protože žádná taková videa nejsou (alespoň já jsem je nenašel)!

Dmitry 28.11.17 22:02

"jednoduché programování"

Zajímavé varhany pro programování kontrolérů. Obecně není jasné, jak bylo možné srovnávat 32bitové s 8bitovými. Jako Porsche Cayenne se Zarporožcem.

Alexey 29. 11. 2017 10:24

Můžete porovnávat, můžete. Jen je potřeba vzít v úvahu, že v tomto srovnání je Porsche levnější než Záporožci. Co se týče urologie, je to pikantnější. Tak to nebudu opravovat.

Konstantin 23.12.17 00:06

Ruslane, nechápu, jak hledáš a nic nenacházíš (zřejmě nehledáš). To jsou úplné základy jazyka C (nejen pro MK, ale i pro počítače). Přečtěte si knihu od Kernighan a Ritchieho, vše C je tam perfektně popsáno.
A na vaše otázky vám nikdo neodpoví, to je základní věc.

ANONYMNÍ 11.02.18 16:27

Proč srovnáváš 32bitový ST MK s 8bitovým Atmelem. Hloupé přirovnání. Je to ekvivalentní srovnání 32bitového Atmel AT91SAM s 8bitovým STM8, i když vezmeme v úvahu, že Atmel má 32 ještě výkonnějších vybíječů

Alexey 13.02.2018 12:18

Protože v době psaní tohoto článku nebyly 8pásmové ST v prodeji a mega a STM32 jsou cenově stejné.

STM32_Dev 19.06.2019 13:59

No, AVR potřebuje 4-5 hodinových cyklů, aby udělal to samé!!! Prostě. A tady se opět ukazuje, že AVR je udělaný lépe než STM32 s jeho nafouknutými hodinami a STM32 nemá uvnitř EEPROM jako AVR

Takt AVR na 16 MHz - 1/16000000 = 0,0000000625 s = 62,5 ns * 5 taktů = 312,5 ns.
Takt ARM na 48 MHz - 1/48000000 = 0,0000000208 s = 20,8 ns * 12 taktů = 250 ns.

Zdá se, že atmega muzea počítá svých 5 hodinových cyklů déle než 12 hodinových cyklů STM32)))

Nemá STM32 eprom? Tak určitě? STM32L152 - 8kB eprom! A co atmega? 512 bajtů? Ach tolik!!! ani nevim co tam napsat. Představme si... mmm... 16 proměnných po 4 Bytech)) No, mezi ovladači je to jen bouřka))

SIM31 30. 6. 2019 19:29

Co se týče spotřeby, můžete také porovnávat, nová atmega a attiny jsou velmi ekonomické.
A všechno má své využití. Pokud potřebujete napájení, vezměte si Raspbery Pi 4 a nebojte se, Python má ještě více možností, dokonce si můžete nastavit plnohodnotný webový server, dokonce spustit Quake 3D.
Pokud potřebujete zpracovat datové toky, je zde pls (viz projekt "Mars Rover" "Mars Rover 2")
Autor má spoustu pozitiv, ale fakt, že Arduina je živější než všechno živé, znamená, že ne všechno je tak jednoduché.


Po mnoho let radioamatéři používají osmibitové mikrokontroléry rodiny PIC a AVR. Jsou oblíbené díky nízké ceně, podrobné dokumentaci, snadnému programování a snadné instalaci. Poměrně často však existují případy, kdy výkon takového mikrokontroléru nestačí k vyřešení úkolu. Nejjednodušším příkladem je měřič frekvence nebo generátor signálu na mikrokontroléru, kde maximální naměřená nebo generovaná frekvence přímo závisí na rychlosti zpracování nebo výstupu informace.

Kromě rychlosti mají osmibitové mikrokontroléry i další omezení, například řada modelů AVR má pouze jeden hardwarový sériový port, který neumožňuje přijímat informace z externího zařízení a současně odesílat výsledky jejich zpracování spotřebiteli. Nemluvě o tak „banálních“ věcech, jako je zobrazování informací na grafickém ukazateli, které vyžaduje velké prostředky jak rychlosti, tak paměti. Po analýze řady takových omezení přišel autor s myšlenkou přejít na mikrokontroléry rodiny STM32.

Uvažujme například dva mikrokontroléry stejné cenové kategorie - STM32F103C6 a ATmega328P.

stůl 1

Typ mikrokontroléru

Velikost procesoru

Rozteč olova, mm

Hodinová frekvence, MHz

Velikost paměti FLASH. KB

Množství paměti RAM, kB

Číslo USART

Počet 16bitových časovačů

Počet I/O linek

Přibližná cena, rub.

Jejich srovnávací parametry jsou uvedeny v tabulce. 1. Výsledky srovnání jsou dokonce poněkud překvapivé. 32bitový mikrokontrolér je nejen výkonnější než osmibitový mikrokontrolér téměř ve všech ohledech, ale je také levnější. Připájet doma mikrokontrolér s roztečí pinů 0,5 mm samozřejmě není tak jednoduché. Naštěstí to ve většině případů není vyžadováno – na trhu je mnoho typů vývojových desek s mikrokontroléry rodiny STM32, dostačujících pro různé aplikace. Pojďme se na ně podívat podrobněji.

STM32F4-DISCOVERY

Tato deska (zobrazená na obr. 1) je možná nejvýhodnější pro začátečníky studující mikrokontroléry STM. Za prvé, má velkou sadu periferií. Kromě mikrokontroléru deska obsahuje mikroelektromechanický akcelerometr, mikrofon, audio DAC, dva USB konektory, tlačítko a čtyři LED diody.

Piny mikrokontroléru jsou vyvedeny na kontaktní podložky pro montáž kolíkových konektorů na levém a pravém okraji desky, což usnadňuje připojení všech nezbytných externích zařízení k nim. Mikrokontrolér STM32F407VGT6 osazený na desce má velmi dobré parametry: 1 MB paměti FLASH, 192 KB RAM a taktovací frekvence 168 MHz.

Konečně je deska vybavena vestavěným debuggerem ST-LINK/V2, kterým lze ladit programy nejen na mikrokontroléru na desce, ale i na mikrokontrolérech stejné rodiny umístěných na jiných deskách. Přepínání na ně se provádí pomocí odnímatelného jumperu a SWD konektoru.

Cena desky je asi 800 rublů, což lze považovat za docela přijatelné.

Vývojová deska STM32F103RBT6

Další zajímavou možností je vývojová deska s mikrokontrolérem STM32F103RBT6 (obr. 2).

Je sice o něco slabší než ten osazený na předchozí desce – taktovací frekvence 72 MHz, 128 KB FLASH paměti a 20 KB RAM, ale periferní zařízení jsou velmi zajímavá. K dispozici je dotykový TFT displej s rozlišením 320x240 bodů a úhlopříčkou 2,8", vestavěný USB port pro výměnu informací s počítačem, slot pro paměťovou SD kartu, 32768 Hz quartz hodiny, přihrádka na baterie hodin reálného času a konektor ST-LINK pro ladění programů.

Cena této desky je také asi 800 rublů, ale je třeba poznamenat, že nemá vestavěný debugger. Chcete-li stáhnout programy, musíte si buď zakoupit samostatný debugger ST-LINK, nebo místo toho použít desku STM32F4-DISCOVERY popsanou výše.

Javor Mini

Vnější podobnost této desky (obr. 3) se známými moduly Arduino je zarážející. A to není náhoda.

Deska Maple Mini byla navržena jako náhrada za Arduino Nano. Programovací jazyk a vývojové prostředí pro rodinu mikrokontrolérů AVR instalované v Arduinu byly přizpůsobeny rodině STM. Podrobné informace o programovacím jazyce Maple IDE a vývojovém prostředí najdete na http://leaflabs.com/docs/maple-q uickstart.html.

Vývojová deska má mikrokontrolér STM32F103CBT6 běžící na 72 MHz, 128 KB paměti FLASH a 20 KB RAM, což je nepochybně více než kterýkoli modul Arduino. A ještě větší výhodou je, že vývojové prostředí zůstalo prakticky nezměněno.

Samostatně poznamenáváme, že i přes svou miniaturní velikost poskytuje Maple Mini velmi rozmanitá periferní zařízení: 34 I/O linek, dva kanály rozhraní SPI a dva I2C, tři sériové porty. To umožňuje jeho úspěšné použití v různých amatérských vývojech. Maple Mini lze díky malým rozměrům zabudovat přímo do vyvíjeného zařízení.

Originální desku Maple Mini lze zakoupit za 35 dolarů na stránkách jejích vývojářů. Poštovné bude stát dalších 5 dolarů. Kopie desky vyrobené v Číně bude stát polovinu.

Software

Existuje několik možností pro vývojová prostředí, která lze použít k přípravě programů pro mikrokontroléry řady STM32:

Komerční IAR Embedded Workbench, AtollicTrueSTUDIO, Keil atd. Tyto plnohodnotné produkty jsou poměrně drahé, s cenou licence od 1000 eur, ale existují i ​​bezplatné demo verze s omezením objemu vyvíjeného programu; jednoduché projekty jsou docela dost;

Bezplatný Eclipse s kompilátorem ARM-GCC vyžaduje před použitím netriviální konfiguraci kompilátoru. Jediným plusem pro dnešek je schopnost pracovat nejen ve Windows, ale i v Linuxu;

Zdarma CooCox IDE (CoIDE) založené na stejném editoru Eclipse. Načítá a ladí programy přes ST-LINK. Na rozdíl od předchozí možnosti CoIDE nevyžaduje žádné speciální nastavení a funguje ihned po instalaci. Tato možnost je nejpohodlnější a vyplatí se ji využít.

Pomocí CooCox IDE vytvoříme ukázkový program pro desku STM32F4-DISCOVERY, který implementuje klasické LED blikání prvního programu pro libovolný mikrokontrolér. Na desce STM32F4-DIS-COVERY jsou čtyři LED, jsou připojeny na piny PD12-PD15 mikrokontroléru. Necháme je střídavě blikat.

Krok 1. Spusťte vývojové prostředí CoIDE a vytvořte projekt. Z rozevíracího seznamu zobrazeného na Obr. 4, vyberte mikrokontrolér STM32F407VG.

Krok 2. Jak je znázorněno na Obr. 5, vyberte komponenty, které budou použity v projektu. Mezi hlavní patří GPIO (input-output), C Library (základní funkce jazyka C) a M4 Core (funkce jádra procesoru). Když komponentu aktivujete, CoIDE automaticky zkopíruje potřebné soubory do složky projektu, což je velmi výhodné.

Krok 3. Zadání textu programu. Je poměrně krátký a je uveden v tabulce. 2.

Jak vidíte, vše je jednoduché a zřejmé. Ti, kteří mají napsané programy pro mikrokontroléry AVR, se pravděpodobně dočkají známých návrhů - inicializace portů udávajících směr (vstup nebo výstup), hlavní smyčka, ve které se provádějí potřebné akce. Obecně syntaxe programu plně odpovídá jazyku C, ke kterému je literatury více než dost. Na internetu je také spousta článků o programování pro STM32. Mnoho příkladů je dodáváno s vývojovou deskou a lze je také použít jako vzorky.

Po zadání textu programu kliknutím na tlačítko obrazovky "Download to flash" se program stáhne do mikrokontroléru. LED na desce začnou blikat. Samostatně stojí za zmínku možnosti ladění - bod přerušení lze nastavit kdekoli v programu, program můžete spustit krok za krokem a prohlížet hodnoty proměnných.

Tento příklad samozřejmě není ideální. Můžete například použít přerušení časovače pro ovládání blikání LED, což uvolní hlavní smyčku programu pro další úkoly. Kdo chce, může na to přijít sám.

Závěr

Obecně po prvním seznámení zanechaly mikrokontroléry rodiny STM32 velmi příjemný dojem. Ukázalo se, že vše není tak složité a pohodlí vývojového prostředí, proces ladění a velké množství standardních funkcí dokonce trochu připomnělo přechod z MS DOS na Windows - obecné body se zdají být stejné, ale vše je mnohem pohodlnější a funkčnější.

Ale hlavní nevýhodou této rodiny pro amatérský vývoj je stále příliš malá rozteč pinů. Navrhnout a připájet doma desku s roztečí pinů 0,5 mm je velmi netriviální úkol. Ale za současné ceny jsou ladicí desky s již namontovanými mikrokontroléry docela dostupné pro každého radioamatéra.

Vyplatí se vše převést na STM a 32bitovou architekturu? Samozřejmě že ne. Jsou úkoly, na které ATtiny zcela postačí. Ale například pro analýzu spektra v domácím přijímači SDR nebo pro příjem a přenos velkého množství informací po síti je mnohem efektivnější okamžitě použít výkonný mikrokontrolér, abyste nenarazili na nedostatek paměti nebo výkonu, když vylepšení zařízení.

Na základě jádra Cortex si začali aktivně získávat oblibu mezi profesionálními i začínajícími vývojáři zařízení na mikrokontrolérech. Důvodů je několik:
- nízká cena ve srovnání s konkurencí;
- velké množství vestavěných rozhraní;
- snadné programování a vysoká spolehlivost.
Je tu ale také jeden důležitý nedostatek – všechny STM mikrokontroléry se nevyrábějí v DIP obalech, což začátečníky často jednoduše vyděsí, protože vyrobit doma desku s dráhami menšími než 0,3 mm je problematické. Tento stav vedl k tomu, že se na trhu objevilo velké množství ladicích desek, a to jak od ST Microelectronics (Discovery), tak desek vyrobených společnostmi třetích stran (Olimex, Pinboard). Discovery jsem si vybral ze tří důvodů:
- relativně nízká cena (desku lze zakoupit od 300 rublů);
- dobré zpracování (i když existují určité stížnosti na kabeláž, ale nejsou tak výrazné);
- mnoho zdrojů a příkladů je umístěno na webových stránkách výrobce;
- přítomnost vestavěného programátoru (nemusíte jej kupovat samostatně).
Účelem první lekce je pomoci začínajícímu vývojáři vybrat si ladicí desku a v budoucnu naučit základy programování.
Tak pojďme.

STM32F0DISCOVERY

Tato deska byla vydána v únoru 2012, aby přilákala vývojáře, kteří dříve používali 8bitové mikrokontroléry, čímž zaplnili tuto mezeru. Nemůžu o ní říct nic špatného ani dobrého. Běžná deska, levná, je skvělá pro začátek. Má následující vlastnosti:
- mikrokontrolér: STM32F051R8T6 (Cortex M0, 48 MHz, flash 64 KB, RAM 8 KB);
- vestavěný ST-link/V2, který lze použít odděleně od desky;
- napájení z USB nebo z externího 3/5V zdroje;
- 4 LED a 2 tlačítka;
- rozhraní: USART, SPI, I2C, HDMI;
- časovače 16 a 32 bitů;
- všechny výstupy jsou vyvedeny na dva jednořadé hřebeny.
Ve skutečnosti je taková deska již poměrně zastaralá a doporučuje se ji brát pouze na úplný začátek tréninku.

STM32VLDISCOVERY

Od předchozí desky se liší pouze procesorem STM32F100RBT6B (Cortex M3, 24 MHz, flash 128 KB, RAM 8 KB) a rozložením periferních hřebenů. Stejně jako výše zmíněný je vhodný pro začínající vývojáře. Víc k ní není co říct.

STM32LDISCOVERY

STM32LDISCOVERY je důstojnou evolucí předchozí desky. Zde je to, co je na něm zajímavé:
- mikrokontrolér STM32L152RBT6 (Cortex M3, 32 MHz, flash 128Kb, RAM 8Kb, EEPROM 4Kb)
- rozhraní: USB, USART, SPI, I2C;
- 8 časovačů;
- 24kanálový 12bitový ADC;
-12bitový DAC;
- hodiny reálného času;
- LCD ovladač 8x40
- vestavěný ST-link/V2.
Na desce jsou nainstalovány následující položky:
- LCD displej 24x8;
- 4 LED diody;
- 2 tlačítka;
- dotyková klávesnice;
- 2 jednořadé hřebeny s volnými vývody.
Samostatně bych řekl o USB: řadič podporuje USB 2.0 plnou rychlost, režim hostitele a zařízení, což je u MK této třídy zřídka vidět.
Deska je ve skutečnosti nejlepší volbou pro práci s jádrem Cortex-M3, takže si ji můžete klidně vzít, protože cena je nízká.

STM32F3DISCOVERY

STM32F3DISCOVERY patří k další generaci vývojových desek od STM a má následující vlastnosti:
- mikrokontrolér STM32F303VCT6 (Cortex M4, 72 MHz, flash 256 KB, RAM 48 KB)
- hodiny reálného času;
- vestavěný ST-link/V2;
- 13 časovačů;
- 12kanálový ovladač DMA;
- 4 ADC;
- 4 operační zesilovače;
- rozhraní: CAN, USB 2.0, USART/UART, SPI, I2C;
- 87 GPIO linek.

- vlastní USB port;
- 3osý akcelerometr a 3osý geomagnetický senzor v jednom pouzdře;
- 3osý gyroskop;
- 10 LED diod;
- 2 tlačítka;
- 2 dvouřadé hřebeny.
Velmi zajímavá deska, mnoho příležitostí k experimentování. Obecně platí, že názor na něj zůstává dobrý, ale jeho zaměření na sledování fyzického stavu a polohy značně omezuje prostor pro experimentování, i když si rozšiřující desku můžete snadno vyrobit sami.

STM32F4DISCOVERY

S touto deskou jsem měl možnost pracovat nejvíce a líbila se mi více než ostatní – její komplexní zaměření ji ovlivnilo.
Zde je o co jde:
- mikrokontrolér STM32F407VGT6 (Cortex M4, 168 MHz, flash 1 MB, RAM 192 KB)
- vestavěný ST-link/V2;
- časovače;
- DMA ovladač;
- ADC/DAC;
- rozhraní: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
Deska obsahuje následující periferie:
- vlastní USB port;
- 3osý akcelerometr;
- 8 LED diod;
- 2 tlačítka;
- 2 dvouřadé hřebeny;
- audio DAC se zesilovačem třídy D;
- všesměrový digitální mikrofon.

Jak jsem psal výše, tato deska se pro mě stala hlavní, potěšila mě schopnost práce se zvukem a akcelerometrem.

Další lekce budou založeny na této desce.

Souhrn.
Pokud se rozhodnete začít pracovat s ladicími deskami STM, pak vám doporučuji vzít STM32F4DISCOVERY, podle mého názoru má největší funkčnost. Další články budou založeny konkrétně na práci s ním. V blízké budoucnosti budou napsány články na tato témata:
- práce s GPIO, časovači, přerušeními atd.;
- práce s UART, SPI, I2C a 1-wire rozhraními s využitím příkladů reálných zařízení, jako jsou displeje, GPS a GSM moduly, teplotní čidla, komunikace s počítačem přes RS-232 a mnoho dalšího.
Konečným cílem tohoto cyklu je vytvořit rozšiřující desku pro STM32F4. Veškerý firmware a schémata zapojení budou veřejně dostupné.