Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   79 / 176
(#) csabeszq válasza kapu48 hozzászólására (») Dec 11, 2016 /
 
Még elég sok felfedezni való van, főleg ADC és SPI terén, azokra lesz szükségem DMA-val. LCD és mintavételezés.

Meg flash írása config elmentéséhez. Ezekkel fogok foglalkozni.

Az ADC elég komoly, mert trigger jelet is tud keresni. Ha a jel kilép egy sávból, interruptot hív.
(#) kapu48 válasza benjami hozzászólására (») Dec 12, 2016 /
 
Köszi!

Majd jól jön ez, különböző időzítési problémák megoldásánál.
(#) silent15 hozzászólása Dec 14, 2016 /
 
Sziasztok!

Olyat szeretnék kérdezni, hogy egy STM32F429 DISCO panellel (és STM32 St-Link Utility szoftverrel) hogyan tudok egy ilyen kínából rendelt kis panelt felprogramozni? Próbáltam már több féle módon is bekötni, de sehogy sem sikerült életjelet kicsikarnom bellőle, az alap demo villog és kész, a programmal nem is érem el.
A neten rengetek bekötést találtam, de sajnos egyik se a kettő kombinációja és nem is jön be, ezért kérnék segítséget.
Köszönöm!
(#) Elektroman válasza silent15 hozzászólására (») Dec 14, 2016 /
 
Ha küldesz valami bővebb leirást a kis panelről, (doksi, kapcs.rajz stb.) könnyebben segitünk. Magát a chipet (STM32F103, ha tényleg ez van rajta...) gond nélkül kell tudnia programozni.
(#) silent15 válasza Elektroman hozzászólására (») Dec 14, 2016 /
 
Róla lenne szó és eszerint odakötve (TCK-DCLK,GND-GND,TDO-DIO) és 3V kötve.

Menet közben megoldódott a probléma, ezzel a 2 képpel, ha valaki keresné működik.
Az SWD csatin (lásd 2. kép) az 1. lábán minek kéne lennie?
(#) Elektroman válasza silent15 hozzászólására (») Dec 14, 2016 /
 
Na, a discoverz panelon a két jumpert (ST-Link felirat mellett) le kell venni, a CN2 SWD connector 2-es lába (SWCLK) megy a DCLK-ra, 3-sa (GND) a GND-re, 4-es (SWDIO) a DIO lábra. És nem JTAG módot hanem SWD-t kell használni (nem azok a jelek/jelnevek vannak mint a képedet.) Természetesen a kis panelnak is kell tápot adni.
(#) silent15 válasza Elektroman hozzászólására (») Dec 14, 2016 /
 
A jumpereket alapból levettem. Tudom nem teljesen ugyanaz az elnevezés, de amit írtam kötés azzal működött, annyi volt a plusz, hogy a panel egy más kivezetéséről meg kellett tápolnom, de mostmár szépen látja
Tetszik ez a mentalitás, hogy a DISCO panel így van kialakítva hogy mást is lehessen vele programozni, nagyon szimpatikus gondolat így a PIC után.

Köszönöm mégegyszer!
(#) csabeszq válasza Elektroman hozzászólására (») Dec 16, 2016 /
 
Ezeket a kis paneleket 64k-sként adják el, de az internetet olvasva 128k memória van rajtuk.

STM32F103C8T6
Bővebben: Link

Kizárólag az adatlap ír 64k-t, de egyébként minden más oké.

Még nem próbáltam ki, csak fogom, de többen arról írnak, hogy a két IC STM32F103C8T6/STM32F103CBT6 között nincs eltérés csak az árban és az adatlapon.

Érdekelne a tapasztalatotok a témában.
A hozzászólás módosítva: Dec 16, 2016
(#) silent15 válasza csabeszq hozzászólására (») Dec 16, 2016 /
 
Adatlap (lásd) 108. oldal tartalmazza, hogy a chipen lévő kód az alábbi módon határozza meg:
STM32 F 103 C 8 -64Kb
STM32 F 103 C B -128Kb
ennyiben tér el a kettő, szóval jogos hogy sokan kérdezik.
A hozzászólás módosítva: Dec 16, 2016
(#) cimopata válasza silent15 hozzászólására (») Dec 16, 2016 /
 
Vagy csak simán ez a kis táblázat:
Bővebben: Link
(#) csabeszq válasza silent15 hozzászólására (») Dec 17, 2016 /
 
Félreértettétek amit leírtam. Vettem a 64k-s STM32F103C8T6-ot.

Az st-flash rutin átpeccseltem, hogy tudjon 64 fölé is írni (tuningoltam).

Lefordítom, megy.
- olvasás indít
- 128k valóban bejön, átlapolás nincs
- hex editorral kicserélem az utolsó bájtokat a 128k-n
- írás indít
- kiíródik, verify megy
- visszaolvasom a 128k-t és benne van, amit kiírtam, átlapolás nincs

Azt szerettem volna leírni - amit most ki is próbáltam -, hogy a 128k flash az valóban létezik, címezhető és írható. Nincs memóriaátlapolás, fizikailag 128k van benne. Ezt bizonyos programok ki is használják, amik másolásvédekelmi adatot pakolnak bele.
A hozzászólás módosítva: Dec 17, 2016
(#) benjami válasza csabeszq hozzászólására (») Dec 17, 2016 /
 
Hogyan is lehet azt az st-flash rutint átpatchelni? Nekem is van 3 ilyen modulom, de mindenki 64kB-osnak látja.

st-link.png
    
(#) csabeszq válasza benjami hozzászólására (») Dec 17, 2016 /
 
Linux alatt csináltam. Az st-flash forráskódját megbütyköltem, hogy ne jelezzen hibát, ha túltolnám az adatokat. Elég gusztustalan megoldás volt, mert leállt így a hibakezelése, de csak kipróbálni szerettem volna.

Az IC azt mondja magáról, hogy 64k-s. Amit én csináltam, hogy nem érdekel, az IC mit mond, feltoltam rá 128k-t. És ment.

Küldök programot...
A hozzászólás módosítva: Dec 17, 2016
(#) benjami válasza csabeszq hozzászólására (») Dec 17, 2016 /
 
Majd megpróbálom programból teleírni a második 64k-t, aztán kiderül mit lép rá. Amúgy nem tartom kizártnak, hogy nem gyártanak külön chipet a 64k és a 128k verziónak, csak a memória lekérdezéskor ad vissza más értéket. A device ID-ben sincs eltérés a két változat között.
(#) Seton válasza csabeszq hozzászólására (») Dec 17, 2016 /
 
Valóban jól hangzanak az STM32F103C8T6 ADC képességei, de ahogy emlékszem sem belső, sem külső Vref nincs hozzá. Lehet én vagyok finnyás, de ez így nem vicces.
(#) csatti2 válasza Seton hozzászólására (») Dec 17, 2016 /
 
Ahhoz képest még katalógus adat is van hozzá és a referencia kézikönyvben is szerepel
(#) csabeszq válasza benjami hozzászólására (») Dec 17, 2016 / 2
 
Íme a kód, szépen írja a 64k feletti részt. 128k felett viszont fagy.

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "stm32f10x.h"
  4. #include "diag/Trace.h"
  5. #include <string.h>
  6. #include <inttypes.h>
  7.  
  8. #define FLASH_ADDR_LO 0x0800FFF0
  9. #define FLASH_ADDR_HI 0x0801FFF0
  10.  
  11. uint8_t lastByte = 0;
  12.  
  13. void dumpFlash(int address)
  14. {
  15.         uint8_t * data = (uint8_t *)(address);
  16.  
  17.         char str[80];
  18.         sprintf(str, "%08x: ", (uint32_t)data);
  19.         for( int i=0; i < 16; i++ )
  20.         {
  21.                 char tmp[10];
  22.                 sprintf(tmp, "%02x ", lastByte = data[i] );
  23.                 strcat(str, tmp);
  24.         }
  25.         strcat(str, "\n");
  26.         trace_printf(str);
  27. }
  28.  
  29. void writeFlash(int address)
  30. {
  31.         FLASH_Unlock();
  32.         FLASH_ErasePage(address & 0xFFFFFC00 );
  33.  
  34.         for(int i=0; i < 16; i+=2)
  35.         {
  36.                 uint16_t hword = (++lastByte);
  37.                 hword |= (uint16_t)(++lastByte) << 8;
  38.  
  39.                 FLASH_ProgramHalfWord(address+i, hword);
  40.         }
  41.  
  42.         FLASH_Lock();
  43. }
  44.  
  45. int main(int argc, char* argv[])
  46. {
  47.   trace_puts("Flash teszt!\n");
  48.  
  49.   dumpFlash(FLASH_ADDR_LO);
  50.   dumpFlash(FLASH_ADDR_HI);
  51.  
  52.   trace_puts("Most átírjuk a felső részt!\n");
  53.  
  54.   writeFlash(FLASH_ADDR_HI);
  55.  
  56.   dumpFlash(FLASH_ADDR_LO);
  57.   dumpFlash(FLASH_ADDR_HI);
  58.  
  59.   while(1);
  60. }
A hozzászólás módosítva: Dec 17, 2016
(#) benjami válasza csabeszq hozzászólására (») Dec 17, 2016 /
 
Kipróbáltam, nálam is átírta rendesen. Köszi a mintaprogramot.
(#) benjami válasza csatti2 hozzászólására (») Dec 17, 2016 /
 
VREF+ és VREF- láb viszont csak a 100lábú változattól létezik.
(#) kapu48 válasza csabeszq hozzászólására (») Dec 17, 2016 /
 
Az a baj, hogy a: Trace.h, Trace.c

Valami linux csoda lehet?
Amiröl Keil alkalmazásokhoz szokva, fogalmamsincs mik vannak benne!

Mivel helyetesíthetném?
(#) benjami válasza kapu48 hozzászólására (») Dec 17, 2016 /
 
Helyettesíthető a printf-el, de irányítsd át a soros portra (ehhez kell még egy USB-RS232(ttl) átalakító + terminál program). A trace az stlink hardveren keresztüli üzenetküldésre szolgál a futó programból. Az eclipse console ablakában jelennek meg az ide írt dolgok. Ja és Win7 alatt is megy, nem csak Linux alatt.
(#) Seton válasza benjami hozzászólására (») Dec 17, 2016 /
 
Pontosan. És. A belső referencia feszültséget csak olvasni tudod (IN_17), nem ahhoz viszonyítva dolgozik az ADC, tehát legfeljebb kalibrálni lehet vele egy pontban.
More on this topic...
(#) benjami válasza benjami hozzászólására (») Dec 18, 2016 / 1
 
Itt van a mellékletben a trace nélküli változat. Lehet egyébként másra is használni ezt a pufferelt uart modult. A PA9-es lábon jelenik meg a soros jel 115200bit/sec sebességgel, ide kell kötni az USB/soros átalakítót.

teszt128k.zip
    
(#) kapu48 válasza benjami hozzászólására (») Dec 18, 2016 /
 
Nem igazán értem!
Nálam így van Address definiálva uint32_t:
  1. FLASH_Status FLASH_ErasePage(u32 Page_Address)
  2. FLASH_Status FLASH_ProgramHalfWord(u32 Address, u16 Data)
  3.  
  4. Ez belese fér int-be:  #define FLASH_ADDR_LO 0x0800FFF0
  5.  
  6. Hogyan lehet így meghívni int-el?:
  7. void writeFlash(int address) ???
  8. {
  9.   FLASH_Unlock();
  10.   FLASH_ErasePage(address & 0xFFFFFC00 ); ????
  11.  
  12.   for(int i=0; i < 16; i+=2)
  13.   {
  14.     uint16_t hword = (++lastByte);
  15.     hword |= (uint16_t)(++lastByte) << 8;
  16.  
  17.     FLASH_ProgramHalfWord(address+i, hword); ???
  18.  
  19. ...


És mértnem használjátok inkább ezt?:
  1. FLASH_Status FLASH_ProgramWord(u32 Address, u32 Data)


Én még nem hiszek nektek!
A hozzászólás módosítva: Dec 18, 2016
(#) kapu48 válasza benjami hozzászólására (») Dec 18, 2016 /
 
Nem hagyott a téma aludni!
De, a kiíratás csak 3. futatásra sikerült!
És elég fura eredményt kaptam:
  1. <NUL>Flash teszt!
  2. 0800fff0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
  3. 0801fff0: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
  4. Most átírjuk a felso részt!
  5. 0800fff0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
  6. 0801fff0: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
  7. START! 0
  8. <NUL>Flash teszt!
  9. 0800fff0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
  10. 0801fff0: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
  11. Most átírjuk a felso részt!
  12. 0800fff0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
  13. 0801fff0: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
  14. START! 0


Még nem értem miért növekszik minden futatásra az érték +0x10-el

De kezd érdekes lenni!
Mert elképzelhető, hogy más típusoknál is van ilyen turpiság?
(#) csabeszq válasza kapu48 hozzászólására (») Dec 18, 2016 /
 
Így írtam a programot, hogy növekedjen.

A lastByte eltárolja az utolsó beolvasott bájtot, újraírásnál meg egyesével növeli. Igazából egy rosszul sikerült szemléltető program.

Azt kaptad, amit kapni kellett.
(#) csatti2 válasza kapu48 hozzászólására (») Dec 18, 2016 /
 
8 és 16 bites rendszereknél az int 2 byte szokott lenni, 32biteseknél pedig 4 byte.

Ilyen hardverspecifikus kódnál valóban szerencsésebb uint32 típusú változót használni, hogy egyértelműbb legyen a programozó szándéka, de persze attól még helyesen fog működni a kód int-el is.
(#) csabeszq válasza csatti2 hozzászólására (») Dec 18, 2016 / 1
 
Bocsánat, valóban elrontottam, mikrovezérlők alatt fontos a méretet egyértelműen jelölni. Mindezek ellenére a kód tesztelési szándékkal lett feltéve kizárólag STM32F103C8T6-ra, más chipre nem. Eredetileg a trace-eket printf-re át szerettem volna írni, de miután elmaradt, már inkább nem kavartam következő hozzászólással.

Sokáig élt bennem a C64, az IBM AT és a char far *, char near *, meg a hasonló 8/16 bites förmedvények. Nagyon mély nyomot hagyott az emberben.

A 486-os rendszerek a maguk 32 bitjével hihetetlen fellélegzés volt, hogy ökörködés helyett szimplán csak leírom, hogy 'int' és megy minden, mint a karikacsapás.Ebben az eufórikus hangulatban rászoktam az int-re és úgy gondoltam, el lehet felejteni a 8/16 bitet egy életre. Ezért használom az int-et 32 bites rendszereken előszeretettel, bár valóban helytelen jelenesetben.
A hozzászólás módosítva: Dec 18, 2016
(#) kapu48 válasza csabeszq hozzászólására (») Dec 18, 2016 /
 
Mindenesetre érdekes felfedezés, hogy 2 szer akkora a flash mérete, mint amennyit az adatlapok írnak!
Nem tudni, hogy ezek leminősített termékek?
Odafigyeléssel lehet használni a plusz flash területet! Aztán próba szerencse kérdése?

Más!:
Keil-ben a sorosport aktiválásán kívül, még a FLASH programozását is engedélyezni kellet.
Az stm32f10x_conf.h-ban:
  1. /* Uncomment the line below to enable FLASH program/erase/protections functions,
  2.    otherwise only FLASH configuration (latency, prefetch, half cycle) functions
  3.    are enabled */
  4. #define _FLASH_PROG             // <<kivenni a megjegyzésből!


És vigyázni a teszteléssel, mert ha bent marad, és elszabadul a rutin. Tönkreteszi a flasht!
A hozzászólás módosítva: Dec 18, 2016
(#) kapu48 válasza kapu48 hozzászólására (») Dec 18, 2016 /
 
És még egy pozitív tapasztalat.
Én ezt a teszt kódot egy már kész programba szúrtam be, és maga a program többszöri indítás után is hibátlanul futott.

Most roppantul érdekel, hogy a f407xE kontra f407xG esetében is ugyanez a helyzet?
Bővebben: Link
Következő: »»   79 / 176
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem