Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2016:stm32f429-jpeg

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2016:stm32f429-jpeg [2017/01/15 14:24]
Jan Vorálek [Úvod]
2016:stm32f429-jpeg [2017/01/15 21:04] (aktuální)
Jan Vorálek [Závěr]
Řádek 2: Řádek 2:
 Na vývojové desce 32F429IDISCOVERY implementujte USB mass storage (MSD). Po nahrání JPEG souboru jej dekomprimujte pomocí vhodné knihovny (např. TJpgDec) a zobrazte na displeji vývojového kitu spolu s informacemi o obrázku. Na vývojové desce 32F429IDISCOVERY implementujte USB mass storage (MSD). Po nahrání JPEG souboru jej dekomprimujte pomocí vhodné knihovny (např. TJpgDec) a zobrazte na displeji vývojového kitu spolu s informacemi o obrázku.
 ======Úvod====== ======Úvod======
-Cílem projektu je napsat program pro vývojovou desku STM32F429 Discovery. Po připojení k počítači pomocí USB se má tato deska chovat jako mass storage. Pokud je nahrán obrázek ve formátu JPG, má být s pomocí vhodné knihovny zpracován a zobrazen na LCD displeji. Spolu s obrázkem mají být zobrazeny i základní informace o obrázku.+Cílem projektu je napsat program pro vývojovou desku STM32F429IDiscovery. Po připojení k počítači pomocí USB se má tato deska chovat jako mass storage ​(podobně jako např. flash disk). Pokud je nahrán obrázek ve formátu JPG, má být s pomocí vhodné knihovny zpracován a zobrazen na LCD displeji. Spolu s obrázkem mají být zobrazeny i základní informace o obrázku.
 ======Hardware====== ======Hardware======
-V projektu byla použita vývojová deska 32F429IDISCOVERY s procesorem ​STM32f429ZIT. Součástí desky je LCD displej o rozlišení 320x240 pixelů, který je ovládán pomocí LTDC (LCD TFT Display Controller) periferie procesoru. Dále deska obsahuje paměť SDRAM, která je nezbytná pro uložení obrazu LCD displeje, jelikož interní paměť procesoru nemá dostatečnou velikost. ​+V projektu byla použita vývojová deska 32F429IDISCOVERY s procesorem ​STM32F429ZIT6. Součástí desky je LCD displej o rozlišení 320x240 pixelů, který je ovládán pomocí LTDC (LCD TFT Display Controller) periferie procesoru. Dále deska obsahuje paměť SDRAM, která je nezbytná pro uložení obrazu LCD displeje, jelikož interní paměť procesoru nemá dostatečnou velikost. ​
  
 {{ 2016:​stm32f429-jpeg:​dev_kit.jpg }} {{ 2016:​stm32f429-jpeg:​dev_kit.jpg }}
Řádek 11: Řádek 11:
  
 ======Firmware====== ======Firmware======
-Kostra programu byla vygenerována pomocí programu STM32CubeMX,​ dále byly použity knihovny BSP z STM32CubeF4,​ FatFS a TJpgDec. Jako vývojové prostředí byl použit Embitz s překladačem ARM gcc.+Kostra programu byla vygenerována pomocí programu STM32CubeMX ​[1], dále byly použity knihovny BSP z STM32CubeF4 ​[2], FatFS [3] a TJpgDec ​[4]. Jako vývojové prostředí byl použit Embitz s překladačem ARM gcc.
  
 ====Obsluha SDRAM==== ====Obsluha SDRAM====
-Procesor přistupuje k paměti pomocí periferie FMC (Flexible Memory Controller). Inicializační kód pro FMC byl vygenerován pomocí STM32CubeMX. Bylo však potřeba doplnit funkci provádějící inicializační sekvenci paměti, která závisí na konkrétní použité paměti. Tato funkce (''​void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram)''​) byla převzata z [1].+Procesor přistupuje k paměti pomocí periferie FMC (Flexible Memory Controller). Inicializační kód pro FMC byl vygenerován pomocí STM32CubeMX. Bylo však potřeba doplnit funkci provádějící inicializační sekvenci paměti, která závisí na konkrétní použité paměti. Tato funkce (''​void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram)''​) byla převzata z [5].
 Použitá paměť má kapacitu 8MB a je namapována na paměťový prostor 0xD0000000 až 0xD0800000. Tento prostor byl rozdělen následujícím způsobem: Použitá paměť má kapacitu 8MB a je namapována na paměťový prostor 0xD0000000 až 0xD0800000. Tento prostor byl rozdělen následujícím způsobem:
   *0xD0000000 až 0xD012FFFF- Paměť pro obrazová data LCD displeje (screen buffer)   *0xD0000000 až 0xD012FFFF- Paměť pro obrazová data LCD displeje (screen buffer)
Řádek 30: Řádek 30:
  
 ====Zpracování a zobrazení obrázku==== ====Zpracování a zobrazení obrázku====
-Pro zpracování obrázku byla použita knihovna TJpgDec. Tato knihovna používá pouze dvě API funkce, ''​JRESULT jd_prepare(...)''​ pro přípravu dekomprese a ''​JRESULT jd_decomp(...)''​ pro samotnou dekompresi jpg obrázku. ​ Dále je třeba ​vytovořit dvě callback funkce pro čtení a zápis dat (''​UINT in_func(...)'',​ ''​UINT out_func(...)''​). Postup zpracování obrázku závisí na jeho rozlišení,​ které je zjištěno při přípravě k dekompresi. Mohou nastat tyto možnosti:+Pro zpracování obrázku byla použita knihovna TJpgDec. Tato knihovna používá pouze dvě API funkce, ''​JRESULT jd_prepare(...)''​ pro přípravu dekomprese a ''​JRESULT jd_decomp(...)''​ pro samotnou dekompresi jpg obrázku. ​ Dále je třeba ​vytvořit dvě callback funkce pro čtení a zápis dat (''​UINT in_func(...)'',​ ''​UINT out_func(...)''​). Postup zpracování obrázku závisí na jeho rozlišení,​ které je zjištěno při přípravě k dekompresi. Mohou nastat tyto případy:
   -**rozlišení obrázku souhlasí s rozlišením displeje**\\ Nejjednodušší případ, obrázek je vykreslován na displej již při dekompesi.   -**rozlišení obrázku souhlasí s rozlišením displeje**\\ Nejjednodušší případ, obrázek je vykreslován na displej již při dekompesi.
-  -**jeden rozměr obrázku souhlasí s rozměrem displeje, druhý je menší**\\ Obrázek je také vykreslován už při dekompresi, je však posunut tak, aby byl na středu displeje. Před začátkem dekomprese je obsah displeje smazán, po stranách obrázku jsou tedy černé pruhy.+  -**jeden rozměr obrázku souhlasí s příslušným ​rozměrem displeje, druhý je menší**\\ Obrázek je také vykreslován už při dekompresi, je však posunut tak, aby byl na středu displeje. Před začátkem dekomprese je obsah displeje smazán, po stranách obrázku jsou tedy černé pruhy.
   -**obrázek je menší než displej, nebo naopak alespoň jeden rozměr obr. je větší, ale méně než dvojnásobek rozměru displeje**\\ Obrázek je dekomprimován do pomocného bufferu. Rozlišení je potom upraveno pomocí bilineární transformace a obrázek je vykreslen.   -**obrázek je menší než displej, nebo naopak alespoň jeden rozměr obr. je větší, ale méně než dvojnásobek rozměru displeje**\\ Obrázek je dekomprimován do pomocného bufferu. Rozlišení je potom upraveno pomocí bilineární transformace a obrázek je vykreslen.
   -**alespoň jeden rozměr obrázku je větší než dvojnásobek příslušného rozměru displeje**\\ Obrázek je také dekomprimován do pomocného bufferu. Rozlišení obrázku je ale při dekompresi sníženo na 1/2, 1/4 nebo 1/8. To je nutné kvůli omezené velikosti paměti. Tento dělící poměr je zvolen tak, aby rozlišení po dekompresi bylo větší než rozlišení displeje, ale menší než dvojnásobné. Rozlišení dekomprimovaného obrázku je potom přizpůsobeno rozlišení displeje pomocí bilineární transformace a obrázek je zobrazen. Obrázek může mít rozlišení až 5120x3840 bodů (šestnáctinásobek rozlišení displeje).   -**alespoň jeden rozměr obrázku je větší než dvojnásobek příslušného rozměru displeje**\\ Obrázek je také dekomprimován do pomocného bufferu. Rozlišení obrázku je ale při dekompresi sníženo na 1/2, 1/4 nebo 1/8. To je nutné kvůli omezené velikosti paměti. Tento dělící poměr je zvolen tak, aby rozlišení po dekompresi bylo větší než rozlišení displeje, ale menší než dvojnásobné. Rozlišení dekomprimovaného obrázku je potom přizpůsobeno rozlišení displeje pomocí bilineární transformace a obrázek je zobrazen. Obrázek může mít rozlišení až 5120x3840 bodů (šestnáctinásobek rozlišení displeje).
 Při dolním okraji displeje jsou potom vypsány údaje o obrázku - název souboru, rozlišení obrázku (původní) a velikost souboru. Při dolním okraji displeje jsou potom vypsány údaje o obrázku - název souboru, rozlišení obrázku (původní) a velikost souboru.
 ====Hlavní smyčka programu==== ====Hlavní smyčka programu====
