Fórum témák
» Több friss téma |
A WeTransferrel minden regisztráció nélkül 2GB-ig bármit át lehet küldeni. Arra ráadásul nincs korlát, hogy hány ilyen csomagot akarsz átküldeni. A saját és a címzett e-mail címe kell. Te feltöltöd a fájlokat, a címzett kap egy értesítést ami alapján letöltheti. Pár nap múlva törlődik. Ha titkos a dolog, akkor jelszóval tömörítheted, vagy kitalálhatsz valami trükköt, mert elvileg onnan bárki letöltheti, aki valahogy rábukkan.
A flashbe próbálok írni egy STM32F030-on, de nem megy. Ezzel próbálkoztam:
A törlés működik, mert ha az ST-LINK Utilityvel beírok valamit a flashbe, utána ez a kód törli, és FF lesz minden. A végén megnézem a stat változót, és HAL_OK az értéke, tehát elvileg beírja az értéket. Ennek ellenére a 0x08003800-as címen nincs ott a 0x55aa.
Így kezdd:
Plusz 030 alatt lehet, hogy ezt is törölni kell (FLASH_CR_PER), 042-n nem kell csak a fenti.
A FLASH_ClearFlaget nem találja a fordító. STM32CubeMX-szel csináltam a projektet, gondolom, a HAL drivereket belepakolta, ezért azokat elérem. Szóval a következővel próbálkoztam:
De ugyanúgy nem ír semmit a flashbe.
És ha programból olvasod vissza, akkor sincs meg?
Próbaként write előtt törölt a PER-t.
Szerk: Tehát erase után, write előtt. A hozzászólás módosítva: Máj 13, 2018
És ez volt a megoldás! Köszönöm szépen. (Pedig feltúrtam egy csomó weboldalt, de ezt nem találtam meg.)
Továbbra sem értem, hogy a __HAL_FLASH_CLEAR_FLAG(FLASH_CR_PER); miért nem oldotta meg, a FLASH->CR &= ~FLASH_CR_PER; pedig miért, de egyelőre most örülök, hogy végre működik.
Azért, mert a FLASH_CR_PER nem flag bit, hanem control bit (azért van CR-ben).
Erase előtt kell, hogy Page erase módot engedélyezd: FLASH->CR |= FLASH_CR_PER; Write előtt kell, hogy a Page erase módot letiltsd mielőtt írsz bele: FLASH->CR &= ~FLASH_CR_PER;
De marha vagyok, erre magamtól is rájöhettem volna, ha jobban megnézem a makrót, hiszen a __HAL_FLASH_CLEAR_FLAG nem is a CR regisztert állítja, hanem az SR-t (gondolom, status register).
Még egyszer köszönöm a segítséget.
Srácok ez nekem még nagyon magas.
Borzasztó szövevényes ez a kód generáló progi. (STMCubeMX) Legalább is amit generál kódot, nagyon átláthatatlan. Pl.: most megy az SD, de az istenért nem tudom mellé beizzítani az FSMC-t. Nincs valakinek egy olyan SD FATFS projektje, amit saját maga rakott össze? Mármint olyan, amiben csak a normál alap könyvtárakat használta? STM32F407-et használok. Eddig minden mást sikerült elég egyszerűen beizzítani, de ez a FATFS elég bonyolultnak tűnik, legalább is a sima könyvtárakat használva. (STM32F4 Standard Peripheral Library) SDIO és DMA-ra is szükségem lenne, 4bit-ben használnám az SD kártyát. Előre is köszi. A hozzászólás módosítva: Máj 15, 2018
Én anno csináltam egy áttekintő doksit a FAT kezelésről (a mellékletben)
Valaki megnézné nekem, hogy ez miért nem működik? : Bővebben: Link
Mindig itt akad el:
Még nem értem pontosan mi hogy működik, és PIC-hez képest kicsit nehezebbnek is tűnik. STM32F4 Standard Peripheral Library-t használom, a projektben ez látszik is. IAR-al bütykölgetem, 32F407ZET6 A kártyát már észreveszi és be is tölti, de mikor egy file-t akarok megnyitni, akkor leakad a fent említett sornál, ami a startup_32f4xx.s fájlban van. Így elsőre vagy a megszakítás vagy a DMA-val lehet gondja.. Előre is köszi..
Köszi, a BSP az mire kell?
Az csak akkor kell, ha pl. HDD-t akarok használni? Nem igen értem még, mi mit jelet. A HAL-t sem tudom miért kell. (vagy ez csak valami gyűjtő fogalom?) Lentebb linkeltem a projektem, ha rá tudnál nézni azt megköszönném. Sajna IAR-hoz van..
A HAL elnevezés kicsit trükkös STM32-nél lévén, hogy egyszerre egy gyűjtőfogalom (ilyen szempontból a HAL, az SPL és az LL is HAL [Hardware Architecture Layer]), illetve az ST egyik megoldásának a neve is.
Az általad perferált SPL már nem támogatott, az új mikrokontrollerekre nem készítik el ezért a kódjaid nem lesznek hordozhatóak. A HAL egy magasabb szintű réteg, ezt használja alaphelyzetben a CubeMX. A kód jelentős részét elrejtették könyvtárakban (én nem nagyon szeretem). Az LL (Low Layer) az SPL utódja, egy hardverközeli programozást lehetővé tévő réteg (a nagy része inline függvény, ami direktben a regisztereket piszkálja, ugyanolyan gyors mintha te írnád a regisztereket csak sokkal olvashatóbb a kód).
Sajnos nem ismerem az általad használt „IARt”.
Ezért a programod fordítása elmaradt. (Javaslat: Tanuld meg inkább az Atolicot használni, az többek előtt ismerős.) A programodban lefutatva egy keresést nem találtam a definícióját: void SDIO_IRQHandler (void)???? Ezt általában az: „stm32f4xx_it.c”-ben szokták létrehozni.
Próbálj ebböl ötletet meríteni:
A hozzászólás módosítva: Máj 15, 2018
Igen valóban nincs.. Egy ilyen részt találtam, ami az eredeti programban szerepel mint hivatkozás:
Majd a hivatkozás:
Csatoltam a fájlt amiben megtaláltam. Át lehetne ezt tenni az én kódomba valahogy, hogy meglegyen a kiszolgálás? Csatoltam az eredeti projektet is amiből építkeztem.
Sajnos részemről passzolom a témát.
Nem ismerem ezt a firmvaret, hátha lesz szerencséd és erre jár valaki hozzáértő. (Mondjuk, nekem eszembe se jutna kezdőként rögtön SD botloadert írni!)
Ja nem, dehogy írok bootloader-t. Még..
SD kártya kezelését puskáztam belőle, SPL-t használ, ezért választottam ezt, egyelőre beállítottam a gyári a SD kezelő-t, remélem jó lesz, ha nem, akkor vagyok gondban. Később tudom csak kipróbálni. Már ez is sok segítség volt, hogy rávezettél, hogy hol lehet a hiba. (első hiba)
Értem, köszi a kifejtést.
Egyelőre maradok még az SPL-nél, tanulásnak szerintem jó lesz és majd lehet agyalni merre tovább, de ezek szerint az LL lesz az irány. HAL és a CubeMX annyira szétszórja a kódot, hogy átláthatatlan számomra. (egyelőre) Ráadásul tök nem is akart menni elsőre amiket generált, nem is értettem pontosan miért, no mindegy gondolom ezt is meg kell szokni.
Én inkább a könnyebb utat szoktam választani, gyárilag az Atolicot támogatják!
Abban lehet, hogy te is több segítséget kapnál. Elsőre talán bonyolultabbnak tűnik, de minden megtanulható. És a szétszórtságot inkább felfoghatjuk úgy is, hogy mindennek helye van. Így egy idő után könnyebb lesz megtalálni A hozzászólás módosítva: Máj 16, 2018
Az a baj, minél összetettebb programot használok, annál nehezebben értem meg a működést és annál felületesebb lesz a tudásom.
PIC esetében is az alap, jó nem assemblerben, de alap C-ben írtam meg mint, mind a programrészeket mind pedig a regiszterek basztatását. Nem azt állítom, hogy ma már perfekt megy a PIC-ek programozása, de szereztem annyi ismeretet, ha el is akadok és segítséget kérek, tudom értelmezni a válaszokat. És az adatlapot is elég jól tudom már használni.. Nagyjából ha ezt a szintet el tudom sajátítani ARM esetén is, már örülni fogok. PIC-re nem olyan rég 3 nap alatt megírtam az SD kezelést, +4 nap alatt pedig a teljes FAT16 kezelést. Cserébe tudom, hogy működik egy SD kezelés, részleteiben is és, hogy kezeljem egy ismeretlen környezetben is. Tehát van azért ennek is előnye. Ebben az ARM témában és programozásban viszont végtelen kezdő vagyok, és szeretnék tanulni, de nem úgy, hogy állandóan egy környezet fogja a kezemet, hanem úgy, hogy ha módosítanom kell egy programot, akkor azt megtehessem könnyedén. Ettől független az IAR nem egy végleges és fix környezet, amelyet miden áron használni szeretnék, de végtelen egyszerű és ez tetszik benne. Remélem azért valaki tud majd így is segíteni nekem.. A hozzászólás módosítva: Máj 16, 2018
GCC alatt ez szépen működik (a saját kis tanulmány RTOS-omból másoltam). IAR alá nem garantálom, de ahogy mások is írták, IAR specifikus dolgokkal itt jó eséllyel magadra maradsz.
Köszi a kapott kódot sikerült beizzítanom 1 óra alatt.
A kérdésem a következő, látom azért hogy miként épül fel, de megkérdezem inkább az a biztos. A kód az DMA-val kezeli 4bit-en az SD kártyát igaz, jól értelmezem? A hozzászólás módosítva: Máj 16, 2018
A 4bit-es mód igaz. De DMA nincsen.
Megszakításban megy az SD kezelése. Hiszen ezt a hibát kerested: (SDIO_IRQHandler)? Ezért olyan példát kaptál A hozzászólás módosítva: Máj 16, 2018
Igen ez volt az eredeti hiba, de azt nem sikerült megoldanom.
Nem működött egyik változattal sem, kipróbáltam a lehetőségeket, valószínűleg más hiba is van benne. Amit küldtél kódot azt egy az egyben élesztettem fel, és az működik. Ahogy nézem a felépítését mint ha kezelné a DMA-t. Innen gondolom: SD_Init() -> SD_GPIO_Configuration()
Igaz ennél mélyebben nem látom át, de tán ez azt jelenti, hogy DMA-val megy a kezelés. Illetve még az SD_Inti() függvényben van 2 lényeges rész:
A hozzászólás módosítva: Máj 17, 2018
Jobban belegondolv, igazad lehet:
Én hiányoltam a DMA interupt kidolgozását a programban. Ha nincs interupt? Csak lekérdezéssel tudjuk meg mikór van kész a DMA átvitel?
Passz, ezen része még nekem ködös.
Annyit látok, hogy remekül és gyorsan tölti be az 1MB-os fájlt. Elméletileg pár órán belül lesz egy elfogadhatóan jól működő kódom és akkor lehet tudom tesztelni a sebességét, legalább is 1MB-os fájlok esetében. Kíváncsi vagyok én is, hogy mit tud a kicsike.. Ez a SPL már sokkal jobban tetszik és átláthatóbb, jól lehet benne dolgozni.
Indulásnak a KEIL a legjobban támogatott, csak a méretkorlátozás ne lenne a demónál!
Itt találtam igazi DMA átviteles példát: Bővebben: Link Koreai oldalra fordítást kellet kérni. Érdemes átolvasni.
Ezt az utóbbi kódot, te amúgy használod?
Esetleg azt meg tudod nézni rajta, hogy miképpen lehet fájlba írni? Próbálgatom, de az írás nem akar sikerülni. A fájlt már létrehozta, de beleírni valamiért nem akar, azt nem tudom még hogy miért. Előre is köszi..
Az eredeti kód STM32F411ret-re van fordítva, ez csak 64 pines Proci.
Újra kellene építeni a projectet F407zet-re, mert az ügye 144 pines. Ott tartok, hogy csináltam egy állatorvosi ló szerű projectet, beledobálva mindent. CubeMX-ben, de még kidolgozva nincsen. A hozzászólás módosítva: Máj 17, 2018
|
Bejelentkezés
Hirdetés |