Delo z LCD indikatorjem na razvojni plošči STM32L-Discovery. Usposabljanje na STM32 za blok frekvenčnega delilnika mase

Splošne informacije

Razvojna plošča STM32L-Discovery ima zaslon s tekočimi kristali (LCD) s šestimi 14 segmentnimi znaki, 4 dvopičji (Dvopičje), 4 pikami (DP), 4 črtami (Bar). Vsi segmenti so združeni v skupine COM0, COM1, COM2, COM3 po 24 segmentov. Vsaka skupina ima svojo ločeno "skupno žico".


Mikrokrmilnik STM32L152RBT6 je nameščen na plošči za odpravljanje napak. Mikrokrmilnik ima vgrajen LCD krmilnik, ki krmili enobarvne LCD indikatorje.
LCD krmilnik:

  1. Omogoča nastavitev frekvence posodabljanja (hitrost sličic - pogostost, s katero se posodabljajo informacije na LCD-prikazovalniku)
  2. Podpira statični in multipleksni nadzorni način
  3. podpira namestitev programske opreme kontrast
  4. Omogoča več nadzornih nivojev napetosti (do štiri)
  5. Uporablja dvojno medpomnjenje, ki omogoča posodobitev podatkov v registrih LCD_RAM ​​​​kadar koli med izvajanjem programa, ne da bi pri tem kršili celovitost prikazanih informacij

Pomnilniški registri krmilnika LCD

Mikrokrmilnik STM32L152RB ima posebne registre LCD_RAM, v katerih shranjene informacije ustrezajo skupini segmentov COM0 - COM3. Vsaka skupina ustreza dvema 32-bitnima registroma. To število registrov omogoča, da mikrokrmilnik krmili LCD c velik znesek segmentov kot tistih, ki so nameščeni na razvojni plošči.

Za krmiljenje LCD s 176 segmenti se uporabljajo 4 skupine COM0 - COM3 po 44 segmentov, za krmiljenje LCD s 320 segmenti pa 8 skupin COM0 - COM7 po 40 segmentov.



Razvojna plošča STM32L-Discovery uporablja LCD s 96 segmenti, razdeljenimi v 4 skupine COM0 - COM3 po 24 segmentov.


LCD na razvojni plošči STM32L-Discovery je povezan tako, da se uporabijo biti S40, S41 drugega registra LCD_RAM ​​v vsaki skupini in biti S0-S27 prvih registrov LCD_RAM. Za zmanjšanje števila uporabljenih registrov bodo informacije iz bitov S40-S43 zapisane v proste bite S28-S31 z uporabo funkcije ponovnega preslikave.

Blok frekvenčnega delilnika

Frekvenčni delilnik (Frequency Generator) omogoča doseganje različnih hitrosti sličic na LCD-prikazovalniku v območju od 32 kHz do 1 MHz. Kot vir časovnega signala se lahko uporabi naslednje:
  1. Zunanji nizkofrekvenčni generator s frekvenco 32 kHz (LSE. Low speed external)
  2. Notranji nizkofrekvenčni generator s frekvenco 37 kHz (LSI. Low speed internal)
  3. Zunanji RF generator s frekvenčnimi delilniki 2, 4, 8 in 16 ter največjo frekvenco 1 MHz. (HSE. Zunanja visoka hitrost)
Za doseganje natančnega časovnega razporeda in zmanjšanje odmika napetosti enosmerni tok Skozi segmente LCD mora biti vir časovnega signala stabilen. Signal ure LCDCLK se pošlje krmilniku LCD. Frekvenca signala ure se razdeli glede na faktorje delitve, ki jih nastavijo biti PS, DIV registra LCD_FCR (Frame Control Register). Nastala frekvenca na izhodu bloka frekvenčnega delilnika se izračuna po formuli:

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

Hitrost sličic se izračuna po formuli:

F Okvir =f ck_div *dolžnost

Kjer je dajatev delovni cikel - razmerje med trajanjem impulza in njegovo periodo. Med enim okvirjem so informacije iz registrov LCD_RAM[x], LCD_RAM ​​itd. zaporedno prikazane na LCD-prikazovalniku. Za LCD, ki je nameščen na razvojni plošči, mora krmilnik LCD v enem okviru oddati informacije iz 4 skupin segmentov COM0 - COM3, zato bo trajanje krmilnega impulza za eno skupino 1/4 trajanja okvira, tj. dajatev=1/4.

LCD nadzor

Obstajata dva načina za nadzor LCD - način statičnega nadzora in način multipleksnega nadzora. Pri statični indikaciji je vsak segment indikatorskega bita povezan z izhodom mikrokrmilnika. V zvezi z LCD je na plošči za odpravljanje napak STM32LDiscovery potrebnih 6 * 14 = 84 pinov mikrokrmilnika (brez dvopičja, pik in črt). Zaradi uporabe tolikšnega števila pinov bo priklop drugih zunanjih naprav nemogoč. Mikrokontroler STM32L152RB ima 64 pinov. V načinu multipleksnega krmiljenja (dinamični način krmiljenja) se enaki segmenti indikatorskih števk združijo v skupine. Informacije so prikazane zaradi izmenične osvetlitve segmentov indikatorskih števk s frekvenco, ki jo človeško oko ne zazna.

Multipleksni nadzor omogoča nadzor velikega števila segmentov. Namesto ločenega krmiljenja vsakega elementa, jih je mogoče nasloviti po vrsticah in stolpcih (COM in SEG), s čimer se poenostavi krmilno vezje, ker vsak segment ne potrebuje svoje krmilne linije. Za vklop izbranega segmenta je treba nanj uporabiti potencialno razliko COM in SEG. Primer delovanja prve številke indikatorja (indikator prikazuje "1:"):


Prva številka indikatorja v času t 0


Prva številka indikatorja v času t 1


Prva številka indikatorja v času t 2


Splošni diagram povezovanja segmentov z zatiči LCD


Shema povezovanja pinov LCD na vrata mikrokrmilnika

Za linije SEG se uporablja krmilna napetost, katere število ravni je določeno s koeficientom prednapetosti. LCD na razvojni plošči uporablja način krmiljenja multipleksa z duty=1/4 in bias=1/3. Vrednosti dajatve in pristranskosti se nastavijo prek registra LCD_CR (kontrolni register) v bitih DUTY in BIAS.

Vadite

Konfiguracija vrat mikrokrmilnika

Za nadzor LCD-ja morajo biti vrata mikrokrmilnika ustrezno konfigurirana:
  1. Do izhoda
  2. Uporaba funkcije AF 11 Alternate
  3. Imajo izhodne frekvence do vrat 400 kHz
  4. Uporabite način delovanja push-pull
  5. Brez vlečnih uporov
Ko vrata delujejo v načinu alternativne funkcije, vmesni pomnilnik izhodnih podatkov vrat nadzirajo signali, ki prihajajo iz periferne enote. Datoteka glave stm32lxx.h knjižnice CMSIS vsebuje opis vseh perifernih registrov, kot tudi strukturo za dostop do njih.

Zatiči LCD so povezani z vrati GPIOA (PA1-PA3,PA8-PA10,PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3,PC6-PC11) mikrokrmilnika. Za delovanje LCD-prikazovalnika mora biti signal ure dobavljen izbranim vratom. Vrata GPIO mikrokrmilnika se taktirajo iz vodila AHB sistema RCC (Reset and Clock Control) - sistem za uro in ponastavitev. Signal ure se zagotovi z nastavitvijo ustreznih bitov v registru RCC_AHBENR (register za omogočanje periferne ure AHB).

Register RCC_AHBENR (slika prikazuje prvih 15 bitov)

Za vrata GPIOA, GPIOB, GPIOC morate nastaviti 1 na 0, 1, 2 bita registra.

Nato bom zagotovil kodo za zapisovanje informacij v register z uporabo bitne maske in šestnajstiških kod. Uporaba bitnih mask je bolj priročna, vendar delo s šestnajstiškimi kodami omogoča razumevanje bistva dela z registri.

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

