Rad sa LCD indikatorom na STM32L-Discovery razvojnoj ploči. Obuka na STM32 do bloka razdjelnika frekvencija

Opće informacije

STM32L-Discovery razvojna ploča ima displej sa tečnim kristalima (LCD) sa šest znakova od 14 segmenata, 4 dvotočka (Colon), 4 tačke (DP), 4 trake (Bar). Svi segmenti su kombinovani u grupe COM0, COM1, COM2, COM3 od 24 segmenta. Svaka grupa ima svoju zasebnu „zajedničku žicu“.


Mikrokontroler STM32L152RBT6 je instaliran na ploči za otklanjanje grešaka. Mikrokontroler ima ugrađen LCD kontroler koji upravlja monohromatskim LCD indikatorima.
LCD kontroler:

  1. Omogućava vam da konfigurirate učestalost ažuriranja (frejmova - frekvencija kojom se ažuriraju informacije na LCD-u)
  2. Podržava statički i multipleks način upravljanja
  3. Podržava instalacija softvera kontrast
  4. Omogućava više nivoa upravljačkog napona (do četiri)
  5. Koristi dvostruko baferovanje, omogućavajući da se podaci u LCD_RAM ​​registrima ažuriraju u bilo kom trenutku tokom izvršavanja programa bez narušavanja integriteta prikazanih informacija

Memorijski registri LCD kontrolera

Mikrokontroler STM32L152RB ima posebne LCD_RAM ​​registre, pohranjene informacije u kojima odgovaraju grupi segmenata COM0 - COM3. Svaka grupa odgovara dva 32-bitna registra. Ovaj broj registara omogućava mikrokontroleru da kontroliše LCD c veliki iznos segmente od onih instaliranih na razvojnoj ploči.

Za upravljanje LCD-om sa 176 segmenata koriste se 4 grupe COM0 - COM3 od po 44 segmenta; za upravljanje LCD-om sa 320 segmenata koristi se 8 grupa COM0 - COM7 od po 40 segmenata.



STM32L-Discovery razvojna ploča koristi LCD sa 96 segmenata, podijeljenih u 4 grupe COM0 - COM3 od po 24 segmenta.


LCD na razvojnoj ploči STM32L-Discovery je povezan na način da se koriste bitovi S40, S41 drugog LCD_RAM ​​registra u svakoj grupi i bitovi S0-S27 prvog LCD_RAM ​​registra. Kako bi se smanjio broj korištenih registara, informacije iz bitova S40-S43 će biti zapisane u slobodne bitove S28-S31 korištenjem funkcije ponovnog preslikavanja.

Blok razdjelnika frekvencije

Blok razdjelnika frekvencije (Frequency generator) vam omogućava da postignete različite brzine kadrova na LCD-u u rasponu od 32 kHz do 1 MHz. Sljedeće se može koristiti kao izvor tajming signala:
  1. Vanjski niskofrekventni generator sa frekvencijom od 32 kHz (LSE. Low speed external)
  2. Interni generator niske frekvencije sa frekvencijom od 37 kHz (LSI. Interna mala brzina)
  3. Eksterni RF generator sa djeliteljima frekvencije 2,4,8 i 16 i maksimalnom frekvencijom od 1 MHz. (HSE. Eksterna velika brzina)
Za postizanje preciznog vremena i smanjenje pomaka napona jednosmerna struja Kroz LCD segmente, izvor signala vremena mora biti stabilan. LCDCLK signal sata se šalje LCD kontroleru. Frekvencija taktnog signala je podijeljena prema faktorima podjele koji su postavljeni PS, DIV bitovima LCD_FCR (Frame Control Register) registra. Rezultirajuća frekvencija na izlazu bloka djelitelja frekvencije izračunava se po formuli:

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

Brzina kadrova se izračunava pomoću formule:

F Okvir =f ck_div *dužnost

Gdje je radni ciklus radni ciklus - omjer trajanja impulsa i njegovog perioda. Tokom jednog kadra, informacije iz LCD_RAM[x], LCD_RAM ​​itd. registara se uzastopno prikazuju na LCD-u. Za LCD koji je instaliran na razvojnoj ploči, u jednom okviru LCD kontroler mora emitovati informacije iz 4 grupe segmenata COM0 - COM3, stoga će trajanje kontrolnog impulsa za jednu grupu biti 1/4 trajanja okvira, tj. duty=1/4.

LCD kontrola

Postoje dva načina za kontrolu LCD-a - statički način kontrole i multipleksni način upravljanja. Sa statičkom indikacijom, svaki segment indikatorskog bita je povezan sa izlazom mikrokontrolera. U odnosu na LCD, na STM32LDiscovery ploči za otklanjanje grešaka, potrebno je 6 * 14 = 84 pinova mikrokontrolera (isključujući dvotočke, tačke i trake). Zbog korištenja ovolikog broja pinova, povezivanje drugih perifernih uređaja će postati nemoguće. STM32L152RB mikrokontroler ima 64 pina. U multipleksnom načinu upravljanja (dinamički način upravljanja), identični segmenti indikatorskih cifara se kombinuju u grupe. Informacija se prikazuje zbog naizmjeničnog osvjetljenja segmenata indikatorskih cifara, sa frekvencijom koja nije vidljiva ljudskom oku.

Multipleks kontrola vam omogućava da kontrolišete veliki broj segmenata. Umjesto zasebnog upravljanja svakim elementom, oni se mogu adresirati po redovima i stupcima (COM i SEG), čime se pojednostavljuje upravljački krug, jer svaki segment ne zahtijeva vlastitu kontrolnu liniju. Da biste uključili odabrani segment, na njega se moraju primijeniti razlike potencijala COM i SEG. Primjer rada prve znamenke indikatora (indikator prikazuje "1:"):


Prva cifra indikatora u trenutku t 0


Prva cifra indikatora u trenutku t 1


Prva cifra indikatora u trenutku t 2


Opšti dijagram povezivanja segmenata na LCD pinove


Dijagram povezivanja LCD pinova na portove mikrokontrolera

Za SEG vodove koristi se upravljački napon, čiji je broj nivoa određen koeficijentom prednapona. LCD na razvojnoj ploči koristi višestruki način upravljanja sa duty=1/4 i bias=1/3. Duty i bias vrijednosti se postavljaju preko LCD_CR (Control Register) registra u DUTY i BIAS bitovima.

Vježbajte

Konfigurisanje portova mikrokontrolera

Za kontrolu LCD-a, portovi mikrokontrolera moraju biti konfigurirani na odgovarajući način:
  1. Do izlaza
  2. Korišćenje funkcije AF 11 Alternate
  3. Imati izlazne frekvencije na portu od 400 kHz
  4. Koristite način rada push-pull
  5. Nema pull-up otpornika
Kada port radi u alternativnom funkcijskom modu, izlazni bafer podataka porta kontrolira se signalima koji dolaze s periferije. Datoteka zaglavlja stm32lxx.h CMSIS biblioteke sadrži opis svih perifernih registara, kao i strukturu za pristup njima.

LCD pinovi su povezani na GPIOA (PA1-PA3,PA8-PA10,PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3,PC6-PC11) portove mikrokontrolera. Da bi LCD radio, signal sata mora biti dostavljen na odabrane portove. GPIO portovi mikrokontrolera se taktiraju sa AHB magistrale RCC (Reset and Clock Control) sistema - sistema takta i resetovanja. Signal takta se isporučuje postavljanjem odgovarajućih bitova u registru RCC_AHBENR (registrator za omogućavanje perifernog sata AHB).

Registrirajte RCC_AHBENR (slika prikazuje prvih 15 bitova)

Za GPIOA, GPIOB, GPIOC portove morate postaviti 1 na 0, 1, 2 bita registra.

Zatim ću dati kod za pisanje informacija u registar koristeći bitmasku i heksadecimalne kodove. Upotreba bitmaski je praktičnija, ali rad sa heksadecimalnim kodovima omogućava vam da shvatite suštinu rada sa registrima.

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

