www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

STM32F746 Discovery - kako nastaviti UART interrupt?

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
wackoo
Neznanec
Neznanec



Pridružen-a: Pet 21 Sep 2018 11:17
Prispevkov: 2
Aktiv.: 0.03

PrispevekObjavljeno: Pet Sep 21, 2018 12:10 pm    Naslov sporočila:  STM32F746 Discovery - kako nastaviti UART interrupt? Odgovori s citatom

Programiram STM32F746GDISCOVERY mikrokrmilnik in me zanima, ali je potrebno omogočiti neki globalni interrupt da se lahko ostali interrupti sprožijo. S pomočjo kazalcev sem že nastavil določene registre in sem testiral pošiljanje/sprejemanje znakov preko USART6 povezave (pin PC6 TX, pin PC7 RX) vezja povezanog na računalnik. Na računalniku imam hyperterminal monitor za pošiljanje in sprejem znakov. Testiranje sem izvršil s pooling metodo, zdaj pa bi rad uporabil interrupte.

Npr. rad bi da se interrupt sproži pri sprejemu podatkov. V manualu piše da je potrebno v Control register 1 (USART_CR1) omogočiti Bit 5 RXNEIE (RXNE interrupt enable), ki omogoča naslednje:

1: A USART interrupt is generated whenever ORE=1 or RXNE=1 in the USART_ISR
register

Mene zanima RXNE (Bit 5 RXNE: Read data register not empty) bit v USART_ISR registru. Interrupt se sproži če read data register ni prazen kar pomeni da je sprejel neki podatek. V interrupt funkciji pa sem naredil protokol, kjer se sprejeti podatki shranijo in v isti obliki pošljejo nazaj na računalnik oz. hyperterminal ter se seveda vsi potrebni biti/zastavice resetirajo.

Na drugih forumih predlagajo uporabo knjižnic in funkcij tipa NVIC_EnableIRQ(irq_number). Ne vem kako to naredit s knjižnicami saj pišem lastno kodo in naslove registrov glede na to kar točno hočem da mi mikrokrmilnik naredi. Skratka, težava je v tem da zadeva ne deluje čeprav sem vključil vse potrebne registre. Zanima me ali ve kdo, ali je potrebno omogočiti neki globalni interrupt register da bi ostali interrupti sploh delovali? Ima kdo kakšen nasvet, link ali svoj projekt, ki bi mi lahko bil v pomoč?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mosqito
Član
Član



Pridružen-a: Čet 07 Apr 2016 23:22
Prispevkov: 3223
Aktiv.: 33.20

PrispevekObjavljeno: Pet Sep 21, 2018 1:41 pm    Naslov sporočila:   Odgovori s citatom

Priporočam ti uporabo HAL knjižnice, s katero dosti hitreje narediš to, kar želiš.

Tule so navodila oz. pregled primerov.

Sicer pa preveri:

- ali imaš vklopljen clk v vse preriferne enote (registri v RCC)
- ali imaš omogočen IRQ
- ali imaš prav nastavljen pointer na ISR

Zaporedje inicializacije bi bil nekako tak: /copy paste iz HAL sample kode/
1- Enable peripherals and GPIO Clocks
Enable GPIO TX/RX clock
Enable USARTx clock

2- Configure peripheral GPIO
UART TX, RX GPIO pin configuration

3- Configure the NVIC for UART
Set Priority
Enable IRQ

_________________
Always going the extra mile.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
zaz
Član
Član



Pridružen-a: Pon 06 Apr 2015 14:23
Prispevkov: 89
Aktiv.: 0.81
Kraj: Ljubljana

PrispevekObjavljeno: Sob Sep 22, 2018 7:01 am    Naslov sporočila:   Odgovori s citatom

Spletna stran z zelo uporabnimi primeri:

https://www.fmf.uni-lj.si/~ponikvar/STM32f407.htm
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
wackoo
Neznanec
Neznanec



Pridružen-a: Pet 21 Sep 2018 11:17
Prispevkov: 2
Aktiv.: 0.03

PrispevekObjavljeno: Sre Sep 26, 2018 3:02 pm    Naslov sporočila:   Odgovori s citatom

mosqito Ker nisem strokovnjak v programiranju uCjev HAL knjižnice se mi zdijo zapletene. Če sem dobro opazil STM32Cube omogoča da se s klikanjem v grafičnem okolju nastavijo porti in ostale zadeve pa dobiš kup generirane kode v kateri se potem težko znajdeš.

zaz Primeri so zelo uporabni in sem med njimi našel točno to, kar sem iskal (Serial communication - RS232 primer).

Pravzaprav sem pogrešal samo eno vrstico kode, in sicer

NVIC_EnableIRQ(USART6_IRQn);

Težavo sem odpravil. Hvala za odgovore. Zdaj sledi implementacija ethernet vmesnika pa bom spet potreboval vašo pomoč. Za to bom naredil novo temo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mosqito
Član
Član



Pridružen-a: Čet 07 Apr 2016 23:22
Prispevkov: 3223
Aktiv.: 33.20

PrispevekObjavljeno: Čet Sep 27, 2018 12:13 am    Naslov sporočila:   Odgovori s citatom

Cube MX orodje za grafično nastavljanje je sicer OK, vendar ga nikakor nujno ne rabiš. Tudi meni ne leži "arduino" pristop. Sam tega ne uporabljam pogosto, ampak raje naredim "čisti" source brez 5 nivojskih klicev funkcij preko 7 različnih makrojev zato, da na koncu spremeniš en bit v registru. Uporabne so pa knjižnice HAL, ki so poleg. Tam so tudi template-i za posamezno periferijo (ponavadi označeno po korakih, kaj vse moraš nastavi), ki zelo pomagajo. Če ne drugega, da ne pozabiš kaj od množice nastavitev. Vsekakor je koristno imeti delujoč primer. Če ne drugega, da poženeš debuger, pogledaš registre in potem primerjaš, če si v tvoji kodi prišel do istih nastavitev.
_________________
Always going the extra mile.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 49 dni


Powered by phpBB © 2001, 2005 phpBB Group