Za prikaz načinov delovanja vrat se uporablja register GPIOx_MODER (register načina vrat GPIO) (x = A..H). Vsi registrski biti so združeni v skupine MODERy, kjer je y številka pina ustreznih vrat. Vrata morajo biti konfigurirana za alternativni način delovanja, tj. v skupini, ki je odgovorna za pin, nastavite vrednost na 10. Za vrata GPIOA morate konfigurirati pine 1-3,8-10,15, to je 1 na 3,5,7,17,19, 21,31 številk.


Registrirajte GPIOx_MODER (register načina vrat 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_MODER_MODER15_1); ali GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
Vrata mikrokrmilnika morajo biti preklopljena v način push-pull. Če želite to narediti, morate v registru GPIOx_OTYPER (register izhodne vrste vrat GPIO) nastaviti 1 v bitih, ki so odgovorni za nožice.


Register GPIOx_OTYPER (register izhodne vrste vrat 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); ali GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
Obe možnosti vplivata na izbrane žebljičke. (Za vrata GPIOA so konfigurirani nožice 1-3.8-10.15). Če morate vse zatiče vrat preklopiti v način push-pull, lahko v register zapišete naslednjo vrednost:
GPIOA->OTYPER = 0x0;
Za določitev frekvence izhoda informacij v vrata se uporablja register GPIOx_OSPEEDR (register izhodne hitrosti vrat GPIO). Vsi registrski biti so združeni v skupine OSPEEDRy, kjer je y številka pina ustreznih vrat. V tem delu je treba frekvenco nastaviti na 400 kHz, tj. v skupini, odgovorni za pin, nastavite vrednost na 00.


Register GPIOx_OSPEEDR (register izhodne hitrosti vrat GPIO)

GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR10 | GPIO_OSPEEDER_OSPEEDR15); ali GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Če morate nastaviti izhodno frekvenco vrat na 400 kHz za vse nožice, lahko vrednost zapišete v register:
GPIOA->OSPEEDR = 0x0;
Če želite onemogočiti vlečne in uporne upore za izbrane nožice, uporabite register GPIOx_PUPDR (register GPIO port pullup/pull-down). Vsi registrski biti so združeni v skupine PUPDRy, kjer je y številka pina ustreznih vrat. Če želite onemogočiti vlečne upore v skupini, ki je odgovorna za pin, nastavite vrednost na 00.


Register GPIOx_PUPDR (povlečni/povlečni register vrat GPIO)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR15); ali GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Če morate onemogočiti vlečne upore za vse nožice, lahko vrednost zapišete v register:
GPIOA->PUPDR = 0x0;
Za uporabo alternativne funkcije za vrata mikrokrmilnika sta dva registra GPIOx_AFRL (nizki register nadomestne funkcije GPIO), odgovoren za nizke nožice (0 do 7) in GPIOx_AFRH (visoki register nadomestne funkcije GPIO), odgovoren za visoke nožice (8 do 15) , so uporabljeni. Vsi registrski biti so združeni v skupini AFRLy in AFRHy, kjer je y številka pina ustreznih vrat. Vrata morajo biti konfigurirana za uporabo alternativne funkcije AF11, za to mora biti skupina, odgovorna za pin, nastavljena na 1011.


Register GPIOx_AFRL (nizki register nadomestne funkcije GPIO)


Register GPIOx_AFRH (višji register nadomestne funkcije GPIO)

Če želite to narediti, morate v registre zapisati naslednje vrednosti:
GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB; /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

AFR = 0xBBB0 – zapiše vrednost v register GPIOx_AFRL.
AFR = 0xB0000BBB – zapiše vrednost v register GPIOx_AFRH.

Nastavitve za ustrezne pine vrat GPIOB in GPIOC so narejene na enak način.

Nastavitev LCD krmilnika

Pri delu s krmilnikom LCD je treba, tako kot pri drugih zunanjih napravah, nanj dovajati signal ure. Signal ure se dovaja tudi sistemu za upravljanje porabe energije. Krmilnik in sistem za upravljanje porabe energije uporabljata vodilo APB1 za merjenje takta. Če želite omogočiti taktiranje v registru RCC_APB1ENR (register za omogočanje periferne ure APB1), morate nastaviti 1 v bitih 9 in 28.


Register RCC_APB1ENR (register za omogočanje periferne ure APB1)

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; ali RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
Za delovanje krmilnika LCD je treba določiti vir taktnih signalov. Vir je določen v registru RCC_CSR. Privzeto je pisanje v ta register onemogočeno. Zaščita pred pisanjem v registru RCC_CSR je odstranjena v registru za nadzor moči PWR_CR. Register RCC_CSR krmili vire takta krmilnika RTC in LCD
Zapisovanje v register RCC_CSR je omogočeno z nastavitvijo bita 8 registra PWR_CR na 1.


Register PWR_CR (register za nadzor moči PWR)

PWR->CR |= PWR_CR_DBP; ali PWR->CR |= 0x100; /* 0x100 =1 0000 0000 */
Če želite spremeniti vir ure krmilnika LCD (in tudi uro RTC), morate najprej ponastaviti vir ure z nastavitvijo bita RTCRST (nastavitev 1 na bit 23) v registru RCC_CSR (register nadzora/statusa).


Register RCC_CSR (kontrolni/statusni register)

RCC->CSR |= RCC_CSR_RTCRST;
Ali z zapisom vrednosti v register z uporabo operatorja “|=”, ker vrednost po
privzeti register se razlikuje od 0x0:
RCC->CSR |= 0x800000; /* 0x800000 = 1000 0000 0000 0000 0000 0000 */
Če želite izbrati nov vir ure, morate odstraniti bit RTCRST:
RCC->CSR &= ~RCC_CSR_RTCRST; ali RCC->CSR &= ~0x800000;
Kot vir signala ure je izbran zunanji nizkofrekvenčni generator. Za vklop generatorja v registru RCC_CSR morate nastaviti bit LSEON (nastavite od 1 do 8 bitov):
RCC->CSR |= RCC_CSR_LSEON; ali RCC->CSR |= 0x100; /* 0x100 = 1 0000 0000 */
Po vklopu generatorja traja nekaj časa, da se stabilizira. Pripravljenost generatorja se preveri s strojno nastavitvijo bita LSERDY v registru RCC_CSR:
medtem (!(RCC->CSR&RCC_CSR_LSERDY));
Izbira zunanjega nizkofrekvenčnega generatorja kot vira ure se izvede z nastavitvijo registra RCC_CSR na 01 v skupini RTCSEL:
RCC->CSR |= RCC_CSR_RTCSEL_LSE; ali RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
V LCD krmilnik, ki ga morate namestiti želeni način pristranskost. Če želite to narediti, morate v registru LCD_CR (kontrolni register LCD) nastaviti vrednost 10 v skupini BIAS. Pred namestitvijo bitov je potrebno iz njih očistiti "smeti".


Register LCD_CR (kontrolni register LCD)

Ponastavi bite:
LCD->CR &= ~LCD_CR_BIAS; ali LCD->CR &= ~0x60;
Izbira načina bias=1/3 z uporabo bitne maske:
LCD->CR |= LCD_CR_BIAS_1; ali LCD->CR |= 0x40;
Nastavite način delovanja = 1/4. Da bi to naredili, najprej ponastavimo vse bite:
LCD->CR &=~LCD_CR_DUTY; ali LCD->CR &= ~0x1C;
Nastavite vrednost 011 za skupino DUTY registra LCD_CR za
način delovanja = 1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; ali LCD->CR |= 0xС;
Aktiviramo funkcijo prerazporeditve pinov. Če želite to narediti, nastavite od 1 do 7 bitov registra LCD_CR:
LCD->CR |= LCD_CR_MUX_SEG; oz LCD->CR |= 0x80;
Nastavimo vrednosti koeficientov frekvenčne delitve signala ure LCDCLK. Vrednosti koeficientov so nastavljene v registru LCD_FCR (kontrolni register okvirja LCD). Najprej tudi počistimo vse bite, nato nastavimo potrebne.


Register LCD_FCR (kontrolni register okvirja LCD)

LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; ali LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
Vrednosti koeficientov delitve frekvence signala ure so enake ck_ps = LCDCLK/16, ck_div = ck_ps/17. Če želite to narediti, nastavite od 1 do 24 in 18 številk:
LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
Če želite nastaviti želeno stopnjo kontrasta, morate v skupini CC nastaviti vrednost 010, pri čemer najprej počistite bite iz starih vrednosti:
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; ali LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
Po nastavitvi vseh vrednosti traja nekaj časa za sinhronizacijo registra LCD_FCR. Sinhronizacijo registra preverimo z nastavitvijo bita FCRSF v strojni opremi v registru LCD_SR (LCD status register).

Register LCD_SR (register stanja LCD)

Medtem ko(!(LCD->SR&LCD_SR_FCRSR));
Kot vir napetosti za LCD izberemo notranji povečevalni pretvornik, ki tvori V lcd. Da bi to naredili, je prvi bit registra LCD_CR (kontrolni register LCD) nastavljen na 0:
LCD->CR &= ~LCD_CR_VSEL; ali LCD->CR &= ~0x2;
Delovanje LCD krmilnika omogočimo z nastavitvijo bita LCD_CR register (kontrolni register LCD) na 0:
LCD->CR |= LCD_CR_LCDEN; ali LCD->CR |= 0x1;
Po namestitvi notranjega pospeševalnega pretvornika kot vira napetosti morate počakati, da bo pripravljen. Pripravljenost preverimo s strojno nastavitvijo bita RDY v registru LCD_SR (register stanja LCD):
medtem ko(!(LCD->SR&LCD_SR_RDY));
Ko pustite krmilnik LCD delovati, morate počakati, da je pripravljen. Pripravljenost preverimo s strojno nastavitvijo ENS bita v registru LCD_SR (LCD status register):
medtem ko(!(LCD->SR&LCD_SR_ENS));

Oblikovanje slike na LCD

Vsi segmenti indikatorja so združeni v skupine COM0 - COM3 s po 24 segmenti (SEG0-SEG23). Informacije o segmentih so shranjene v registrih LCD_RAM ​​​​pomnilnika krmilnika LCD. Ožičenje tiskano vezje je tako, da številke segmentov ne ustrezajo bitnim številkam registrov LCD_RAM.

Za prikaz 1 v prvi številki LCD-ja morate osvetliti segmente 1B, 1C. Segment 1B spada v skupino COM0, segment 1C pa v skupino COM1. Zato je treba podatke o njih zapisati v registre RAM (LCD_RAM0), RAM (LCD_RAM2). Segment 1B je odgovoren za izhod LCD LCDSEG22, informacije o katerem so shranjene v bitu SEG40 registra RAM (LCD_RAM1). S funkcijo ponovnega preslikave bo segment LCDSEG22 dodeljen bitu SEG28 registra RAM (LCD_RAM0). Segment 1C je odgovoren za izhod LCD LCDSEG1, informacije o katerem so shranjene v bitu SEG1 registra RAM (LCD_RAM2).

LCD->RAM= 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
Pred zapisovanjem vrednosti v pomnilniške registre je potrebno preveriti, ali je predhodni prenos podatkov na LCD zaključen. V ta namen se preveri bit UDR (zahteva za posodobitev zaslona) registra LCD_SR (register stanja LCD). Krmilnik LCD ima dva izhodna medpomnilnika, informacije se vnašajo v prvi medpomnilnik in izhajajo na LCD iz drugega medpomnilnika. Bit UDR je nastavljen med prenosom iz prvega medpomnilnika v drugega, kar ščiti registre LCD_RAM ​​pred pisanjem:
medtem ko(LCD->SR & LCD_SR_UDR);
Po zapisovanju informacij v registre LCD_RAM ​​​​morate nastaviti bit UDR v register LCD_SR (register stanja LCD) (nastavite 1 do 2 bita):
LCD->SR |= LCD_SR_UDR; ali LCD->SR |= 0x4; /*0x4 = 100 */

Za muke in študij te naprave. Nič prej rečeno kot storjeno. Šal je bil pobran in šli smo. Oh ja! Tema najinega pogovora je bila primerjava obeh MK. Zgornji je proti ATmega328. Zakaj ravno njih? Oba MK sta v paketu TQFP-32. (Res je, da je ATmega328 tudi v paketu DIP)
Zdaj pa si pobliže oglejmo njihovo notranjost. Za boljše razumevanje sem vse potrebne podatke zbral v eni tabeli.

Opcije ATmega328 STM32F030K6T6
Bitna globina 8 bit 32 bitov
FLASH 32kb 32kb
SRAM 1kb 4kb
EEPROM 512b -
Časovnik 8 bit 2 kos -
Časovnik 16 bit 1 PC 16 kosov
PWM 3 kanali 6 kanalov
USART 1 PC 1 PC
SPI 1 PC 1 PC
I2C 1 kos (TWI) 1 PC
ADC 8 kanalov 10 bit 16 kanalov 12 bit
Prehrana 2,7 - 5,5 2,4 - 3,6
Hitrost 0 - 16MHz 48MHz z zunanjim 4 - 32MHz
Cena 160-170 rubljev. 80-140 rubljev.
Kot lahko vidite iz tabele, je STM32 precej bolj zanimiv in bogatejši od AVR. Res je ena malenkost. STM32 nima EEPROM-a, ima pa DMA, ki preprosto popolnoma ubije AVR. Res je, AVR se ponaša z Arduinom in enostavnim programiranjem. Ne trdim, ampak STM32 ima STM32Cube, ki generira kodo za IAR in skrbi za celotno rutino nastavljanja perifernih naprav. In zadnji žebelj v krsto AVR je RTOS. Da, lahko ga namestite tudi na AVR, vendar morate to ugotoviti, toda v STM32 potrdimo polje "FREERTOS" in to je to. Sistem bo sam naredil vse, kar je potrebno, mi pa moramo samo ustvariti niti in vanje napisati kodo. No, to je samo za začetek. Pravzaprav je tam vse malo bolj zapleteno. Skratka, všeč mi je STM32 in da bi vas končno pridobil na tej platformi, bom s tem, ko vržem Arduino v predal vaše mize, ustvaril ploščo od začetka do konca in vam pokazal, kako delati z njo. Oh, pozabil sem. Vsi STM32 imajo razhroščevalnik SWD. To so tri žice SWDIO, SWCLK, GND in skozi vrstice kode lahko skačete neposredno v strojni opremi in ne tako kot ATmega328 virtualno v Proteusu. Za to potrebujete univerzalni programator ST-LINK. Uporabite ga lahko, če kupite ploščo Discovery ali ločen programator. In zdaj od besed k dejanjem.
Shema. Večji
To ploščo sem naredil kot modul za svojo ploščo za odpravljanje napak za AVR. Lahko pa ga ponovite tako, da ploščo razdelite po lastni presoji (na koncu članka bom objavil projekt za DipTrace). Kaj je na diagramu. In diagram prikazuje preprost pas kot za AVR. 8 MHz kvarc z dvema 20p kondenzatorjema. Tako kot v AVR je tudi napajalno vezje za podporo ADC sestavljeno. Ponastavite vezje kot AVR. Edina razlika je BOOT vezje. Za razliko od AVR-jev imajo vsi STM32 vgrajen zagonski nalagalnik strojne opreme. Privzeto je povezan z USART. To pomeni, da če pritisnete pin BOOT0 na napajalnik in znova zaženete MK, lahko s programom Flash Loader Demonstrator utripate MK brez programatorja. Ta funkcija uporabno, če že imate pripravljeno in delujočo napravo in morate posodobiti vdelano programsko opremo, potem potrebujete samo adapter USB USART. Mnogi ljudje se ne želijo zapletati s STM32, ker napajalnik ne presega 3,6 voltov. Nesmisel. Če pogledate tabelo z žebljički, boste opazili, da lahko vse noge sprejmejo 5 voltov brez posledic. Gremo naprej.

In tako izgleda nameščen na plošči.

Zdaj priključimo programator ST-LINK-GA na konektor SWD.

Zdaj, ko je vse pripravljeno, prenesite najnovejšo različico s spletne strani ST (povezava na samem dnu strani). Namestite in zaženite.

Kliknite Nov projekt. In v oknu, ki se prikaže, najdemo naš krmilnik. Kliknite OK.