Za označavanje načina rada porta koristi se registar GPIOx_MODER (registar režima GPIO porta) (x = A..H). Svi bitovi registra su grupisani u MODERy grupe, gdje je y pin broj odgovarajućeg porta. Portovi moraju biti konfigurirani za alternativni način rada, tj. u grupi odgovornoj za pin postavite vrijednost na 10. Za GPIOA port morate konfigurirati pinove 1-3,8-10,15, odnosno postaviti 1 na 3,5,7,17,19, 21,31 cifra.


Registrirajte GPIOx_MODER (registar načina rada GPIO porta)

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_1_); ili GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
Portovi mikrokontrolera moraju biti prebačeni u push-pull mod. Da biste to učinili, potrebno je postaviti 1 u GPIOx_OTYPER registru (GPIO port izlazni registar) u bitovima odgovornim za pinove.


Registrirajte GPIOx_OTYPER (registar tipa izlaza GPIO porta)

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); ili GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
Obje opcije utiču na odabrane igle. (Za GPIOA port, pinovi 1-3.8-10.15 su konfigurisani). Ako trebate prebaciti sve pinove porta u push-pull način rada, možete upisati sljedeću vrijednost u registar:
GPIOA->OTYPER = 0x0;
Za specificiranje frekvencije izlaza informacija na port, koristi se registar GPIOx_OSPEEDR (GPIO izlazni registar brzine porta). Svi bitovi registra su grupirani u grupe OSPEEDRy, gdje je y pin broj odgovarajućeg porta. U ovom radu frekvenciju treba postaviti na 400 kHz tj. u grupi odgovornoj za pin, postavite vrijednost na 00.


Registrirajte GPIOx_OSPEEDR (registar izlazne brzine GPIO porta)

GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPEEDRIO_OSPEEEDROSPE10); ili GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Ako trebate podesiti izlaznu frekvenciju na portu na 400 kHz za sve pinove, možete upisati vrijednost u registar:
GPIOA->OSPEDR = 0x0;
Da biste onemogućili pull-up i pull-down otpornike za odabrane pinove, koristite GPIOx_PUPDR registar (GPIO port pullup/pull-down registar). Svi bitovi registra su grupisani u PUPDRy grupe, gdje je y pin broj odgovarajućeg porta. Da biste onemogućili pull-up otpornike u grupi odgovornoj za pin, postavite vrijednost na 00.


Registrirajte GPIOx_PUPDR (povlačenje/povlačenje GPIO porta)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR15); ili GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Ako trebate onemogućiti pull-up otpornike za sve pinove, možete upisati vrijednost u registar:
GPIOA->PUPDR = 0x0;
Za korištenje alternativne funkcije za portove mikrokontrolera, dva registra GPIOx_AFRL (GPIO alternativna funkcija niskog registra), odgovorna za niske pinove (0 do 7) i GPIOx_AFRH (GPIO alternativna funkcija visokog registra), odgovorna za visoke pinove (8 do 15) , koriste se. Svi bitovi registra su grupirani u grupe AFRLy i AFRHy, gdje je y pin broj odgovarajućeg porta. Portovi moraju biti konfigurisani da koriste alternativnu funkciju AF11, za to grupa odgovorna za pin mora biti postavljena na 1011.


Registrirajte GPIOx_AFRL (GPIO alternativna funkcija niskog registra)


Registrirajte GPIOx_AFRH (GPIO alternativna funkcija visokog registra)

Da biste to učinili, morate upisati sljedeće vrijednosti u registre:
GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB; /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

AFR = 0xBBB0 – upisuje vrijednost u registar GPIOx_AFRL.
AFR = 0xB0000BBB – upisuje vrijednost u registar GPIOx_AFRH.

Postavke za odgovarajuće pinove GPIOB i GPIOC portova se vrše na isti način.

Podešavanje LCD kontrolera

Prilikom rada sa LCD kontrolerom, kao i sa drugim perifernim uređajima, na njega mora biti dostavljen taktni signal. Signal sata se takođe dovodi u sistem za upravljanje napajanjem. Kontroler i sistem za upravljanje napajanjem koriste APB1 sabirnicu za taktiranje. Da biste omogućili taktiranje u registru RCC_APB1ENR (APB1 registar omogućavanja perifernog sata), morate postaviti 1 u bitovima 9 i 28.


Registrirajte RCC_APB1ENR (registrator za omogućavanje perifernog sata APB1)

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; ili RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
Da bi LCD kontroler radio, potrebno je odrediti izvor signala sata. Izvor je specificiran u registru RCC_CSR. Podrazumevano, upisivanje u ovaj registar je onemogućeno. Zaštita od pisanja u registru RCC_CSR uklanja se u registru kontrole snage PWR_CR. Registar RCC_CSR kontrolira izvore takta RTC i LCD kontrolera
Upisivanje u registar RCC_CSR je omogućeno postavljanjem bita 8 registra PWR_CR na 1.


Registar PWR_CR (PWR registar kontrole snage)

PWR->CR |= PWR_CR_DBP; ili PWR->CR |= 0x100; /* 0x100 =1 0000 0000 */
Da biste promijenili izvor takta LCD kontrolera (i RTC takta), prvo morate resetovati izvor takta postavljanjem RTCRST bita (podešavanje 1 na bit 23) u registru RCC_CSR (Registar kontrole/statusa).


Registrirajte RCC_CSR (Registar kontrole/statusa)

RCC->CSR |= RCC_CSR_RTCRST;
Ili upisivanjem vrijednosti u registar pomoću operatora “|=”, jer vrijednost po
zadani registar se razlikuje od 0x0:
RCC->CSR |= 0x800000; /* 0x800000 = 1000 0000 0000 0000 0000 0000 */
Da biste odabrali novi izvor sata, morate ukloniti RTCRST bit:
RCC->CSR &= ~RCC_CSR_RTCRST; ili RCC->CSR &= ~0x800000;
Kao izvor taktnog signala odabran je eksterni generator niske frekvencije. Da biste uključili generator u registru RCC_CSR, morate postaviti LSEON bit (postaviti od 1 do 8 bita):
RCC->CSR |= RCC_CSR_LSEON; ili RCC->CSR |= 0x100; /* 0x100 = 1 0000 0000 */
Nakon uključivanja generatora, potrebno je neko vrijeme da se stabilizira. Spremnost generatora se provjerava hardverskim postavljanjem bita LSERDY u registru RCC_CSR:
while(!(RCC->CSR&RCC_CSR_LSERDY));
Odabir vanjskog generatora niske frekvencije kao izvora takta vrši se postavljanjem registra RCC_CSR na 01 u RTCSEL grupi:
RCC->CSR |= RCC_CSR_RTCSEL_LSE; ili RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
U LCD kontroler morate instalirati željeni način rada pristrasnost. Da biste to učinili, u registru LCD_CR (LCD kontrolni registar) trebate postaviti vrijednost 10 u BIAS grupi. Prije instaliranja bitova, potrebno je očistiti bitove od “smeća”.


Registar LCD_CR (LCD kontrolni registar)

Reset bitovi:
LCD->CR &= ~LCD_CR_BIAS; ili LCD->CR &= ~0x60;
Odabir načina rada bias=1/3 koristeći bitmask:
LCD->CR |= LCD_CR_BIAS_1; ili LCD->CR |= 0x40;
Postavite način rada=1/4. Da bismo to učinili, prvo resetujemo sve bitove:
LCD->CR &=~LCD_CR_DUTY; ili LCD->CR &= ~0x1C;
Postavite vrijednost 011 na DUTY grupu registra LCD_CR za
mod duty=1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; ili LCD->CR |= 0xS;
Aktiviramo funkciju preraspodjele pinova. Da biste to učinili, postavite 1 do 7 bitova LCD_CR registra:
LCD->CR |= LCD_CR_MUX_SEG; ili LCD->CR |= 0x80;
Postavljamo vrijednosti koeficijenata frekvencijske podjele LCDCLK taktnog signala. Vrijednosti koeficijenta se postavljaju u LCD_FCR registru (LCD okvir kontrole registra). Prvo također brišemo sve bitove, a zatim postavljamo potrebne.


Registar LCD_FCR (kontrolni registar LCD okvira)

LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; ili LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
Vrijednosti koeficijenata podjele frekvencije satnog signala postavljene su jednake ck_ps = LCDCLK/16, ck_div = ck_ps/17. Da biste to učinili, postavite 1 na 24 i 18 cifara:
LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
Da biste postavili željeni nivo kontrasta, morate postaviti vrijednost 010 u CC grupi, također prvo obrisati bitove iz starih vrijednosti:
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; ili LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
Nakon postavljanja svih vrijednosti, potrebno je neko vrijeme da se sinkronizira LCD_FCR registar. Sinhronizacija registra se provjerava postavljanjem FCRSF bita u hardveru u LCD_SR (LCD statusni registar) registru.

Registar LCD_SR (LCD statusni registar)

Dok(!(LCD->SR&LCD_SR_FCRSR));
Kao izvor napona za LCD, biramo interni step-up pretvarač da formira V lcd. Da biste to učinili, prvi bit LCD_CR registra (LCD kontrolni registar) je postavljen na 0:
LCD->CR &= ~LCD_CR_VSEL; ili LCD->CR &= ~0x2;
Rad LCD kontrolera je omogućen postavljanjem bita LCD_CR registra (LCD kontrolni registar) na 0:
LCD->CR |= LCD_CR_LCDEN; ili LCD->CR |= 0x1;
Nakon što instalirate interni pojačavajući pretvarač kao izvor napona, morate pričekati dok ne bude spreman. Spremnost se provjerava hardverskim postavljanjem RDY bita u LCD_SR registru (LCD statusni registar):
while(!(LCD->SR&LCD_SR_RDY));
Nakon što dozvolite LCD kontroleru da radi, morate pričekati dok ne bude spreman. Spremnost se provjerava hardverskim podešavanjem ENS bita u LCD_SR registru (LCD statusni registar):
while(!(LCD->SR&LCD_SR_ENS));

Formiranje slike na LCD-u

Svi segmenti indikatora su kombinovani u grupe COM0 - COM3 sa po 24 segmenta (SEG0-SEG23). Informacije o segmentima se pohranjuju u LCD_RAM ​​registre memorije LCD kontrolera. Ožičenje štampana ploča je takav da brojevi segmenata ne odgovaraju brojevima bitova LCD_RAM ​​registara.

Da biste prikazali 1 u prvoj cifri LCD-a, trebate osvijetliti segmente 1B, 1C. Segment 1B pripada grupi COM0, segment 1C pripada grupi COM1. Stoga se informacije o njima moraju upisati u registre RAM (LCD_RAM0), RAM (LCD_RAM2). Segment 1B je odgovoran za LCD izlaz LCDSEG22, informacije o kojem se pohranjuju u SEG40 bit RAM registra (LCD_RAM1). Koristeći funkciju ponovnog preslikavanja, segment LCDSEG22 će biti dodijeljen bitu SEG28 RAM registra (LCD_RAM0). 1C segment je odgovoran za LCD izlaz LCDSEG1, informacije o kojima se pohranjuju u SEG1 bit RAM registra (LCD_RAM2).

LCD->RAM= 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
Prije upisivanja vrijednosti u memorijske registre, potrebno je provjeriti da li je završen prethodni prijenos podataka na LCD. Da biste to učinili, provjerava se UDR (zahtjev za ažuriranjem prikaza) registra LCD_SR (LCD statusni registar). LCD kontroler ima dva izlazna bafera, informacije se unose u prvi bafer i izlaze na LCD iz drugog bafera. UDR bit se postavlja tokom prijenosa iz prvog bafera u drugi, štiteći LCD_RAM ​​registre od upisivanja:
while(LCD->SR & LCD_SR_UDR);
Nakon upisivanja informacija u registre LCD_RAM, potrebno je postaviti UDR bit u LCD_SR registru (LCD statusni registar) (postaviti 1 do 2 bita):
LCD->SR |= LCD_SR_UDR; ili LCD->SR |= 0x4; /*0x4 = 100 */

Za mučenje i proučavanje ovog uređaja. Ne pre rečeno nego učinjeno. Šal je sakupljen i krenuli smo. Oh da! Tema našeg razgovora se okrenula upoređivanju dva MK-a. Ovaj iznad je protiv ATmega328. Zašto baš oni? Oba MK-a su u paketu TQFP-32. (Istina, ATmega328 takođe dolazi u DIP paketu)
Sada pogledajmo pobliže njihovu unutrašnjost. Radi boljeg razumijevanja, prikupio sam sve potrebne podatke u jednoj tabeli.

Opcije ATmega328 STM32F030K6T6
Dubina bita 8 bit 32 bita
FLASH 32kb 32kb
SRAM 1kb 4kb
EEPROM 512b -
Tajmer 8 bit 2 kom -
Tajmer 16 bit 1 PC 16 kom
PWM 3 kanala 6 kanala
USART 1 PC 1 PC
SPI 1 PC 1 PC
I2C 1 komad (TWI) 1 PC
ADC 8 kanala 10 bit 16 kanala 12 bit
Ishrana 2,7 - 5,5 2,4 - 3,6
Brzina 0 - 16MHz 48MHz sa eksternim 4 - 32MHz
Cijena 160 - 170 rub. 80 - 140 rub.
Kao što možete vidjeti iz tabele, STM32 je dosta zanimljiviji i bogatiji od AVR-a. Zaista postoji jedna sitnica. STM32 nema EEPROM, ali ima DMA koji jednostavno potpuno ubija AVR. Istina, AVR se može pohvaliti Arduinom i jednostavnim programiranjem. Ne raspravljam se, ali STM32 ima STM32Cube, koji generiše kod za IAR i brine se za cijelu rutinu postavljanja perifernih uređaja. I poslednji ekser u kovčeg AVR-a je RTOS. Da, možete ga instalirati i na AVR, ali morate to shvatiti, ali u STM32 čekiramo "FREERTOS" kutiju i to je to. Sam sistem će uraditi sve što je potrebno, a mi samo treba da kreiramo niti i upišemo kod u njih. Pa, ovo je samo za početak. U stvari, tamo je sve malo komplikovanije. Ukratko, sviđa mi se STM32 i kako bih vas konačno pridobio za ovu platformu, bacivši Arduino u ladicu vašeg stola, napravit ću ploču od početka do kraja i pokazati vam kako da radite s njom. Oh, zaboravio sam. Svi STM32 imaju SWD debugger. Ovo su tri žice SWDIO, SWCLK, GND i možete skočiti kroz linije koda direktno u hardveru, a ne kao ATmega328 virtuelno u Proteusu. Da biste to učinili, potreban vam je samo ST-LINK univerzalni programator. Može se koristiti ako kupite Discovery ploču ili poseban programator. A sada sa riječi na djela.
Šema. Veći
Napravio sam ovu ploču kao modul za moju ploču za otklanjanje grešaka za AVR. Ali možete to ponoviti tako što ćete ploču distribuirati po vlastitom nahođenju (postavit ću projekt za DipTrace na kraju članka). Šta je na dijagramu. A dijagram pokazuje jednostavan uprtač kao za AVR. 8 MHz kvarc sa dva 20p kondenzatora. Kao i kod AVR-a, sklop napajanja za ADC podršku je sastavljen. Resetirajte kolo kao AVR. Jedina razlika je BOOT kolo. Za razliku od AVR-a, svi STM32 imaju ugrađen hardverski bootloader. Po defaultu je povezan na USART. Odnosno, ako pritisnete BOOT0 pin na napajanje i ponovo pokrenete MK, tada pomoću programa Flash Loader Demonstrator možete flešovati MK bez programatora. Ova funkcija korisno ako već imate spreman i radni uređaj i trebate ažurirati firmver, tada vam je potreban samo USB USART adapter. Mnogi ljudi ne žele da se petljaju sa STM32 jer napajanje nije više od 3,6 volti. Gluposti. Ako pogledate pin tablicu, primijetit ćete da sve noge mogu dobiti 5 volti bez posljedica. Idemo dalje.

A ovako izgleda instaliran na ploči.

Sada povezujemo ST-LINK-GA programator na SWD konektor.

Sada kada je sve spremno, preuzmite najnoviju verziju sa ST web stranice (link na samom dnu stranice). Instalirajte i pokrenite.