-Program v hlavní smyčce kontroluje stisk tlačítka. Po stisku tlačítka je odpojeno USB, aby nemohlo být manipulovováno se soubory, zatím co jsou zpracovávány mikrokontrolérem. Následně je prohledán kořenový adresář souborového sytému, zda neobsahuje nějaký soubor s příponou jpg. Předpokládá se přítomnost pouze jednoho obrázku, pokud jich je dostupných více, použije se ten, který je nalezen jako první. Poté je obrázek zpracován a zobrazen na displeji. Následně je vytvořen nový souborový sytém (smazání ​ech souborů) a USB je opět připojeno.+Program v hlavní smyčce kontroluje stisk tlačítka. Po stisku tlačítka je odpojeno USB, aby nemohlo být manipulovováno se soubory, zatím co jsou zpracovávány mikrokontrolérem. Následně je prohledán kořenový adresář souborového sytému, zda neobsahuje nějaký soubor s příponou jpg. Předpokládá se přítomnost pouze jednoho obrázku, pokud jich je dostupných více, použije se ten, který je nalezen jako první. Poté je obrázek zpracován a zobrazen na displeji. Následně je vytvořen nový souborový sytém (všechny soubory jsou smazány) a USB je opět připojeno.
 ======Závěr====== ======Závěr======
-zminit velikost, ​video+Vývoj se obešel bez větších problémů a zadání se podařilo splnit v plném rozsahu. Níže je uvedeno ​video, které demonstruje funkci přípravku na obrázcích s různým rozlišením a poměrem stran. 
 +{{youtube>​-agfH936UVI?​medium}} 
 +Zdrojový kód: {{2016:​stm32f429-jpeg:​mpoa_projekt_voralek.zip}} 
 + 
  
 ======Použité zdroje====== ======Použité zdroje======
 +[1]http://​www.st.com/​en/​development-tools/​stm32cubemx.html
 +
 +[2]http://​www.st.com/​en/​embedded-software/​stm32cubef4.html
 +
 +[3]http://​elm-chan.org/​fsw/​ff/​00index_e.html
 +
 +[4]http://​elm-chan.org/​fsw/​tjpgd/​00index.html
 +
 +[5]http://​www.st.com/​en/​embedded-software/​stm32cubef4.html\\ STM32Cube_FW_F4_V1.14.0\Projects\STM32F429I-Discovery\Examples\FMC\FMC_SDRAM\
 +
 +Obrázek vývojové desky:\\ http://​cz.rs-online.com/​web/​p/​vyvojove-sady-pro-procesory-a-mikrokontrolery/​7892815/​
 +
 +Obrázky použité v demonstračním videu:\\
 +http://​imagedatabase.cs.washington.edu/​demo/​P7180319.jpg\\
 +http://​maxpixel.freegreatpicture.com/​static/​photo/​640/​Nepal-The-Himalayas-Mountain-Mountains-Ama-Dablam-1664805.jpg\\
 +https://​believinginchristjesus.files.wordpress.com/​2013/​08/​eagle.jpg\\
 +https://​clairemcc155.files.wordpress.com/​2013/​10/​bearded-dragon-lizard.jpg\\
 +http://​animal-dream.com/​data_images/​lizard/​lizard4.jpg\\
 +http://​paper4pc.com/?​module=images&​act=downloadResize&​file=nature-wallpapers-hd-wallpaper-3.jpg&​x=5120x2048&​y=
2016/stm32f429-jpeg.1484486676.txt.gz · Poslední úprava: 2017/01/15 14:24 autor: Jan Vorálek