Po kratkem premisleku. Program bo prikazal takšno okno.

Ne bom opisoval, kaj in zakaj, saj je to tema ločenega članka. Zdaj pa na primer samo naredi, kar ti pokažem. Kaj počnemo. Začeli bomo operacijski sistem in v eni niti bomo utripali LED. Nekakšna "Heloy Word" iz topa.))) Če želite to narediti, v levem oknu kliknite znak plus poleg napisa "FREERTOS" in postavite kljukico na spustni seznam.

Poleg tega, ko izberete zunanji kvarc, bodo na desni strani krmilnika zelene barve označene noge, na katere ga morate obesiti. Naslednja stvar, ki jo morate narediti, je, da izberete nogo, na kateri bo LED visela. Izbral sem port B in pin 0. In našel sem rake.Iz strahu, ne vem zakaj, sem izhodni glavnik prvih štirih pinov obrnil na glavo. Zato zmeda na vratih B. Ta težava vpliva samo na mojo ploščo. Ampak nič, to ni ustavilo delovanja MK. In tako konfigurirajte pin. Dejstvo je, da lahko pri STM vsi pini prevzamejo kup vrednosti, če pa se dotakneš diskretnega vhoda/izhoda, potem so lahko tri možnosti za izhod. Izhod v zraku, izhod s potegom na napajalnik plus, izhod s potegom na skupno vodilo. STM32CubeMX privzeto visi z nogo v zraku. No, naj bo, le preveriti moramo delo in pokazati moč STM32. Če želite konfigurirati nogo, jo morate klikniti z levim gumbom miške in v oknu, ki se prikaže, izbrati GPIO_Output. Če je MK premajhen, lahko zavrtite kolo in ga povečate.)))

Naslednji korak je prilagoditev takta MK. Dejstvo je, da je STM32 s to zadevo zelo nejasen. Za razliko od AVR ima STM32 na vhodu kvarc s frekvenco od 4 do 32 MHz, na vodilih pa ga je mogoče pospešiti na 48 MHz. Znotraj MK je zelo zapleten sistem za merjenje ure, vendar nam STM32CubeMX spet priskoči na pomoč. Pojdite na zavihek Konfiguracija ure in jo konfigurirajte, kot je prikazano na spodnji sliki.

To je vse. Kliknite na ikono zobnika na vrhu.

Pojavilo se bo takšno okno.

In tukaj sem pozabil povedati. Prenesite in namestite IAR zase. Prenesete ga lahko od uradnikov, vendar z zmanjšano količino kode, ali pa ga najdete v torrentih. Če pa imate veliko dodatnega denarja, lahko kupite licenco. No, mislim, da bodo številni šli po poti s CodeVisionAVR. Na splošno to prepuščam vaši presoji. Imam verzijo 7.40. Vrnimo se h Kocki. V oknu poimenujte projekt, vendar samo v latinici, IAR ne mara ruskih črk v poteh. In določite, kje bo projekt shranjen. V oknu IDE morate izbrati (in je privzeto) EWARM. Kliknite OK. Program pomisli in nato prikaže takšno okno. Bla bla bla. Na splošno kliknite odprite projekt (za tiste, ki so v rezervoarju, srednji gumb).

Okno bo izginilo, namesto njega pa se bosta zagnala IAR in naš projekt. Na levi pojdite na Application->User in zaženite main.c. Ta kup kode je ustvaril STM32CubeMX za nas.

In kaj zdaj s to grozo? Toda za to potrebujemo celo vrsto člankov))) In zdaj le najdemo ta del kode.

To je naš edini tok. V telesu za zanko(;;) izbrišemo edino funkcijo osDelay(1); in namesto nje napišemo to kodo. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
osDelay(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
osDelay(500);

čudovito Zdaj samo kliknite gumb z zeleno puščico zgoraj desno in počakajte na kompilacijo in prenos.

Če je vse pravilno in brez napak, bo program sestavil celoten projekt, ustvaril vse, kar je potrebno, in naložil strojno programsko opremo v MK. Po tem bo šel v način za odpravljanje napak. Tukaj je. Sanje AVR-moškega. Če imate neustavljivo željo, da bi ga uporabljali, potem lahko samo korak za korakom na strojni opremi, vrstico za vrstico. In če želite videti, kako program deluje, pritisnite križec levo zgoraj in uživajte v utripanju LED.

To je vse. Mikrokontrolerje lahko kupite po najnižji ceni, kar 78 rubljev na kos v trgovini ChipResistor. No če hočeš ceneje je tudi mala veleprodaja. Od 35 kosov že za 50 rubljev.
Projekt za DipTrace.
In seveda video.


gost 31.12.15 10:35

Pred kratkim sem želel narediti merilnik frekvence na ATMEGA16 in zunanji 8-bitni števec na logiko 74, vendar ni bilo dovolj hitro. Ne obvladam pisanja v asemblerju; ograjevanje zunanjega števca s 16-biti je muka rit. AVR je prejšnje stoletje, ne poceni krmilnik. Bom podprl avtorja, AVR je. Faza je minila, kupil sem tudi čip stm32f100 plus CP2103 USB adapter čip, kmalu bodo vsi opustili AVR.

Alexey 31.12.15 12:26

Ne strinjam se. Kljub temu se Arduino še vedno razvija in mnogi so zasvojeni z njim, slednji pa deluje na AVR. Prehod na STM je kot prehod na naslednjo stopnjo. Tako rekoč iz vrtca v šolo.

ANONIMNO 12.02.16 10:44

AVR in STM32 sta procesorja, ki si med seboj ne konkurirata. Vaša plošča ne vsebuje najpomembnejšega parametra - to je trenutna poraba!! In ob pogledu nanje lahko potočiš solzo. Atmega 328 - – Aktivni način: 0,2 mA – Način izklopa: 0,1 µA – Način varčevanja z energijo: 0,75 µA (vključno s 32 kHz RTC) STM32F030K6T6 48 MHz - Aktivni način: periferne enote na 23,3 mA periferne naprave izklopljene 11,5 mA - Način zaustavitve: 0,048 mA STM32 neusmiljeno porablja elektriko - grobo rečeno 100-krat več kot AVR. Naprave STM32 ne morete napajati iz baterije. Toda AVR bodo delovali več mesecev. Zato se je AVR težko odpovedati. Srečno vsem.

Alexey 02/12/16 10:54

In nihče ne predlaga, da opustimo AVR. Prikazujem le razliko na periferiji. Še vedno vzdržujem knjižnico AVR in še vedno imam ATMega8A kot svoj glavni MCU.

Sergey 24.02.16 18:02

Po mojem mnenju je nekako čudno primerjati svež STM32 z upokojenim AVR. Če želite primerjati STM32 s krmilniki ATMEL, jih primerjajte z družino ATSAM, ne pa z AVR.

Andrej 24.02.16 18:06

Kdo je ta upokojenec? AVR je živ in bo živel še kdo ve koliko časa. In če pogledam tabelo, je po mojem mnenju primerjava bolj na obrobju, ne pa na arhitekturi.

Aleksej 24.02.16 19:04

Pa se začne. Zdaj pa se pogovorimo o AMD in Intelu.

Sergey 24.02.16 22:02

Na hubu je en “strokovnjak” napisal, da AVR nima vzporednega vodila za priklop standardnega LCD-ja, STM32 pa ga...

Aleksej 24.02.16 22:36

Kaj pomeni standardni LCD? Ali gre za FSMC? To torej ni samo za zaslon, ampak tudi za spomin. Samo vzporedni avtobus. Ima ga tudi AVR, na primer Mega8515. SRAM je nanj mogoče povezati prek zaklepnega registra.

Sergets 25. 2. 16 6:24

Alexey, o čem govorim?! Zdi se, da sploh ne poskušate razumeti pomena mojih sporočil.

Alexey 25.02.16 09:38

No, kakšen smisel ima primerjanje dveh enakih mikrokontrolerjev različnih podjetij? Oba sta na jedru ARM. Če ste res izbirčni, potem morate res primerjati AVR s STM8. Nato sem ostal pri bližini periferije, faktorju oblike in ceni. In samo drugačna arhitektura.

Adlan 03.06.16 17:40

Zdravo. Prosim za pomoč, kdor more. Nameščeno Najnovejša različica Kuba 4.15, knjižnice F1 1.4.0. Ustvarjen prazen projekt v EWARM se ne prevede - napak je več kot sto. Kaj bi lahko bilo? Hvala vam [e-pošta zaščitena]

Alexey 06/03/16 20:48

Adlan, prva stvar, ki jo moraš narediti, je naložiti projekt, ki se ne bo prevedel.

Dokument 18.7.16 21:51

"Res je, da se AVR ponaša z Arduinom in preprostim programiranjem." S ČEMU se lahko pohvali? ;D

Alexey 19.7.16 11:41

To je neumna primerjava. Prvič, STM ima analog Arduina, imenovan nucleo. Programi so napisani v spletnem IDE neposredno prek brskalnika. Ampak, če prednosti kamna osebno, potem. Frekvenca delovanja jedra je 72 MHz, o takšni hitrosti AVR niti sanjati ni mogel. Seveda če migaš z ledico potem ni nobene razlike, če pa zaženeš axis in še kup periferije bo AVR odpihnilo. Bitna zmogljivost, 32 je daleč od 8. Periferne enote na STM lahko vsebujejo 3 I2C, 3 SPI, 6 UART, USB, CAN, Ethernet. Skoraj vse ima možnost remapiranja, torej prenosa na druge noge mk. Obstaja tudi DMA, to je neodvisen koprocesor za delo s perifernimi napravami. Tako prekinitve AVR živčno kadijo ob strani. Obstaja strojna oprema SDIO za polnopravno delo s CD karticami in ne bergle ISP v AVR. Na splošno je tam še marsikaj, a največji kamen na vrtu AVR je odpornost proti hrupu. Izbiti AVR s kablom, ki teče v bližini od elektromotorja, ni pametno, ampak STM je treba poskusiti. Zato ne bi priporočal, da bi bil sarkastičen z Arduinom.

gost 11.08.16 23:27

MICROCHIP absorbiran AVR!))))))))))