Kliknite na Novi projekat. I u prozoru koji se pojavi nalazimo naš kontroler. Kliknite OK.

Nakon malo razmišljanja. Program će prikazati ovakav prozor.

Neću opisivati ​​šta i zašto, jer je to tema posebnog članka. Sada, na primjer, samo uradi ono što ti pokažem. Šta da radimo. Mi ćemo pokrenuti operativni sistem i u jednoj niti ćemo treptati LED. Neka vrsta "Heloy Word" iz topa.))) Da biste to učinili, u lijevom prozoru kliknite na znak plus pored natpisa "FREERTOS" i stavite kvačicu na padajuću listu.

Štoviše, čim se odabere vanjski kvarc, na desnoj strani kontrolera noge na koje ga trebate objesiti bit će istaknute zelenom bojom. Sljedeće što trebate učiniti je odabrati nogu na kojoj će LED visiti. Odabrao sam port B i pin 0. I našao sam grabulje.Iz straha, ne znam zašto, okrenuo sam izlazni češalj prve četiri igle naopako. Otuda i zabuna na portu B. Ovaj problem pogađa samo moju ploču. Ali ništa, ovo nije spriječilo MK da radi. I tako konfigurišite pin. Činjenica je da kod STM-a svi pinovi mogu poprimiti gomilu vrijednosti, ali ako dodirnete diskretni ulaz/izlaz, onda mogu postojati tri opcije za izlaz. Izlaz u zraku, izlaz s povlačenjem na napajanje plus, izlaz sa povlačenjem na zajedničku sabirnicu. Podrazumevano, STM32CubeMX visi nogu u vazduhu. Pa, neka bude, samo trebamo provjeriti rad i pokazati snagu STM32. Da biste konfigurisali nogu, potrebno je da kliknete levim tasterom miša na nju i izaberete GPIO_Output u prozoru koji se pojavi. Ako je MK premali, možete okrenuti volan i povećati ga.)))

Sljedeći korak je podešavanje MK takta. Činjenica je da je STM32 vrlo nejasan po ovom pitanju. Za razliku od AVR-a, STM32 ima kvarc na ulazu sa frekvencijom od 4 do 32 MHz, a na magistralama se može overclockati na 48 MHz. Unutar MK-a postoji veoma složen sistem taktiranja, ali STM32CubeMX nam opet dolazi u pomoć. Idite na karticu Konfiguracija sata i konfigurišite je kao na slici ispod.

To je sve. Kliknite na ikonu zupčanika na vrhu.

Pojavit će se ovakav prozor.

I ovdje sam zaboravio reći. Preuzmite i instalirajte IAR za sebe. Može se preuzeti od zvaničnika, ali je smanjen u količini koda, ili se može naći u torentima. Ili ako imate puno viška novca, možete kupiti licencu. Pa, mislim da će mnogi krenuti putem CodeVisionAVR-a. Općenito, ovo prepuštam vašem nahođenju. Imam verziju 7.40. Vratimo se na kocku. U prozoru dajte naziv projektu, ali samo latinicom, IAR ne voli ruska slova u putanjama. I navedite gdje će se projekt pohraniti. U IDE prozoru treba da izaberete (a to je podrazumevano) EWARM. Kliknite OK. Program razmišlja, a zatim prikazuje ovakav prozor. Bla bla bla. Općenito, kliknite na otvaranje projekta (za one koji su u rezervoaru, srednje dugme).

Prozor će nestati, a umjesto toga će se pokrenuti IAR i naš projekat. Na lijevoj strani idite na Aplikacija->Korisnik i pokrenite main.c. Ova hrpa koda je ono što je STM32CubeMX generirao za nas.

I šta sad sa ovim užasom? Ali za ovo nam je potreban čitav niz članaka))) A sada samo nalazimo ovaj dio koda.

Ovo je naš jedini tok. U telu za petlju(;;) brišemo jedinu funkciju osDelay(1); i umjesto toga pišemo ovaj kod. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
osDelay(500);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
osDelay(500);

Divno. Sada samo kliknite na dugme sa zelenom strelicom u gornjem desnom uglu i sačekajte kompilaciju i preuzimanje.

Ako je sve ispravno i bez grešaka, program će sastaviti cijeli projekt, kreirati sve što je potrebno i učitati firmver u MK. Nakon toga će ići u mod za otklanjanje grešaka. Evo ga. San AVR muškarca. Ako imate neodoljivu želju da ga koristite, onda možete jednostavno ići korak po korak na hardveru, red po red. A ako želite da vidite kako program radi, pritisnite krstić u gornjem levom uglu i uživajte u treptanju LED-a.

To je sve. Mikrokontroleri se mogu kupiti po najnižoj cijeni, čak 78 rubalja po komadu u prodavnici ChipResistor. Pa ako hoćete jeftinije, postoji i mala veleprodaja. Od 35 komada već za 50 rubalja.
Projekat za DipTrace.
I naravno video.


gost 31.12.15 10:35

Nedavno sam htio napraviti mjerač frekvencije na ATMEGA16 plus eksterni 8-bitni brojač na logici 74, ali nije bio dovoljno brz. Ne mogu podnijeti pisanje na asembleru; ograđivanje eksternog brojača sa 16 bita je muka u dupe.AVR je prosli vek,nije jeftin kontroler.podrzacu autora,AVR je Faza je prosla,kupio sam i stm32f100 chip plus CP2103 USB adapter chip,uskoro ce svi odustati od AVR-a.

Alexey 31.12.15. 12:26

Ne slažem se. Ipak, Arduino se još uvijek razvija i mnogi su navučeni na njega, a ovaj drugi radi na AVR-u. Odlazak na STM je kao prelazak na sljedeći nivo. Da tako kažem, od vrtića do škole.

ANONIMNO 12.02.16 10:44

AVR i STM32 su procesori koji se međusobno ne takmiče. Vaš tanjir ne sadrži najvažniji parametar - ovo je trenutna potrošnja!! A gledajući ih, možeš pustiti suzu. Atmega 328 - – Aktivni način rada: 0,2 mA – Režim gašenja: 0,1 µA – Način uštede energije: 0,75 µA (uključujući 32 kHz RTC) STM32F030K6T6 48 MHz - Aktivni način rada: periferni uređaji na 23.3mA isključeni periferni uređaji: 23.3mA isključeni 0,048 mA STM32 nemilosrdno troši električnu energiju - grubo govoreći, 100 puta više od AVR. Ne možete napajati STM32 uređaj iz baterije. Ali AVR će raditi mjesecima. Tako da je teško odustati od AVR-a. Sretno svima.

Alexey 2/12/16 10:54

I niko ne predlaže da napustimo AVR. Ja samo pokazujem razliku na periferiji. Još uvijek održavam AVR biblioteku i još uvijek imam ATMega8A kao glavni MCU.

Sergej 24.02.16 18:02

Po mom mišljenju, nekako je čudno porediti novi STM32 sa penzionisanim AVR-om. Ako želite da uporedite STM32 sa ATMEL kontrolerima, onda ih uporedite sa ATSAM porodicom, ali ne i sa AVR.

Andrej 24.02.16 18:06

Ko je ovaj penzioner? AVR je živ i nastavit će živjeti ko zna koliko dugo. A gledajući tabelu, po mom mišljenju poređenje je više na periferiji, a ne na arhitekturi.

Alexey 24.02.16 19:04

Pa počinje. Hajde sada da razgovaramo o AMD-u i Intelu.

Sergej 24.02.16 22:02

Na čvorištu je jedan "stručnjak" napisao da AVR nema paralelnu magistralu za povezivanje standardnog LCD-a, ali STM32 ima...

Alexey 24.02.16 22:36

Šta znači standardni LCD? Da li se radi o FSMC-u? Dakle, ovo nije samo za ekran, već i za memoriju. Samo paralelni autobus. AVR ga također ima, na primjer Mega8515. SRAM se može povezati na njega preko latch registra.

Sergets 25.02.16 06:24

Aleksej, o čemu ja pričam?! Čini se da čak ni ne pokušavate da shvatite značenje mojih poruka.

Alexey 25.02.16 09:38

