|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
wackoo Neznanec
Pridružen-a: Pet 21 Sep 2018 11:17 Prispevkov: 2 Aktiv.: 0.03
|
Objavljeno: Pet Sep 21, 2018 12:10 pm Naslov sporočila: STM32F746 Discovery - kako nastaviti UART interrupt? |
|
|
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 |
|
|
mosqito Član
Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3223 Aktiv.: 33.19
|
Objavljeno: Pet Sep 21, 2018 1:41 pm Naslov sporočila: |
|
|
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 |
|
|
zaz Član
Pridružen-a: Pon 06 Apr 2015 14:23 Prispevkov: 89 Aktiv.: 0.81 Kraj: Ljubljana
|
|
Nazaj na vrh |
|
|
wackoo Neznanec
Pridružen-a: Pet 21 Sep 2018 11:17 Prispevkov: 2 Aktiv.: 0.03
|
Objavljeno: Sre Sep 26, 2018 3:02 pm Naslov sporočila: |
|
|
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 |
|
|
mosqito Član
Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3223 Aktiv.: 33.19
|
Objavljeno: Čet Sep 27, 2018 12:13 am Naslov sporočila: |
|
|
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 |
|
|
|
|
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
|