Alexey 08/12/16 08:35

Z novicami smo zamujali, kot pred petimi leti.

Vladimir 17.08.16 22:56

Aleksej! Januarja 2016 je Microchip kupil Atmel za 3,56 milijarde dolarjev. Kakšnih 5 let?

Alexey 18.08.16 10:30

To je de jure, de facto pa traja že od leta 2008. Torej sem res naredil napako, ne 5 let, ampak 8 let nazaj.))))

Vladimir 18.08.16 23:53

Alexey! Začel sem preklopiti na stm32! In kar zadeva porabo v avtonomnem načinu, svetuje, da ne ura vse, potem se bo tok porabe zmanjšal.

Oleg 09.11.16 22:31

V podatkovnem listu na STM nisem našel grafov porabe CLK sistemske ure kot pri AVR - in glede na tiste ploščice, ki so tam, STM32 naravnost izgubi tako v običajnem načinu kot v stanju mirovanja. Da, in ta STM32 nima takta 72 MHz - samo 48 max, to je vse, torej tudi z 32-bitnim 8 beatnik AVR - se izkaže bolje, in mimogrede, proizvajalec v podatkovnem listu ni napisal, koliko taktnih ciklov v strojnem ciklu STM32, ki jih ima, torej če se izkaže, da sta 2 takta proti 1 za AVR - potem upoštevajte, da je 48/2 = 24 realnih MHz - skoraj enako kot 20 MHz za AVR. Torej vprašanje je - kje je čudež tega STM32, o katerem vsi govorite?

ANONIMEN 11.09.16 23:03
Alexey 11/10/16 00:23

Sploh se ne želim prepirati. Kateri je boljši Intel ali AMD? Ali Zhiguli ali Volga? STM ima strojno opremo USB, CAN, Ethernet, SDIO in kup drugih zunanjih naprav, o katerih lahko AVR samo sanja. Na koncu je DMA kot neodvisen koprocesor z neposrednim dostopom do pomnilnika pred katerim živčno kadijo ob strani vse AVR prekinitve. Na primer, prva serija ima na krovu 3 UART, 2 SPI, 3 I2C. Na voljo je preslikava vrat in ni vam treba skrbeti, kako razstaviti ploščo. Če ti je všeč delo z AVR, potem delaj, kdor te moti. Še danes izdelujem mega osmine za male projekte in se ne pritožujem. Aja, prilepi AVR zraven starterja in glej kako mu raznese glavo z motnjami. AVR nima EMI zaščite. Zato so bili PIK-i vedno vgrajeni v avto alarme, saj AVR v takšnih razmerah umre. Zakaj bi se prepirali, to je mrtva številka.

Kornet 27.11.16 21:22

No, mimogrede, Arduino že obstaja na STM32. To je Amperka in vse vrste Espruina v JS) Poleg tega, če je Microchip vzel Atmel, no, jebi jih

Aleksej 27.11.16 21:44

Ime Espruino parodira Arduino, takrat najbolj znano hobi platformo, vendar Espruino ni združljiv s klasiko Arduino Uno niti mehansko niti programsko (citat Amperka)
Imam tudi ploščo Nucleo in tudi nima nobene zveze z Arduinom, razen geometrije same plošče)))
Na splošno v bistvu uporabljam MK, ki je primeren za trenutno nalogo.

Andrej 20.12.16 22:50

Kdo rad preplača: vredno je attiny2313-20 - 2Kb-flash /128bit-ram/16bit_ timer -1/8bit_ timer -1 =2,1$ vs stm32f103c8t6 64Kb-flash/20Kb-sram/16BIT timer (+ nadzor mrtvega časa za dual -kanalni način PWM) -4/ADC-2/72MHz CPU/=2,3$. Po mojem mnenju je skoraj nemogoče izdelati merilnik impedance za vezje RLC z uporabo AVR ali pa obstaja 10 kamnov. Vendar lahko to s STM in FFT (pomaga DMA). Nekako sem poskušal narediti merilnik frekvence na Mega10 (natančnost 1 herc) - preprosto ni bil dovolj hiter (ali namestiti zunanji 32-bitni števec s premičnim registrom - kjer so dimenzije AVR sem opustil pred enim letom, izkazalo se je, da je AVR za premožne ljudi.

Andrej 20.12.16 22:53

ANONYMOUS je napisal - "In tukaj je še en citat iz opisa STM32 v ruščini - "... Z
trenutek
prejemanje
prekine
prej
začela
izvedba
prvi
ekipe
vodja
prekine
je porabljen
samo
dvanajst
ciklov
ura
signal"

To je res. Toda pomnožite dve 32-bitni števili z avr - očitno 8-10 taktov!

Alexey 20.12.16 23:31

Ja, že obžalujem, da se je začel ta halivar.))))

Aleksander 21.12.16 00:27

Prebral sem komentarje in se spomnil.
Dva otroka v peskovniku
Ena duduka!
Drugič, pisk!
Najprej Duduka! (intonacija bolj grozeča)
Drugič, BIBIKA! (S še bolj ekspresivno intonacijo)
Prva DUDUKA! (Že kriči)
Druga BIBIKA!!! (skoraj joka)
....
Ta bitka je končana, oba stojita in jočeta, eden glasneje od drugega.)))

Val 02/10/17 01:43

Kakšna bo frekvenca, če zankate brez zakasnitve?
medtem ko (1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
}

Aleksej 10.02.17 10:07

Tisti na avtobusu APB

Igor 08.06.17 22:33

Torej takoj integrirajmo prenosne računalnike v vgrajene sisteme, ti so stokrat boljši od STM in tam je samo hudičevo veliko perifernih naprav, že obstajata Wi-Fi in bluetooth in niti programerji niso potrebni, takoj je tu monitor z tipkovnico za pisanje programa in takojšnje izvajanje, programerji in razhroščevalniki pa niso potrebni.
To je tako, kot da bi kupili bager za osebno uporabo na vaši dachi, da bi VČASIH izkopali nekaj lukenj globokih pol metra.
Dati STM v termostat, uro, tehtnico, no, po mojem mnenju to ni normalno. Mimogrede, ja, kaj pa obstojni pomnilnik, torej naredim termostat, nastavim temperaturo, potem lučke ugasnejo, pa kaj, nastavitve se izgubijo. Toda v vgrajenih sistemih, ki jih je treba enkrat konfigurirati za nadaljnje delovanje, je treba vrednosti shraniti za vedno