Pa, koja je svrha upoređivanja dva identična mikrokontrolera različitih kompanija? Oba su na ARM jezgru. Ako ste zaista izbirljivi, onda zaista morate uporediti AVR sa STM8. Zatim sam se držao blizine periferije, faktora oblika i cijene. I samo drugačija arhitektura.

Adlan 03.06.16 17:40

Zdravo. Pomozite, molim vas, ko može. Instalirano najnoviju verziju Kuba 4.15, F1 biblioteke 1.4.0. Kreirani prazan projekat u EWARM-u se ne kompajlira - ima više od stotinu grešaka. šta bi to moglo biti? Hvala ti [email protected]

Alexey 06/03/16 20:48

Adlane, prva stvar koju treba da uradite je da otpremite projekat koji se neće kompajlirati.

Doc 18.07.16 21:51

"Istina je da se AVR može pohvaliti Arduinom i jednostavnim programiranjem." Čime se može pohvaliti? ;D

Alexey 19.07.16 11:41

Ovo je glupo poređenje. Prvo, STM ima analog Arduina koji se zove nukleo. Programi se pišu u online IDE direktno preko pretraživača. Ali ako su prednosti kamena lično, onda. Radna frekvencija jezgre je 72 MHz, AVR nije mogao ni sanjati o takvoj brzini. Naravno, ako trepnete LED, onda nema razlike, ali ako pokrenete osovinu i gomilu periferije, AVR će otpuhati. Kapacitet bita, 32 je daleko od 8. Periferni uređaji na STM-u mogu sadržavati 3 I2C, 3 SPI, 6 UART, USB, CAN, Ethernet. Gotovo sve ima mogućnost remapiranja, odnosno prenošenja na druge noge mk. Postoji i DMA, ovo je nezavisni koprocesor za rad sa periferijama. Dakle, AVR prekidi nervozno puše sa strane. Postoji hardverski SDIO za punopravan rad sa CD karticama, a ne ISP sa štakom u AVR-u. Uopšteno govoreći, ima još mnogo toga, ali najveći kamen u bašti AVR-a je otpornost na buku. Izbaciti AVR kablom koji vodi u blizini od elektromotora nije lako, ali STM treba isprobati. Stoga ne bih preporučio da budete sarkastični s Arduinom.

gost 11.08.16 23:27

MICROCHIP apsorbirao AVR!))))))))))

Alexey 8/12/16 08:35

Zakasnili smo s vijestima, kao prije pet godina.

Vladimir 17.08.16 22:56

Aleksej! U januaru 2016. Microchip je kupio Atmel za 3,56 milijardi dolara.Kojih 5 godina?

Alexey 18.08.16 10:30

To je de jure, ali de facto traje od 2008. godine. Tako da sam stvarno pogriješio, ne prije 5 godina, nego prije 8 godina.))))

Vladimir 18.08.16 23:53

Aleksej!Počeo sam da prelazim na stm32!A što se tiče potrošnje u autonomnom režimu, on savetuje da se ne taktiraju sve, tada će se struja potrošnje smanjiti.

Oleg 16.11.09 22:31

U datashetu na STM-u nisam pronašao grafikone potrošnje CLK sistemskog takta kao u AVR-u - a prema onim tablicama koje postoje, STM32 potpuno gubi i u normalnom iu Idle modu. Da, i ovaj STM32 nema takt od 72 MHz - samo 48 max, to je sve, pa čak i sa 32 bita 8 beatnik AVR - ispada bolje, a usput, proizvođač u datasheetu nije napisao koliko ciklusa takta u STM32 mašinskom ciklusu koji ima, pa ako se ispostavi da su 2 takta u odnosu na 1 za AVR - onda uzmite u obzir da je 48/2 = 24 stvarnih MHz - skoro isto kao i 20 MHz za AVR. Dakle, pitanje je - gdje je čudo ovog STM32 o kojem svi pričate?

ANONIMNO 09.11.16 23:03
Alexey 10.11.16 00:23

Ne želim ni da se raspravljam. Šta je bolje Intel ili AMD? Ili Zhiguli ili Volga? STM ima hardverski USB, CAN, Ethernet, SDIO i gomilu drugih perifernih uređaja o kojima AVR može samo sanjati. Na kraju, tu je DMA kao nezavisni koprocesor sa direktnim pristupom memoriji ispred kojeg svi AVR prekidaju nervozni dim sa strane. Na primjer, prva serija ima 3 UART-a, 2 SPI, 3 I2C na ploči. Postoji remap portova i ne morate da brinete kako da rastavite ploču. Ako voliš raditi sa AVR-om, onda radi ko god ti smeta. I dan-danas pravim mega osmine za male projekte i ne žalim se. O da, zalijepi AVR pored startera i gledaj kako mu od smetnje oduva glavu. AVR nema EMI zaštitu. Stoga su PIK-ovi uvijek bili ugrađeni u auto alarme, jer AVR u takvim uvjetima umire. Zašto se svađati, to je mrtav broj.

Kornet 27.11.16 21:22

Pa, usput, Arduino već postoji na STM32. Ovo je Amperka i svakakvi Espruino u JS) Štaviše, ako je mikročip uzeo Atmel, pa, jebi ih

Alexey 16.11.27 21:44

Ime Espruino parodira Arduino, najpoznatiju hobi platformu u to vrijeme, ali Espruino nije kompatibilan s klasičnim Arduino Uno ni mehanički ni programski.(citat iz Amperke)
Imam i Nucleo ploču i ona također nema nikakve veze sa Arduinom, osim geometrije same ploče)))
Općenito, u suštini koristim MK koji je prikladan za trenutni zadatak.

Andrej 20.12.16 22:50

Ko voli preplatiti: vrijedi attiny2313-20 - 2Kb-flash /128bit-ram/16bit_ timer -1/8bit_ timer -1 =2,1$ vs stm32f103c8t6 64Kb-flash/20KbIT-sram za vremensko upravljanje dur (+16B) -kanalni PWM mod ) -4/ADC-2/72MHz CPU/=2.3$.Po mom mišljenju, skoro je nemoguće napraviti mjerač impedanse za RLC kolo pomoću AVR-a ili ima 10 kamenčića.Ali možete to sa STM i FFT (DMA pomaže).Probao sam nekako napraviti frekventni mjerač na Mega10 (preciznost 1 herc) - jednostavno nije bio dovoljno brz (ili instalirati eksterni 32-bitni brojač sa pomačnim registrom - gdje su dimenzije Odustao sam od AVR-a prije godinu dana, AVR je, ispostavilo se, za bogate ljude.

Andrej 20.12.16 22:53

ANONYMOUS je napisao - "A evo još jednog citata iz opisa STM32 na ruskom - "...sa
momenat
primanje
prekida
prije
počeo
izvršenje
prvo
timovi
rukovalac
prekida
je potrošen
samo
dvanaest
ciklusa
sat
signal"

Ovo je tačno, ali pomnožite dva 32-bitna broja sa avr - jasno 8-10 ciklusa takta!

Alexey 20.12.16. 23:31

Da, već mi je žao što je ovaj halivar počeo.))))

Aleksandar 21.12.16 00:27

Pročitala sam komentare i zapamtila.
Dvoje djece u pješčaniku
Jedna duduka!
Drugo, bip!
Prvo, Duduka! (intonacija prijeteća)
Drugo, BIBIKA! (Sa još izražajnijom intonacijom)
Prva DUDUKA! (već vrišti)
Druga BIBIKA!!! (skoro da plačem)
....
Ova bitka je gotova, oboje stoje i plaču, jedan jače od drugog.)))

Val 02/10/17 01:43

Koja će to biti frekvencija ako petljate bez odlaganja?
dok (1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
}

Alexey 17.02.10 10:07

Onaj u APB autobusu

Igor 06/08/17 22:33

