Fórum témák
» Több friss téma |
Próbáltam keresni a neten, „Trace.h, Trace.c”!
De mivel járatlan vagyok linux téma keresésében, nem találtam alkalmasat. Ami a témába illő rutinokat tartalmazza. Szeretném átültetni Keil alkalmazásokba. Esetleg valaki közre adná, meg köszönném!
Nem követtem most nagyon végig a beszélgetést, de Ebay-en olcsón lehet USB - I2C modult venni:
http://www.ebay.com/sch/i.html?_odkw=usb+to+i2c&_sop=15&LH_...acat=0 A hozzászólás módosítva: Dec 18, 2016
Köszi! De a HW. Már megvan!
Az maga a programozó ST-LINK lenne! Csak az alkalmazás kel, mert még olyat nem találtam Keilhez. A hozzászólás módosítva: Dec 18, 2016
Nem tudom a Keil-be át lehet-e ültetni, mert ezek a protokollok az openocd-t használják. Mindenesetre a teljes system mappát berakom a mellékletbe, abban ott van a trace.h, trace.c, trace_impl.c is. Szerintem elég lassú a kommunikáció, a sima soros portos verzió sokkal gyorsabb. Ja és már írtam, hogy nincs köze a linuxhoz, legfeljebb annyiban, hogy az openocd linux és windows alá is létezik (én Win7 64bit alatt használom, és az Eclipse-be lett beleintegrálva).
Köszönöm a mellékletet, és a hozzá fűzött infót is!
Így legalább már tudom, hol keressek több ismeretet a témához. Úgy gondoltam, hogy így debugoláskor felszabadulna a sorosport másra. Esetleg nem lehet a trace sebességét növelni? Mondjuk órajel osztójának csökkentésével.
Hű, bocsi, most látom, hogy rossz helyre írtam. Egy másik topicba szántam ezt a kommentet... Bocsi.
A trace az lassú, semihosting mód. Ez azt jelenti, hogy amikor a debug üzenet átmegy, az egész IC áll és vár.
Úgy képzeld el, hogy megáll az órajel. Ez gondolom az UART-ot eleve kizárja, bár fogalmam sincs hogyan oldották meg. A sebesség még lassabb is lehet, mert ha fprintf-et használsz, akkor egyesével küldi át a karaktereket, látványos lesz a lassulás. Inkább egész string-eket kell átküldeni, különben szemmel követheted a karaktereket.. A hozzászólás módosítva: Dec 19, 2016
Ez a lassúság volt az oka, hogy megírtam az uart modulomat. Az pufferelten küldi ki a soros portra az üzenetet, így nem várakozik addig, amíg ténylegesen be nem fejeződik az átvitel. A hátránya, persze a plusz 1 láb elfoglalása.
Most teljesen elvettétek a kedvemet!
Én úgy képzeltem, hogy futás közben küldhetek üzeneteket 1 plusz I2C szerű HW-n. Ami fut a háttérben és nem számottevően lassítja a rendszert!
Ezt a kütyüt nézegetem
Ebben alapból van ST-LINK V2 és JTAG is. Semihostingot azért használok, mert nem akarok 2 USB portot fenntartani, egyet az ST-LINK-nek, meg egy USB-serialt. A semihosting nem is erre van kitalálva. Tesztelésre. Beküldesz egy kérést, visszajön egy válasz, meg ilyenek. Magyarul Eclipse-ben írsz teszteket, amik mindenféle firnyákos dolgot csinálnak, kérés be, válasz ki, te meg összehasonlítod. Nem teljesítmény elérése a cél.
Jonak tünik a kütyü!
Akkor inkább maradok a Keil debugjánál!
Az SPI DMA kombóval problémám van. Jelanalizátorral kimérve (baud rate prescaler = 2 mellett) a bitek 2 MHz frekvenciával csorognak ki. Jobban örülnék, ha 8-16 MHz körül mennének. SPI LCD-t szeretnék kezelni és kellene a sebesség.
Az órajelek:
A beállítás:
Miért ennyire lassú? Mi kellene, hogy rendes sebességgel menjen? Az IO portok 50MHz-re vannak állítva.
Bocs, hülye volt a kérdés.
SPI_BaudRatePrescaler_2 az 18 MHz-t jelent, ha PCLK1 36 MHz. Ezt ebay-es jelanalizátorral nem lehet kimérni, mert 24 msps a határfrekvenciája. Maximális érték 12 MHz, amit az analizátor mérni tud. Miután visszavettem a frekvenciát, hirtelen pontos lett. A jelanalizátorral 18MHz mellett látszik, hogy 160x128x2 képpont átvitele 18 ms-t vett igénybe és ez megegyezik azzal, amit számoltam.
36MHz az ADC-nek? Nem 14MHz a javasolt maximum?
Moszkvában Mercedeseket osztogatnak? Mire a válasz: nem Moszkvában, hanem Leningrádban, nem Mercedeseket, hanem Moszkvicsokat és nem osztogatnak, hanem fosztogatnak.
Nem ADC, hanem SPI, nem 14Mhz, hanem 18Mhz, a többi stimmel. A 36Mhz-et a PCLK1-re írta nem a baudrate-ra. A baudrate az ennek a fele, azaz 18Mhz (ennyi van megadva maximumnak az adatlapon is). Idézet: Akarhogy nezem, itt adc: 36000000 szerepel. „Clocks: sys:72000000 adc:36000000 hclk:72000000 pclk1:36000000 pclk2:72000000”
Jogos, bár a programrész pont nem az ADC-ről szólt
Amúgy 0,6MHz...14MHz között kell lenni az ADC órajelének. Az órajeles sor nekem úgy tűnik, hogy nem magára az ADC órajelére vonatkozik, hanem a buszrendszerre, amire az ADC is csatlakozik. A hozzászólás módosítva: Dec 23, 2016
Szerintem pedig nem.
Az alábbi órajeleket használjuk a Cortex-M3-as F1-es szériánál (a RTC-től és PLL-től most tekintsünk el): SYSCLK / AHB Prescaler = HCLK HCLK / AHB1 Prescaler = PCLK1 HCLK / AHB2 Prescaler = PCLK2 PCLK2 / ADC Prescaler = ADCCLK Ezeken kívül van még pár fix osztó és szorzó az időzítőkhöz és az SDIO-hoz, plusz egy kapcsolható 8-as osztó a SysTick timer-hez. Nekem gyanúsan ismerősek ezek az órajelek a fent idézett sorból.
Igen, az ADC Prescaler-t 6-ra kellene beállítania (2, 4, 6, 8 a beállítható érték), akkor 12MHz lesz az ADC órajele. Néggyel osztva is 18MHz lesz, lehet hogy ott még működni fog, de a pontossága biztos rosszabb lesz.
Hali!
Valaki próbálta már az STM32F407-esekben levő RTC Backup regisztereit használni adatok tárolására? Adatlap szerint 20db. 32bites SRAM van bennük. Én írtam rá 1 rutint, de csak az első 5 * 32bitet tudom felülírni, a többit nem. Az alap innen van: Bővebben: stm32fxxx_hal_libraries 24-STM32Fxxx_RTC.
Az eredmény: backW RTC Backup Write: 00: 03020100 01: 04030201 02: 05040302 03: 06050403 04: 07060504 05: 00000000 06: 00000000 07: 00000000 08: 00000000 09: 00000000 10: 00000000 11: 00000000 12: 00000000 13: 00000000 14: 00000000 15: 00000000 16: 00000000 17: 00000000 18: 00000000 19: 00000000 Bármi ötlet jól jönne! Mit szúrhatok el? A 'RTC_TAFCR_TAMP2E | RTC_TAFCR_TAMP1E Biteket már próbáltam állítgatni, de semmi hatása nem volt. A 2 hívót rutin:
A hozzászólás módosítva: Dec 28, 2016
A 4 * location helyett csak sima location-t irj! Ha egy pointer 32 bites elemre mutat, akkor a pointer + 1, az 32 bittel, azaz 4 byte-tal lesz tobb.
A hozzászólás módosítva: Dec 28, 2016
Amugy meg nem ertek valamit. Mitol mukodik a kodod? Hacsak nem azert, mert az RTC->BKP0R nem uint32_t tipusu, hanem mondjuk uint8_t. Marpedig, ha egy uint32_t tipusu valami cimehez hozzaadsz 1-et, akkor az fizikaliag 4-gyel nagyobb cim lesz, azaz a kovetkezo uint32_t tipusu elemre fog mutatni.
Kösszi! igazad vólt!
Javítottam:
És jó lett az eredmény: backW RTC Backup Write: 00: 03020100 01: 04030201 02: 05040302 03: 06050403 04: 07060504 05: 08070605 06: 09080706 07: 0a090807 08: 0b0a0908 09: 0c0b0a09 10: 0d0c0b0a 11: 0e0d0c0b 12: 0f0e0d0c 13: 100f0e0d 14: 11100f0e 15: 1211100f 16: 13121110 17: 14131211 18: 15141312 19: 16151413 Erre nem gondoltam, hogy a hívott rutinban van a hiba! Mivel azt már készen kaptam.
Közben az is kiderült, hogy az utolsó BKP19R regiszter foglalt!
#define RTC_STATUS_TIME_OK 0x4321 /* RTC time OK */ 19: 00004321 Ha felülírom, törlődik az RTC tartalma minden újraindításkor!
De a maradék 19 regiszter értéke nem változik ki/be kapcsolás után sem.
Lehet, hogy en rosszat nezek, de szerintem csak 5 regiszter van, BKP0R..BKP4R, darabja 4 byte, tehat osszesen 20 byte Backup RAM van benne. A te programod, ha getC erteke nagyobb, mint 4, akkor mar nem is a backup RAM-ba ir. Valami itt nekem nagyon nem vilagos.
megtenned a kovetkezot: printf("%p %p\n", &(RTC->BKP0R), &(RTC->BKP0R) + 1); Nagyon kivancsi vagyok, hogy a ket szam kozott 1 vagy 4 lesz a kulonbseg.
A következő RTC Backup listaázó, rutinba kerültbe a kért sor:
És az eredmény: backL RTC Backup lista: 00: 03020100 01: 04030201 02: 05040302 03: 06050403 04: 07060504 05: 08070605 06: 09080706 07: 0a090807 08: 0b0a0908 09: 0c0b0a09 10: 0d0c0b0a 11: 0e0d0c0b 12: 0f0e0d0c 13: 100f0e0d 14: 11100f0e 15: 1211100f 16: 13121110 17: 14131211 18: 15141312 19: 00004321 RTC->BKP0R: 40002850, 40002854 TAFCR: 00040000 Szerintem OK!
Van törlő rutin is:
Az eredménye: backC RTC Backup Clear: 00: 00000000 01: 00000000 02: 00000000 03: 00000000 04: 00000000 05: 00000000 06: 00000000 07: 00000000 08: 00000000 09: 00000000 10: 00000000 11: 00000000 12: 00000000 13: 00000000 14: 00000000 15: 00000000 16: 00000000 17: 00000000 18: 00000000 19: 00004321 backL RTC Backup lista: 00: 00000000 01: 00000000 02: 00000000 03: 00000000 04: 00000000 05: 00000000 06: 00000000 07: 00000000 08: 00000000 09: 00000000 10: 00000000 11: 00000000 12: 00000000 13: 00000000 14: 00000000 15: 00000000 16: 00000000 17: 00000000 18: 00000000 19: 00004321 RTC->BKP0R: 40002850, 40002854 TAFCR: 00040000 Eléggé meggyöző? Megvan mind a 20 regiszter! A STM32F407-esben. A hozzászólás módosítva: Dec 29, 2016
Ok, megneztem az adatlapot. 80 byte, azaz 20 szo backup register van. Valahol azt olvastam, hogy csak 5 szo, ami 20 byte, ez zavart meg.
|
Bejelentkezés
Hirdetés |