Alexey 06/09/17 08:25

No, na primer, čip-dip STM32F030F4P6 stane 48 rubljev, neposredni analogni ATtiny2313 pa 98 rubljev. Mislim, da bo kateri koli od njih dovolj za izdelavo termostata. In pomnilniška kompenzacija za STM je lahko v katerem koli temperaturnem senzorju. Da, vsaj v istem DS18B20. Kar zadeva prenosne računalnike, ima vsak terminal za sprejemanje plačil nameščen osebni računalnik z operacijskim sistemom in monitor. Torej sploh obstajajo taki sistemi. Pri izbiri MK najprej izberite tistega, ki je cenejši. Če je to hobi, potem lahko kupite Arduino, da se ne trudite s spajkanjem, in ko je sistem načrtovan za proizvodnjo in proizvodnjo v stotinah, potem šteje vsak peni. In preplačilo 50 rubljev za MK, ko je njegova cena 48, je nedopusten luksuz.

Ruslan 17.06.17 21:46

Alexey, zakaj si izbral programsko okolje IAR?
Katero okolje je bolje izbrati za novinca (tako da je veliko namigov kot v Atmel Studio)?

Alexey 17.6.2017 22:07
Ruslan 17.06.17 22:56
Če nisem izgledal "slabo", mi dajte povezavo, kjer lahko pogledam ali preberem, kako to storiti!
Še bolje, naredite videoposnetek, mislim, da ga bo zanimalo veliko začetnikov (in ne samo)!
Hvala vnaprej!
Alexey 08/05/17 10:19
Ruslan 22.11.17 12:17

To sem mislil https://www.youtube.com/watch?v=wOIlhRd-vN8
5-7 minut!!!

Ruslan 22.11.17 12:18

Alexey, prosim, povej mi, kako delati z naštevanji "enum", sicer ni nikjer takšnih informacij in v vaših videoposnetkih "C za najmlajše" tudi ni, vendar ga res potrebujem!
Ko sem se igral z AVR-ji, še nisem videl takega čudeža, kot je enumeracija, zdaj pa me zanimajo STM-ji in teh je ogromno! In ni informacij o tem, kako delati z njimi!
Tukaj je primer iz prave kode:


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

Kje je naštevanje StatusCode:


enum StatusCode: bajt (
STATUS_OK , // Uspelo
STATUS_ERROR , // Napaka v komunikaciji
STATUS_COLLISION , // Zaznan trk
STATUS_TIMEOUT , // Časovna omejitev v komunikaciji.
STATUS_NO_ROOM , // Medpomnilnik ni dovolj velik.
STATUS_INTERNAL_ERROR , // Notranja napaka v kodi. Ne bi se smelo zgoditi ;-)
STATUS_INVALID , // Neveljaven argument.
STATUS_CRC_WRONG , // CRC_A se ne ujema
STATUS_MIFARE_NACK = 0xff // MIFARE PICC je odgovoril z NAK.
};

To je iz knjižnice Arduino (C++), vendar Keil prisega na to!
Kako pravilno zapisati vrnitev funkcije številčenja?

Ruslan 22.11.17 12:29

In kako deklarirati enega od argumentov v funkciji, ki je naštevanje:


void PCD_WriteRegister(PCD_Register reg, vrednost bajta);

Kjer je PCD_Register naveden:


enum PCD_Register: bajt (
// Stran 0: Ukaz in status
// 0x00 // rezervirano za prihodnjo uporabo
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
...
};

In reg, kolikor razumem, je naštevanje, vendar ni nikjer navedeno v kodi in ne razumem, od kod prihaja!
Prebral sem veliko strani na internetu in našel informacijo, da se ta naštevanja lahko nadomestijo z definicijami, vendar sem vseeno želel vedeti, kako delati z njimi!!!

Ruslan 22.11.17 12:35

Veselim se vašega odgovora!
Mogoče naredite video kako delati z njimi, da bo delalo tudi drugim, mislim, da bo video zelo koristen, ker takšnih videov ni (vsaj jaz jih nisem našel)!

Dmitrij 28.11.17 22:02

"enostavno programiranje"

Zanimiv organ za programiranje krmilnikov. Na splošno ni jasno, kako je bilo mogoče primerjati 32-bitno z 8-bitno. Kot Porsche Cayenne z Zarporozhets.

Alexey 29.11.17 10:24

Lahko primerjaš, lahko. Upoštevati morate le, da je v tej primerjavi Porsche cenejši od Zaporozhetsa. Glede urologije je bolj pikantno. Zato tega ne bom popravil.

Konstantin 23.12.17 00:06

Ruslan, ne razumem, kako iščeš in ne najdeš ničesar (očitno ne iščeš). To so same osnove jezika C (ne samo za MK, ampak tudi za računalnike). Preberi knjigo Kernighana in Ritchieja, tam je ves C odlično opisan.
In nihče ne bo odgovoril na vaša vprašanja, to so elementarne stvari.

ANONIMNO 11.02.18 16:27

Zakaj primerjaš 32-bitni ST MK z 8-bitnim Atmelom? Neumna primerjava. To je enakovredno primerjavi 32-bitnega Atmel AT91SAM z 8-bitnim STM8, tudi če upoštevamo, da ima Atmel 32 še močnejših razelektrilnikov

Alexey 02/13/18 12:18

Ker v času pisanja 8-pasovnih ST-jev ni bilo v prodaji, mega in STM32 pa imata enako ceno.

STM32_Dev 19.6.2019 13:59

No, AVR potrebuje 4-5 taktov, da naredi isto stvar!!! Samo. In tu se spet izkaže, da je AVR narejen bolje kot STM32, s svojo napihnjeno uro, STM32 pa nima notri EEPROM kot AVR

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

Zdi se, da muzejska atmega šteje svojih 5 taktov dlje kot 12 taktov STM32)))

Ali STM32 nima eproma? Seveda? STM32L152 - 8kB eprom! Kaj pa atmega? 512 bajtov? Oh, tako veliko!!! Sploh ne vem, kaj naj tam napišem. Pomislimo ... mmm ... 16 spremenljivk po 4 bajte)) No, to je samo nevihta med krmilniki))

SIM31 30.6.19 19:29

Glede porabe lahko tudi primerjaš, nova atmega in attiny sta zelo varčna.
In vse ima svojo uporabo. Če potrebujete moč, vzemite Raspbery Pi 4 in ne skrbite, Python ima še več možnosti, celo nastavitev polnega spletnega strežnika, celo zagon Quake 3D.
Če morate obdelati podatkovne tokove, prosim (glejte projekt "Mars Rover" "Mars Rover 2")
Avtor ima kup pozitive, a dejstvo, da je Arduina bolj živa od vseh živih, pomeni, da ni vse tako preprosto.


Radioamaterji že vrsto let uporabljajo osembitne mikrokontrolerje družin PIC in AVR. Priljubljeni so zaradi nizke cene, podrobne dokumentacije, enostavnosti programiranja in enostavne namestitve. Vendar pa pogosto obstajajo primeri, ko moč takšnega mikrokrmilnika ni dovolj za rešitev naloge. Najenostavnejši primer je merilnik frekvence ali generator signala na mikrokontrolerju, kjer je največja izmerjena ali generirana frekvenca neposredno odvisna od hitrosti obdelave oziroma izpisa informacije.

Poleg hitrosti imajo osembitni mikrokontrolerji še druge omejitve, na primer, veliko modelov AVR ima samo eno serijsko vhod strojne opreme, ki ne omogoča prejemanja informacij iz zunanje naprave in hkratnega pošiljanja rezultatov njihove obdelave potrošniku. Da ne omenjam tako "banalnih" stvari, kot je prikaz informacij na grafičnem indikatorju, ki zahteva velike vire hitrosti in pomnilnika. Po analizi številnih tovrstnih omejitev je avtor prišel na idejo o prehodu na mikrokontrolerje družine STM32.