Pa hajde da odmah integrišemo laptope u embedded sisteme, stotine puta su bolji od STM-a, a tu je samo pakleno puno periferije, vec ima Wi-Fi i bluetooth pa cak ni programeri nisu potrebni, odmah je monitor sa tastaturu za pisanje programa i pokretanje odmah, a programeri i debugeri nisu potrebni.
To je kao da kupujete bager za ličnu upotrebu na svojoj dači da biste PONEKAD iskopali par rupa dubokih pola metra.
Stavljanje STM-a u termostat, sat, vagu, pa, po mom mišljenju, to nije normalno. Usput da, kako bi bilo trajna memorija, pa pravim termostat, podešavam temperaturu, pa se gase lampice, pa šta, podešavanja su izgubljena. Ali u ugrađenim sistemima koji se moraju jednom konfigurirati za daljnji rad, vrijednosti moraju biti sačuvane zauvijek

Alexey 06/09/17 08:25

Pa, na primjer, STM32F030F4P6 čip-dip košta 48 rubalja, a direktni analogni ATtiny2313 košta 98 ​​rubalja. Mislim da će bilo koji od njih biti dovoljan za izradu termostata. A kompenzacija memorije za STM može biti u bilo kojem temperaturnom senzoru. Da, barem u istom DS18B20. Što se tiče laptopa, svaki terminal za prihvat plaćanja ima instaliran PC sa operativnim sistemom i monitorom. Dakle, postoje čak i takvi sistemi. Prilikom odabira MK, prije svega, odaberite onaj koji je jeftiniji. Ako je ovo hobi, onda možete kupiti Arduino da se ne zamarate sa lemljenjem, a kada se planira puštanje sistema u proizvodnju i proizvodnja u stotinama, onda se svaki peni računa. A preplatiti 50 rubalja za MK kada je njegova cijena 48 je luksuz koji se ne može priuštiti.

Ruslan 17.06.17 21:46

Alexey, zašto si izabrao IAR programsko okruženje?
Koje okruženje je bolje za početnika da odabere (tako da ima puno savjeta kao u Atmel Studio)?

Alexey 17.06.17 22:07
Ruslan 17.06.17 22:56
Ako nisam izgledao "loše", onda mi dajte link gdje mogu pogledati ili pročitati kako to učiniti!
Još bolje, napravite video, mislim da će mnogi početnici (i ne samo) biti zainteresovani da ga pogledaju!
Hvala unaprijed!
Alexey 08/05/17 10:19
Ruslan 17.11.22 12:17

Mislio sam na ovo https://www.youtube.com/watch?v=wOIlhRd-vN8
5 - 7 minuta!!!

Ruslan 17.11.22 12:18

Alexey, molim te, reci mi kako da radim sa "enum" nabrajanjima, inače takve informacije nema nigdje i u tvojim video zapisima "C za male" također nema, ali stvarno mi treba!
Kada sam se igrao sa AVR-ima, nikada nisam vidio takvo čudo kao što je nabrajanje, ali sada me zanimaju STM-ovi, a ima ih puno! I nema informacija kako raditi s njima!
Evo primjera iz stvarnog koda:


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

Gdje je nabrajanje StatusCode:


enum StatusCode: bajt (
STATUS_OK , // Uspjeh
STATUS_ERROR , // Greška u komunikaciji
STATUS_COLLISION , // Otkriven je sudar
STATUS_TIMEOUT , // Istek u komunikaciji.
STATUS_NO_ROOM , // Međuspremnik nije dovoljno velik.
STATUS_INTERNAL_ERROR , // Interna greška u kodu. Ne bi trebalo da se desi ;-)
STATUS_INVALID , // Nevažeći argument.
STATUS_CRC_WRONG , // CRC_A se ne podudara
STATUS_MIFARE_NACK = 0xff // MIFARE PICC je odgovorio sa NAK.
};

Ovo je iz Arduino biblioteke (C++), ali Keil se kune u to!
Kako ispravno napisati povratak funkcije nabrajanja?

Ruslan 17.11.22 12:29

I kako deklarirati jedan od argumenata u funkciji koja je nabrajanje:


void PCD_WriteRegister(PCD_Register reg, vrijednost bajta);

Gdje je naveden PCD_Register:


enum PCD_Registar: bajt (
// Stranica 0: Komanda i status
// 0x00 // rezervirano za buduću upotrebu
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 je, kako ja razumijem, nabrajanje, ali nije deklarirano nigdje u kodu i ne razumijem odakle dolazi!
Procitao sam dosta stranica na Internetu i pronasao informacije da se ove enumeracije mogu zamijeniti definicijama, ali sam ipak htio znati kako sa njima raditi!!!

Ruslan 17.11.22 12:35

Radujem se vašem odgovoru!
Možda snimite video kako se radi sa njima, pa da radi i drugima, mislim da će video biti jako koristan jer takvih videa nema (barem ih nisam našao)!

Dmitrij 17.11.28 22:02

"jednostavno programiranje"

Zanimljiv organ za programiranje kontrolera. Općenito, nije jasno kako je bilo moguće uporediti 32-bitnu sa 8-bitnom. Kao Porsche Cayenne sa Zarporožetom.

Alexey 29.11.17. 10:24

Možete porediti, možete. Samo treba uzeti u obzir da je u ovom poređenju Porsche jeftiniji od Zaporožeca. Što se urologije tiče, pikantnije je. Tako da neću popravljati.

Konstantin 23.12.17. 00:06

Ruslane, ne razumijem kako tražiš i ne nađeš ništa (očigledno ne tražiš). Ovo su same osnove jezika C (ne samo za MK, već i za računare). Pročitajte knjigu Kernighana i Ritchieja, tamo je sav C savršeno opisan.
I niko neće odgovarati na vaša pitanja, ovo je elementarna stvar.

ANONIMNO 18.02.11 16:27

Zašto upoređujete 32-bitni ST MK sa 8-bitnim Atmelom. Glupo poređenje. To je ekvivalentno upoređivanju 32-bitnog Atmel AT91SAM sa 8-bitnim STM8, čak i ako se uzme u obzir da Atmel ima 32 još snažnija pražnječa

Alexey 13.02.18. 12:18

Jer u vrijeme pisanja 8-pojasni ST-ovi nisu bili u prodaji, a mega i STM32 imaju iste cijene.

STM32_Dev 19.06.19. 13:59

Pa, AVR-u je potrebno 4-5 ciklusa da uradi istu stvar!!! Samo. I ovdje se opet ispostavlja da je AVR napravljen bolji od STM32, sa svojim napuhanim taktom, a STM32 nema EEPROM unutra kao AVR

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

Čini se da muzejska atmega broji svojih 5 taktnih ciklusa duže od 12 taktnih ciklusa STM32)))

Zar STM32 nema eprom? Sigurno? STM32L152 - 8kB eprom! Šta je sa atmegom? 512 bajtova? Oh, tako mnogo!!! Ne znam ni šta da napišem tamo. Hajde da razmislimo... mmm... 16 varijabli od po 4 bajta)) Pa, to je samo grmljavina među kontrolerima))

SIM31 30.06.19 19:29

Što se tiče potrošnje, možete i porediti, nova atmega i attiny su vrlo ekonomični.
I sve ima svoju upotrebu. Ako vam je potrebna struja, uzmite Raspbery Pi 4 i ne brinite, Python ima još više mogućnosti, čak i postavite punopravni web server, čak i pokrenite Quake 3D.
Ako trebate obraditi tokove podataka, postoji pls (pogledajte projekat "Mars Rover" "Mars Rover 2")
Autor ima gomilu pozitivnih stvari, ali činjenica da je Arduina življa od svih živih znači da nije sve tako jednostavno.


Radio amateri već dugi niz godina koriste osmobitne mikrokontrolere PIC i AVR familije. Popularni su zbog niske cijene, detaljne dokumentacije, lakoće programiranja i lakoće instalacije. Međutim, vrlo često postoje slučajevi kada snaga takvog mikrokontrolera nije dovoljna za rješavanje zadatka. Najjednostavniji primjer je mjerač frekvencije ili generator signala na mikrokontroleru, gdje maksimalna izmjerena ili generirana frekvencija direktno ovisi o brzini obrade ili izlaza informacija.

Osim brzine, osmobitni mikrokontroleri imaju i druga ograničenja, na primjer, mnogi AVR modeli imaju samo jedan hardverski serijski port, koji ne dozvoljava primanje informacija s vanjskog uređaja i istovremeno slanje rezultata njegove obrade potrošaču. Da ne spominjemo takve „banalne“ stvari kao što je prikaz informacija na grafičkom indikatoru, što zahtijeva velike resurse i brzine i memorije. Nakon analize brojnih ovakvih ograničenja, autor je došao na ideju prelaska na mikrokontrolere iz porodice STM32.

Na primjer, razmotrite dva mikrokontrolera iste cjenovne kategorije - STM32F103C6 i ATmega328P.

Tabela 1

Tip mikrokontrolera

Veličina procesora

Korak olova, mm

Frekvencija takta, MHz

Volumen FLASH memorije. KB

Količina RAM-a, KB

USART broj

Broj 16-bitnih tajmera

Broj I/O linija

Približna cijena, rub.

Njihovi uporedni parametri dati su u tabeli. 1. Rezultati poređenja su čak donekle iznenađujući. 32-bitni mikrokontroler ne samo da je moćniji od osmobitnog mikrokontrolera u gotovo svim aspektima, već je i jeftiniji. Naravno, lemljenje mikrokontrolera s pinom od 0,5 mm kod kuće nije tako lako. Srećom, u većini slučajeva to nije potrebno - na tržištu postoji mnogo tipova razvojnih ploča s mikrokontrolerima STM32 porodice, dovoljnih za različite primjene. Pogledajmo ih detaljnije.

STM32F4-DISCOVERY

Ova ploča (prikazana na slici 1) je možda najpogodnija za početnike koji proučavaju STM mikrokontrolere. Prvo, ima veliki skup perifernih uređaja. Pored mikrokontrolera, ploča sadrži mikroelektromehanički akcelerometar, mikrofon, audio DAC, dva USB konektora, dugme i četiri LED diode.

Pinovi mikrokontrolera su izvedeni na kontaktne podloge za montažu pin konektora na lijevoj i desnoj ivici ploče, što olakšava povezivanje svih potrebnih eksternih uređaja na njih. Mikrokontroler STM32F407VGT6 instaliran na ploči ima vrlo dobre parametre: 1 MB FLASH memorije, 192 KB RAM-a i frekvenciju takta od 168 MHz.

Konačno, ploča je opremljena ugrađenim ST-LINK/V2 debagerom, koji se može koristiti za otklanjanje grešaka u programima ne samo na mikrokontroleru na ploči, već i na mikrokontrolerima iste porodice koji se nalaze na drugim pločama. Prebacivanje na njih vrši se pomoću uklonjivog kratkospojnika i SWD konektora.

Cijena ploče je oko 800 rubalja, što se može smatrati sasvim prihvatljivim.

STM32F103RBT6 razvojna ploča

Sljedeća zanimljiva opcija je razvojna ploča sa mikrokontrolerom STM32F103RBT6 (slika 2).

Nešto je slabiji od onog koji je instaliran na prethodnoj ploči - frekvencija takta od 72 MHz, 128 KB FLASH memorije i 20 KB RAM-a, ali su periferni uređaji vrlo zanimljivi. Tu je TFT ekran osetljiv na dodir rezolucije 320x240 piksela i dijagonale 2,8", ugrađeni USB port za razmenu informacija sa računarom, slot za SD memorijsku karticu, kvarcni sat od 32768 Hz, pretinac za baterija sata realnog vremena i ST-LINK konektor za otklanjanje grešaka u programima.

Cijena ove ploče je također oko 800 rubalja, ali treba napomenuti da nema ugrađeni debager. Da biste preuzeli programe, morate ili kupiti poseban ST-LINK debuger ili umjesto toga koristiti ploču STM32F4-DISCOVERY o kojoj je bilo riječi

Maple Mini

Eksterna sličnost ove ploče (slika 3) sa dobro poznatim Arduino modulima je upadljiva. I to nije slučajnost.

Maple Mini ploča je dizajnirana kao zamjena za Arduino Nano. Programski jezik i razvojno okruženje za AVR familiju mikrokontrolera instaliranih u Arduinu prilagođeni su STM porodici. Idite na http://leaflabs.com/docs/maple-q uickstart.html za detaljne informacije o Maple IDE programskom jeziku i razvojnom okruženju.

Razvojna ploča ima STM32F103CBT6 mikrokontroler koji radi na 72 MHz, 128 KB FLASH memorije i 20 KB RAM-a, što je nesumnjivo više od bilo kojeg Arduino modula. A još je veći plus što je razvojno okruženje ostalo gotovo nepromijenjeno.

Odvojeno, napominjemo da uprkos svojoj minijaturnoj veličini, Maple Mini nudi veoma raznolike periferije: 34 I/O linije, dva SPI i dva I2C kanala interfejsa, tri serijska porta. To mu omogućava da se uspješno koristi u raznim amaterskim razvojima. Zahvaljujući svojoj maloj veličini, Maple Mini se može ugraditi direktno u uređaj koji se razvija.

Originalna Maple Mini ploča može se kupiti za 35 USD na web stranici njenih programera. Dostava će koštati još 5 dolara. Kopija ploče napravljene u Kini koštaće upola manje.

Softver

Postoji nekoliko opcija za razvojna okruženja koja se mogu koristiti za pripremu programa za mikrokontrolere STM32 porodice:

Komercijalni IAR Embedded Workbench, AtollicTrueSTUDIO, Keil, itd. Ovi potpuni proizvodi su prilično skupi, sa cijenom licence koja počinje od 1000 eura, ali postoje i besplatne demo verzije sa ograničenjem obima programa koji se razvija; za većinu jednostavni projekti sasvim su dovoljni;

Besplatni Eclipse sa ARM-GCC kompajlerom zahteva netrivijalnu konfiguraciju kompajlera pre upotrebe. Jedini plus za danas je mogućnost rada ne samo u Windows-u, već iu Linuxu;

Besplatan CooCox IDE (CoIDE) zasnovan na istom Eclipse editoru. Učitava i otklanja greške u programima preko ST-LINK-a. Za razliku od prethodne opcije, CoIDE ne zahtijeva nikakva posebna podešavanja i radi odmah nakon instalacije. Ova opcija je najpogodnija i vrijedi je koristiti.

Koristimo CooCox IDE da kreiramo primjer programa za STM32F4-DISCOVERY ploču koji implementira klasično LED treptanje prvog programa za bilo koji mikrokontroler. Na ploči STM32F4-DIS-COVERY nalaze se četiri LED diode, spojene su na pinove PD12-PD15 mikrokontrolera. Natjerajmo ih da trepću naizmjenično.

Korak 1. Pokrenite razvojno okruženje CoIDE i kreirajte projekat. Sa padajuće liste prikazane na sl. 4, odaberite STM32F407VG mikrokontroler.

Korak 2. Kao što je prikazano na sl. 5, odaberite komponente koje će se koristiti u projektu. Glavne su GPIO (ulaz-izlaz), C biblioteka (osnovne funkcije jezika C) i M4 Core (funkcije jezgra procesora). Kada aktivirate komponentu, CoIDE automatski kopira potrebne datoteke u fasciklu projekta, što je vrlo zgodno.

Korak 3. Unošenje teksta programa. Prilično je kratak i dat je u tabeli. 2.

Kao što vidite, sve je jednostavno i očigledno. Oni koji su napisali programe za AVR mikrokontrolere vjerovatno će vidjeti poznate dizajne - inicijalizaciju portova koji ukazuju na smjer (ulaz ili izlaz), glavnu petlju u kojoj se izvode potrebne radnje. Generalno, sintaksa programa u potpunosti odgovara jeziku C, za koji postoji više nego dovoljno literature. Također postoji mnogo članaka o programiranju za STM32 na Internetu. Mnogi primjeri se isporučuju s razvojnom pločom i mogu se koristiti i kao uzorci.

Nakon unosa teksta programa klikom na ekransko dugme "Download to flash", on se preuzima u mikrokontroler. LED diode na ploči počinju da trepću. Zasebno, vrijedno je napomenuti mogućnosti otklanjanja grešaka - tačka prekida se može postaviti bilo gdje u programu, možete pokrenuti program korak po korak, gledajući vrijednosti varijabli.