Na primer, razmislite o dveh mikrokontrolerjih iste cenovne kategorije - STM32F103C6 in ATmega328P.

Tabela 1

Vrsta mikrokontrolerja

Velikost procesorja

Korak svinca, mm

Urna frekvenca, MHz

Prostornina pomnilnika FLASH. KB

Količina RAM-a, KB

številko USART

Število 16-bitnih časovnikov

Število V/I linij

Približna cena, rub.

Njihovi primerjalni parametri so podani v tabeli. 1. Rezultati primerjave so celo nekoliko presenetljivi. 32-bitni mikrokrmilnik ni le zmogljivejši od osembitnega mikrokrmilnika v skoraj vseh pogledih, ampak je tudi cenejši. Seveda spajkanje mikrokontrolerja z razmikom nožic 0,5 mm doma ni tako enostavno. Na srečo v večini primerov to ni potrebno - na trgu je veliko vrst razvojnih plošč z mikrokontrolerji družine STM32, ki zadostujejo za različne aplikacije. Oglejmo si jih podrobneje.

STM32F4-DISCOVERY

Ta plošča (prikazana na sliki 1) je morda najprimernejša za začetnike, ki preučujejo mikrokontrolerje STM. Prvič, ima velik nabor perifernih naprav. Plošča poleg mikrokontrolerja vsebuje še mikroelektromehanski merilnik pospeška, mikrofon, avdio DAC, dva USB priključka, gumb in štiri LED diode.

Nožice mikrokontrolerja so izpeljane na kontaktne ploščice za montažo pin konektorjev na levem in desnem robu plošče, kar olajša priklop vseh potrebnih zunanjih naprav nanje. Mikrokrmilnik STM32F407VGT6, nameščen na plošči, ima zelo dobre parametre: 1 MB FLASH pomnilnika, 192 KB RAM-a in taktno frekvenco 168 MHz.

Končno je plošča opremljena z vgrajenim razhroščevalnikom ST-LINK/V2, ki ga je mogoče uporabiti za razhroščevanje programov ne samo na mikrokontrolerju na plošči, temveč tudi na mikrokrmilnikih iste družine, ki se nahajajo na drugih ploščah. Preklop na njih se izvede s pomočjo odstranljivega mostička in priključka SWD.

Cena plošče je približno 800 rubljev, kar se lahko šteje za povsem sprejemljivo.

Razvojna plošča STM32F103RBT6

Naslednja zanimiva možnost je razvojna plošča z mikrokontrolerjem STM32F103RBT6 (slika 2).

Je nekoliko šibkejši od tistega, nameščenega na prejšnji plošči - taktna frekvenca 72 MHz, 128 KB FLASH pomnilnika in 20 KB RAM-a, vendar so periferne naprave zelo zanimive. Na voljo je TFT zaslon na dotik z ločljivostjo 320 x 240 slikovnih pik in diagonalo 2,8", vgrajen USB priključek za izmenjavo informacij z računalnikom, reža za pomnilniško kartico SD, kvarčna ura 32768 Hz, predal za baterija za uro realnega časa in priključek ST-LINK za odpravljanje napak v programih.

Cena te plošče je tudi približno 800 rubljev, vendar je treba opozoriti, da nima vgrajenega razhroščevalnika. Če želite prenesti programe, morate kupiti ločen razhroščevalnik ST-LINK ali namesto tega uporabiti ploščo STM32F4-DISCOVERY, o kateri smo govorili zgoraj.

Maple Mini

Zunanja podobnost te plošče (slika 3) z dobro znanimi moduli Arduino je presenetljiva. In to ni naključje.

Plošča Maple Mini je bila zasnovana kot zamenjava za Arduino Nano. Programski jezik in razvojno okolje za družino mikrokontrolerjev AVR, ki je nameščena v Arduino, sta prilagojena družini STM. Pojdite na http://leaflabs.com/docs/maple-q uickstart.html za podrobne informacije o programskem jeziku Maple IDE in razvojnem okolju.

Razvojna plošča ima mikrokrmilnik STM32F103CBT6, ki deluje na 72 MHz, 128 KB FLASH pomnilnika in 20 KB RAM-a, kar je nedvomno več kot kateri koli modul Arduino. In še večji plus je, da je razvojno okolje ostalo skoraj nespremenjeno.

Ločeno ugotavljamo, da kljub svoji miniaturni velikosti Maple Mini ponuja zelo raznolike zunanje naprave: 34 V/I linij, dva vmesniška kanala SPI in dva I2C, tri serijska vrata. To omogoča, da se uspešno uporablja v različnih amaterskih dogodkih. Zahvaljujoč svoji majhnosti je mogoče Maple Mini vgraditi neposredno v napravo, ki se razvija.

Originalno ploščo Maple Mini je mogoče kupiti za 35 $ na spletni strani njenih razvijalcev. Pošiljanje bo stalo dodatnih 5 USD. Kopija plošče, izdelana na Kitajskem, bo stala pol manj.

Programska oprema

Za pripravo programov za mikrokontrolerje družine STM32 obstaja več možnosti razvojnih okolij:

Komercialni IAR Embedded Workbench, AtollicTrueSTUDIO, Keil itd. Ti izdelki s polnimi funkcijami so precej dragi, s ceno licence od 1000 evrov dalje, obstajajo pa tudi brezplačne demo različice z omejitvijo obsega programa, ki se razvija; za večino preprosti projekti so povsem dovolj;

Brezplačni Eclipse s prevajalnikom ARM-GCC pred uporabo zahteva netrivialno konfiguracijo prevajalnika. Edini plus za danes je zmožnost dela ne samo v sistemu Windows, ampak tudi v Linuxu;

Brezplačni CooCox IDE (CoIDE), ki temelji na istem urejevalniku Eclipse. Nalaga in odpravlja programe prek ST-LINK. Za razliko od prejšnje možnosti CoIDE ne zahteva posebnih nastavitev in deluje takoj po namestitvi. Ta možnost je najbolj priročna in jo je vredno uporabiti.

Uporabimo CooCox IDE za izdelavo vzorčnega programa za ploščo STM32F4-DISCOVERY, ki izvaja klasično utripanje LED prvega programa za kateri koli mikrokrmilnik. Na plošči STM32F4-DIS-COVERY so štiri LED diode, priključene so na pine PD12-PD15 mikrokontrolerja. Naj izmenično utripajo.

Korak 1. Zaženite razvojno okolje CoIDE in ustvarite projekt. Na spustnem seznamu, prikazanem na sl. 4, izberite mikrokrmilnik STM32F407VG.

2. korak. Kot je prikazano na sl. 5, izberite komponente, ki bodo uporabljene v projektu. Glavne so GPIO (vhod-izhod), C Library (osnovne funkcije jezika C) in M4 Core (jedrne funkcije procesorja). Ko aktivirate komponento, CoIDE samodejno kopira potrebne datoteke v mapo projekta, kar je zelo priročno.

Korak 3. Vnos besedila programa. Je precej kratek in je podan v tabeli. 2.

Kot lahko vidite, je vse preprosto in očitno. Tisti, ki so pisali programe za mikrokontrolerje AVR, bodo verjetno videli znane zasnove - inicializacijo vrat, ki označujejo smer (vhod ali izhod), glavno zanko, v kateri se izvajajo potrebna dejanja. Na splošno sintaksa programa popolnoma ustreza jeziku C, za kar je literature več kot dovolj. Na internetu je tudi veliko člankov o programiranju za STM32. Številni primeri so priloženi razvojni plošči in se lahko uporabljajo tudi kot vzorci.

Po vnosu besedila programa s klikom na zaslonski gumb "Download to flash" se le-ta prenese v mikrokrmilnik. LED diode na plošči začnejo utripati. Ločeno je treba omeniti zmožnosti odpravljanja napak - točko prekinitve lahko nastavite kjer koli v programu, program lahko zaženete korak za korakom in si ogledate vrednosti spremenljivk.