Naravno, ovaj primjer nije idealan. Na primjer, možete koristiti prekide tajmera za kontrolu treptanja LED dioda, što oslobađa glavnu programsku petlju za druge zadatke. Oni koji žele to mogu sami shvatiti.

Zaključak

Generalno, nakon prvog upoznavanja, mikrokontroleri porodice STM32 ostavili su vrlo prijatan utisak. Ispostavilo se da sve nije tako komplikovano, a praktičnost razvojnog okruženja, proces otklanjanja grešaka i veliki broj standardnih funkcija čak su donekle podsjetili na prelazak s Ms DOS-a na Windows - čini se da su opće točke iste, ali sve je mnogo praktičniji i funkcionalniji.

Ali glavni nedostatak ove porodice za amaterski razvoj je i dalje premali nagib igle. Dizajniranje i lemljenje ploče s nagibom igle od 0,5 mm kod kuće je vrlo netrivijalan zadatak. Ali po sadašnjim cijenama, ploče za otklanjanje grešaka s već montiranim mikrokontrolerima prilično su dostupne svakom radio-amateru.

Vrijedi li sve pretvoriti u STM i 32-bitnu arhitekturu? Naravno da ne. Postoje zadaci za koje je ATtiny sasvim dovoljan. Ali, na primjer, za analizu spektra u domaćem SDR prijemniku ili za primanje i prijenos velikih količina informacija preko mreže, mnogo je efikasnije odmah koristiti moćni mikrokontroler kako ne bi naišli na nedostatak memorije ili performansi kada poboljšanje uređaja.

Na temelju Cortex jezgre, počeli su aktivno stjecati popularnost među profesionalnim i početnicima programera uređaja na mikrokontrolerima. Postoji nekoliko razloga za to:
- niska cijena u odnosu na konkurente;
- veliki broj ugrađenih interfejsa;
- lakoća programiranja i visoka pouzdanost.
Ali postoji i jedan važan nedostatak - svi STM mikrokontroleri se ne proizvode u DIP paketima, što često jednostavno preplaši početnike, jer je kod kuće problematično napraviti ploču sa stazama manjim od 0,3 mm. Ovakvo stanje je dovelo do pojave na tržištu velikog broja ploča za otklanjanje grešaka, kako od ST Microelectronics (Discovery), tako i ploča koje proizvode treće strane (Olimex, Pinboard). Odabrao sam Discovery iz tri razloga:
- relativno niska cijena (ploča se može kupiti od 300 rubalja);
- dobra izrada (iako ima zamjerki na ožičenje, ali one nisu toliko značajne);
- mnogi izvori i primjeri su objavljeni na web stranici proizvođača;
- prisustvo ugrađenog programatora (ne morate ga posebno kupovati).
Svrha prve lekcije je pomoći programeru početniku da odabere ploču za otklanjanje grešaka, a u budućnosti - podučiti osnove programiranja.
Pa, idemo.

STM32F0DISCOVERY

Ova ploča je objavljena u februaru 2012. kako bi privukla programere koji su prethodno koristili 8-bitne mikrokontrolere, čime su popunili ovu nišu. Ne mogu reći ništa loše ili dobro o njoj. Obična ploča, jeftina, odlična je za početak. Ima sljedeće karakteristike:
- mikrokontroler: STM32F051R8T6 (Cortex M0, 48 MHz, flash 64 KB, RAM 8 KB);
- ugrađen ST-link/V2, koji se može koristiti odvojeno od ploče;
- napaja se sa USB-a ili sa eksternog 3/5V izvora;
- 4 LED diode i 2 dugmeta;
- interfejsi: USART, SPI, I2C, HDMI;
- tajmeri 16 i 32 bita;
- svi izlazi su usmjereni na dva jednoredna češlja.
Zapravo, takva ploča je već prilično zastarjela i preporučuje se da je uzimate samo na samom početku treninga.

STM32VLDISCOVERY

Od prethodne ploče razlikuje se samo po procesoru STM32F100RBT6B (Cortex M3, 24 MHz, flash 128 KB, RAM 8 KB) i rasporedu perifernih combs. Baš kao i onaj o kojem smo gore govorili, pogodan je za programere početnike. Nema više šta da se kaže o njoj.

STM32LDISCOVERY

STM32LDISCOVERY je dostojna evolucija prethodne ploče. Evo šta je zanimljivo o tome:
- mikrokontroler STM32L152RBT6 (Cortex M3, 32 MHz, flash 128Kb, RAM 8Kb, EEPROM 4Kb)
- interfejsi: USB, USART, SPI, I2C;
- 8 tajmera;
- 24-kanalni 12-bitni ADC;
-12-bitni DAC;
- sat realnog vremena;
- LCD kontroler 8x40
- ugrađen ST-link/V2.
Na ploču je instalirano sljedeće:
- LCD displej 24x8;
- 4 LED diode;
- 2 dugmeta;
- tastatura na dodir;
- 2 jednoredna češlja sa slobodnim vodovima.
Želio bih posebno reći o USB-u: kontroler podržava USB 2.0 punu brzinu, režime domaćina i uređaja, što se rijetko viđa u MK-u ove klase.
U stvari, ploča je najbolja opcija za rad sa Cortex-M3 jezgrom, tako da je možete sigurno uzeti, jer je cijena niska.

STM32F3DISCOVERY

STM32F3DISCOVERY pripada sljedećoj generaciji razvojnih ploča iz STM-a i ima sljedeće karakteristike:
- mikrokontroler STM32F303VCT6 (Cortex M4, 72 MHz, flash 256 KB, RAM 48 KB)
- sat realnog vremena;
- ugrađen ST-link/V2;
- 13 tajmera;
- 12-kanalni DMA kontroler;
- 4 ADC;
- 4 operaciona pojačala;
- interfejsi: CAN, USB 2.0, USART/UART, SPI, I2C;
- 87 GPIO linija.

- prilagođeni USB port;
- 3-osni akcelerometar i 3-osni geomagnetski senzor u jednom kućištu;
- 3-osni žiroskop;
- 10 LED dioda;
- 2 dugmeta;
- 2 dvoredna češlja.
Vrlo zanimljiva tabla, mnogo mogućnosti za eksperimentiranje. Općenito, mišljenje o njemu ostaje dobro, ali njegov fokus na praćenje fizičkog stanja i položaja uvelike smanjuje prostor za eksperimentiranje, iako možete lako napraviti i sami ploču za proširenje.

STM32F4DISCOVERY

Najviše sam imao priliku da radim sa ovom pločom, i svidela mi se više od ostalih - uticala je njena sveobuhvatna usmerenost.
Evo šta je to:
- mikrokontroler STM32F407VGT6 (Cortex M4, 168 MHz, flash 1 MB, RAM 192 KB)
- ugrađen ST-link/V2;
- tajmeri;
- DMA kontroler;
- ADC/DAC;
- interfejsi: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
Ploča sadrži sljedeće periferne uređaje:
- prilagođeni USB port;
- 3-osni akcelerometar;
- 8 LED dioda;
- 2 dugmeta;
- 2 dvoredna češlja;
- audio DAC sa pojačalom klase D;
- omnidirekcioni digitalni mikrofon.

Kao što sam gore napisao, ova ploča mi je postala glavna, bio sam zadovoljan sposobnošću rada sa zvukom i akcelerometrom.

Dalje lekcije će se zasnivati ​​na ovoj tabli.

Sažetak.
Ako odlučite početi raditi sa STM pločama za otklanjanje grešaka, onda vam savjetujem da uzmete STM32F4DISCOVERY, po mom mišljenju, ima najveću funkcionalnost. Dalji članci će se bazirati posebno na radu s njim. U bliskoj budućnosti će biti pisani članci o sljedećim temama:
- rad sa GPIO, tajmerima, prekidima itd.;
- rad sa UART, SPI, I2C i 1-wire interfejsima koristeći primere stvarnih uređaja, kao što su displeji, GPS i GSM moduli, temperaturni senzori, komunikacija sa računarom preko RS-232 i još mnogo toga.
Konačni cilj ovog ciklusa je kreiranje ploče za proširenje za STM32F4. Svi firmver i dijagrami kola bit će javno dostupni.