Seveda ta primer ni idealen. Na primer, lahko uporabite prekinitve časovnika za nadzor utripanja LED, kar sprosti glavno programsko zanko za druga opravila. Tisti, ki želijo, lahko to ugotovijo sami.

Zaključek

Na splošno so po prvem poznanstvu mikrokontrolerji družine STM32 pustili zelo prijeten vtis. Izkazalo se je, da vse ni tako zapleteno, priročnost razvojnega okolja, postopek odpravljanja napak in veliko število standardnih funkcij pa je celo nekoliko spominjalo na prehod iz Ms DOS v Windows - splošne točke se zdijo enake, vendar je vse veliko bolj priročen in funkcionalen.

Toda glavna pomanjkljivost te družine za amaterski razvoj je še vedno premajhen korak kegljev. Oblikovanje in spajkanje plošče z razmikom nožic 0,5 mm doma je zelo netrivialna naloga. Toda po trenutnih cenah so plošče za odpravljanje napak z že nameščenimi mikrokontrolerji povsem dostopne vsakemu radioamaterju.

Se splača vse pretvoriti v STM in 32-bitno arhitekturo? Seveda ne. Obstajajo naloge, za katere ATtiny povsem zadostuje. Toda na primer za analizo spektra v domačem sprejemniku SDR ali za sprejem in prenos velikih količin informacij po omrežju je veliko bolj učinkovito takoj uporabiti zmogljiv mikrokrmilnik, da ne naletite na pomanjkanje pomnilnika ali zmogljivosti, ko izboljšanje naprave.

Na podlagi jedra Cortex so začeli aktivno pridobivati ​​​​priljubljenost med profesionalnimi in začetniki razvijalci naprav na mikrokontrolerjih. Razlogov za to je več:
- nizka cena v primerjavi s konkurenti;
- veliko število vgrajenih vmesnikov;
- enostavnost programiranja in visoka zanesljivost.
Obstaja pa tudi ena pomembna pomanjkljivost - vsi mikrokontrolerji STM niso izdelani v paketih DIP, kar začetnike pogosto preprosto prestraši, saj je izdelava plošče s tiri manj kot 0,3 mm doma problematična. To stanje je privedlo do pojava na trgu velikega števila plošč za odpravljanje napak, tako iz ST Microelectronics (Discovery) kot plošč, ki jih proizvajajo tretja podjetja (Olimex, Pinboard). Za Discovery sem se odločil iz treh razlogov:
- relativno nizka cena (ploščo je mogoče kupiti od 300 rubljev);
- dobra izdelava (čeprav obstaja nekaj pritožb glede ožičenja, vendar niso tako pomembne);
- veliko virov in primerov je objavljenih na spletni strani proizvajalca;
- prisotnost vgrajenega programatorja (ni vam ga treba kupiti posebej).
Namen prve lekcije je pomagati razvijalcu začetniku izbrati ploščo za odpravljanje napak in v prihodnosti - naučiti osnov programiranja.
Torej, gremo.

STM32F0DISCOVERY

Ta plošča je bila izdana februarja 2012, da bi pritegnili razvijalce, ki so prej uporabljali 8-bitne mikrokrmilnike in s tem zapolnili to nišo. O njej ne morem reči nič slabega ali dobrega. Navadna plošča, poceni, je odlična za začetek. Ima naslednje značilnosti:
- mikrokrmilnik: STM32F051R8T6 (Cortex M0, 48 MHz, flash 64 KB, RAM 8 KB);
- vgrajen ST-link/V2, ki se lahko uporablja ločeno od plošče;
- napajanje iz USB ali zunanjega vira 3/5V;
- 4 LED diode in 2 gumba;
- vmesniki: USART, SPI, I2C, HDMI;
- časovniki 16 in 32 bitov;
- vsi izhodi so usmerjeni na dva enovrstna glavnika.
Pravzaprav je takšna deska že precej zastarela in jo je priporočljivo vzeti le za sam začetek treninga.

STM32VLDISCOVERY

Od prejšnje plošče se razlikuje le po procesorju STM32F100RBT6B (Cortex M3, 24 MHz, flash 128 KB, RAM 8 KB) in razporeditvi perifernih glavnikov. Tako kot zgoraj opisano, je primeren za razvijalce začetnike. O njej ni kaj več povedati.

STM32LDISCOVERY

STM32LDISCOVERY je vredna evolucija prejšnje plošče. Tukaj je zanimivo:
- mikrokrmilnik STM32L152RBT6 (Cortex M3, 32 MHz, flash 128Kb, RAM 8Kb, EEPROM 4Kb)
- vmesniki: USB, USART, SPI, I2C;
- 8 časovnikov;
- 24-kanalni 12-bitni ADC;
-12-bitni DAC;
- ura realnega časa;
- LCD krmilnik 8x40
- vgrajen ST-link/V2.
Na plošči so nameščeni:
- LCD zaslon 24x8;
- 4 LED diode;
- 2 gumba;
- tipkovnica na dotik;
- 2 enoredna glavnika s prostimi nastavki.
Ločeno bi rad povedal o USB: krmilnik podpira polno hitrost USB 2.0, načine gostitelja in naprave, kar je redko videti v MK tega razreda.
Pravzaprav je plošča najboljša možnost za delo z jedrom Cortex-M3, zato jo lahko varno vzamete, saj je cena nizka.

STM32F3DISCOVERY

STM32F3DISCOVERY spada v naslednjo generacijo razvojnih plošč podjetja STM in ima naslednje lastnosti:
- mikrokrmilnik STM32F303VCT6 (Cortex M4, 72 MHz, flash 256 KB, RAM 48 KB)
- ura realnega časa;
- vgrajen ST-link/V2;
- 13 časovnikov;
- 12 kanalni krmilnik DMA;
- 4 ADC;
- 4 operacijski ojačevalniki;
- vmesniki: CAN, USB 2.0, USART/UART, SPI, I2C;
- 87 linij GPIO.

- vrata USB po meri;
- 3-osni merilnik pospeška in 3-osni geomagnetni senzor v enem ohišju;
- 3-osni žiroskop;
- 10 LED diod;
- 2 gumba;
- 2 dvovrstna glavnika.
Zelo zanimiva plošča, veliko možnosti za eksperimentiranje. Na splošno je mnenje o njem dobro, vendar njegova osredotočenost na sledenje fizičnega stanja in položaja močno zmanjša možnosti za eksperimentiranje, čeprav lahko razširitveno ploščo zlahka naredite sami.

STM32F4DISCOVERY

S to ploščo sem imel največ priložnosti delati in bila mi je bolj všeč kot druge - vplivala je njena celovitost.
Evo, kaj je:
- mikrokrmilnik STM32F407VGT6 (Cortex M4, 168 MHz, flash 1 MB, RAM 192 KB)
- vgrajen ST-link/V2;
- časovniki;
- krmilnik DMA;
- ADC/DAC;
- vmesniki: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
Plošča vsebuje naslednje zunanje naprave:
- vrata USB po meri;
- 3-osni merilnik pospeška;
- 8 LED diod;
- 2 gumba;
- 2 dvovrstna glavnika;
- avdio DAC z ojačevalnikom razreda D;
- vsesmerni digitalni mikrofon.

Kot sem zapisal zgoraj, je ta plošča postala glavna zame, bil sem zadovoljen z zmožnostjo dela z zvokom in merilnikom pospeška.

Nadaljnje lekcije bodo temeljile na tej tabli.

Povzetek.
Če se odločite začeti delati s ploščami za odpravljanje napak STM, vam svetujem, da vzamete STM32F4DISCOVERY, po mojem mnenju ima največjo funkcionalnost. Nadaljnji članki bodo temeljili posebej na delu z njim. V bližnji prihodnosti bodo napisani članki o naslednjih temah:
- delo z GPIO, časovniki, prekinitve itd.;
- delo z UART, SPI, I2C in 1-wire vmesniki na primerih realnih naprav, kot so zasloni, GPS in GSM moduli, temperaturni senzorji, komunikacija z računalnikom preko RS-232 in še veliko več.
Končni cilj tega cikla je ustvariti razširitveno ploščo za STM32F4. Vsa vdelana programska oprema in diagrami vezij bodo javno dostopni.