ARM STM32F4DISCOVERY board

Cortex. ARM3, ARM5, ARM7 magok, mindenféle gyártóktól. Programozás-fejlesztés-tippek.

Te használnád az STM32F4DISCOVERY-t?

Igen!
6
67%
Nem!
3
33%
 
Szavazatok száma: 9

Avatar
ImTilk
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2010. február 6. szombat, 7:00

Hozzászólás Szerző: ImTilk »

kapu48 írta:Úgy nézki egyedül maradok a Discovery projektembe!? (Igaz a neve is Felfedező!)
8)
Nem vagy egyedül ;) Figyellek és kíváncsian várom, hogyan haladsz, beállítottam a téma értesítést, ha segíteni tudok akkor úgyis írok, bár mint írtam, én sem vagyok egy túl nagy c guru, de a pár hónap alatt megtapasztalt-tanult (jól vagy rosszul) dolgok azért talán hasznosak lehetnek...

Én egy kicsit elakadtam, át kell terveznem a panelemet, hogy FSMC-n keresztül tudjam meghajtani az lcd-met, viszont időm kevés, sok meló, szüret család stb...
Szinte várok már 1-2 rossz idős hétvégét amikor "büntetlenül" ülhetek a gép előtt, vagy a műhelyben... ;) Pedig imádom a nyarat....
Igen hasznosnak tartom a topicodat, bárki sokat tanulhat belőle...
Főleg, hogy magyar nyelven szinte semmi doku nincs a neten, én meg sajna igencsak hadilábon állok bármilyen külföldivel, így jóval nehezebb haladni....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Te már belőtted az USB Host-ot?

Mért kínlódsz memória bővítővel?
USB Pen drive nem lenne jó, képek tárolására?

Drága volt az a színes LCD?
Úgy látom Touch is van rajta?

Túl sok magyar komentet nálam sem találsz.
A rutinok és változók neveit igyekszem jól megválasztani.
A belinkelt doksik tanulmányozása nélkül nehéz megérteni.

Viszont ide már kipróbált működő részleteket teszek fel.

Az egész project egyben túl nagy, és még állandóan változik.

Meg ötletek is mindig ujjak jönnek!

8)
Avatar
ImTilk
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2010. február 6. szombat, 7:00

Hozzászólás Szerző: ImTilk »

kapu48 írta:Te már belőtted az USB Host-ot?
Igen belőttem, mármint ha Pendrive-Fat fájlrendszerre gondolsz..
Ez egyszerűbb volt, mint az spi-sdcard-fat :D Azzal többet kellet bíbelődnöm mivel össze kellett hoznom az spi-t, és a STM32F4-Discovery_FW_V1.1.0\Utilites\Third_Party\fat_fs lib-el...
Az usb-nél ez könnyebben ment, mert ott volt az st minta, ami pendriveról tudja flashelni a discovery-t, így csak józan paraszti ész kellet hozzá, hogy egy bmp áttoljak az lcd-re...
kapu48 írta: Mért kínlódsz memória bővítővel?
USB Pen drive nem lenne jó, képek tárolására?
A sebesség miatt... Nem mintha videókat akarnék lejátszani az lcd-n, de maximalista vagyok, és mivel nekem ez csak egy hobbi, megpróbálom a lehető legjobban csinálni, főleg, hogy minél komplikáltabb a feladat annál többet tanulok, legfeljebb belebukok :D
Az st-s doksi szerint az én lcd-men lévő chip-el (ili9325) flash-ben tárolt képből elérhető a 62 fps, külső sram-ból a 37 fps, flash memóriából a 12 fps,sd kártyáról a 20 fps... Pendrive-ot nem említi ez a :doksi, de DMA-val tuti szerintem a 20 fps...
Amikor meglett a discovery, avr-esként port alapon gondolkodtam, így GPIO alapon terveztem meg a panelt(az lcd-nek 16 bites adatbusza van,így logikusnak tünt egy 16 bites portal meghajtani, igaz az FSMC-ről még nem is hallottam akkor még, csak az volt a fontos nagy izgalmamban, hogy minél hamarabb megszólaljon a kijelző,) ami mint kiderült memóriapazarló, és hiába a 100mhz-es portsebeség, mivel a procinak dolgoznia kell rendesen, így kb max. 2 fps megy csak ezzel a módszerrel...
kapu48 írta: Drága volt az a színes LCD?
Úgy látom Touch is van rajta?
Attól függ mit jelent az, hogy drága...
Magyar boltok viszonylatába nézve hihetetlenül olcsó volt...
Nem biztos, hogy Robert örülne, hogyha reklámoznák, de ha a legismertebb nemzetközi aukciós oldalon rákeresel, hogy tft lcd module adja a találatokat dögivel...
Én 17 dolcsiért vettem, lehet azóta már van olcsóbban is, TFT 2,4'' 320*240 felbontás 262ezer szín+touch+sdkártya foglalat, 40 tűs simán forrasztható, illetve aljzatba helyezhető szabvány csatival, spi-s touch vezérlővel (az sd kártya foglalat is ki van vezetve a csatira) háttérvilágítással... Szóval ahhoz képest, hogy itthon mennyiért lehet kapni egy olyan kijelzőt mint amit te használsz szerintem ingyért van... Ezért is fogtam bele vele a játékba... Akár avr-hez is használható, szöveg, egyszerű grafika megjelenítésére... (bár kicsit lassú lesz, tudom próbáltam, Bascomban egy képernyőtörlés kb. 5mp, c-ben 2 (mega32 12mhz))
kapu48 írta: Túl sok magyar komentet nálam sem találsz.
A rutinok és változók neveit igyekszem jól megválasztani.
A belinkelt doksik tanulmányozása nélkül nehéz megérteni.

Viszont ide már kipróbált működő részleteket teszek fel.

Az egész project egyben túl nagy, és még állandóan változik.

Meg ötletek is mindig ujjak jönnek!

8)
Szerintem elég jól kompenzálod a hozzászólásban a kevés magyar kommentet...
Nálam rosszabb a helyzet egyenlőre, mert nincsenek kommentjeim, emiatt sokszor már a saját kódjaimba is eltévedek :D
Ezen változtatnom kell mindenképp.... :(
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Miután kiválasztottuk és alaphelyzetbe alítottuk az LCD-t, az előző rutin hosszú listájából.

Írjunk ki valami szöveget rá.
Előtte, közben választhatunk, akarunk e Cursort mozgatni.:

Kód: Egész kijelölése

/*..................................................................................................*/
/**
 * Move cursor indicator switches
 * No cursor indicator: 					 curaktiv = 0,
 * Cursor On, Blink On, auto_cursor_move Off. curaktiv = 1
 * Cursor On, Blink On, auto_cursor_move On.  curaktiv = 2
 *
 */
void GLCD_CursorAktiv(uint8_t curaktiv){
	cursor_aktiv = curaktiv;
	switch (curaktiv) {
	   case 0:
		   activated_cursor_pointer = 0;
		   glcd_moderegiszter &= 0b11111100;	// Reset Text Cursor Blink Off
		   auto_cur_aktiv = 0;					//  auto_cursor_move Off.
		   break;
	   case 1:
		   activated_cursor_pointer = 1;
		   glcd_moderegiszter |= 0b00000011;	// Set Text Cursor On, Blink On
		   auto_cur_aktiv = 0;					//  auto_cursor_move Off.
		   break;
	   case 2:
		   activated_cursor_pointer = 1;
		   glcd_moderegiszter |= 0b00000011;	// Set Text Cursor On, Blink On
		   auto_cur_aktiv = 1;					//  auto_cursor_move On.
	}
	GLCD_WriteC_D(glcd_moderegiszter, GLCD_CMD, STATUSCHECK_MASK3);		// Write Text Cursor Blink
}

Kód: Egész kijelölése


/*..................................................................................................*/
/**
 * Set Cursor Pointer and height adjustment
 * possible parameter values 1:
 * CURSOR_POINTER				 X ADDRES, Y ADDRES
 * Display location: 0,0 is upper left corner;
 * cursor  = 0 Off
 * cursor aktivated and Cursor height adjustment 1 - 8,
 */
void GLCD_Set_CursorPointer(uint8_t cx, uint8_t cy, uint8_t cur_aktivated){
	uint8_t pattern = T6963CMD_1_LineCursor;	// Cursor Line high 1
	cursor_pointerx = cx;						// Új Poziciók tárolása
	cursor_pointery = cy;
	cursor_pointer_addr = (cy << 8) + cx;			// X ADDRES, Y ADDRES
	if (cur_aktivated){
		switch (cur_aktivated) {				/* 	CURSOR PATTERN SELECT	*/
		   	   case 8:
		   		   pattern++;	// Cursor Line high 8
			   case 7:
				   pattern++;	// Cursor Line high 7
			   case 6:
				   pattern++;	// Cursor Line high 6
			   case 5:
				   pattern++;	// Cursor Line high 5
			   case 4:
				   pattern++;	// Cursor Line high 4
			   case 3:
				   pattern++;	// Cursor Line high 3
			   case 2:
				   pattern++;	// Cursor Line high 2
		}
		GLCD_WriteC_D(pattern, GLCD_CMD, STATUSCHECK_MASK3);				// Write Cursor Line high
		GLCD_WriteData2(cursor_pointer_addr, T6963CMD_SET_CURSOR_POINTER);	// Write Cursor Addres
		if (!activated_cursor_pointer){
			GLCD_WriteC_D(T6963CMD_TEXTOnGRAPHICOffBlinkOn, GLCD_CMD, STATUSCHECK_MASK3);		// Set Text Cursor Blink On
			activated_cursor_pointer = 1;
		}
	}else{		//	0 = Inaktive Text Cursor
		if (activated_cursor_pointer){
			GLCD_WriteC_D(T6963CMD_TEXTOnGRAPHICOffCursorOff, GLCD_CMD, STATUSCHECK_MASK3);		// Text Be, Graphic Ki,  Cursor off (ki)
			activated_cursor_pointer = 0;
		}
	}
}

Pozícionálni kel hova akarunk írni:

Kód: Egész kijelölése


/*..................................................................................................*/
/** LCD Text Goto X, Y
 * Pozicionálás a Text felületen
 * sets memory location to screen location x, y
 * Display location: 1,1 is upper left corner;
 */
void GLCD_TGotoXY(uint8_t textx, uint8_t texty){
	    uint16_t location, home;
	    uint8_t line = glcd_columns;
	    if (textx > line) textx = line;
	    textx--;				// X = 0 < 1
	    texty--;
	    home = write_read_textpage;	// Az aktuális Text lap cime

	    location = home + (((uint16_t)texty) * line) + textx;			// Cim számítás

	    GLCD_WriteData2(location, T6963CMD_SET_ADDRESS_POINTER);
		if (activated_cursor_pointer){				// ? Kel cursor_pointer
			cursor_pointerx = textx;
			cursor_pointery = texty;
			GLCD_Set_CursorPointer(textx, texty, 1);
		}
}
1 karakter ki rakása, választható automatikus címmódosítással:

Kód: Egész kijelölése

/*..................................................................................................*/
/*
 * Write Character Code Text Ram Area.
 * ascII: 			Dates (ASCII)
 * set_mode: 		Auto Address: Set and Non variable, Or Increment, Or Decrement
 */
void GLCD_TWriteChr(uint8_t ascII, uint8_t set_mode){
	uint8_t line = glcd_columns - 1;
	switch (set_mode) {
	   case 1:
		   GLCD_WriteC_D((ascII -32), GLCD_DATA, STATUSCHECK_MASK3);
		   GLCD_WriteC_D(T6963CMD_DataWRITEAndIncrement, GLCD_CMD, STATUSCHECK_MASK3);	// Increment
			if ((++txtchr_pointerx) > line){	/*	Text Write/Read character pointer X, Y	*/
				txtchr_pointerx = 0;
				if (txtchr_pointery < GLCD_CHR_LINES){
					txtchr_pointery++;
				}
			}
			if (activated_cursor_pointer){												// ? Auto move Cursor pointer
				GLCD_CursorIncr();
			}
		   break;
	   case 2:
		   GLCD_WriteC_D((ascII -32), GLCD_DATA, STATUSCHECK_MASK3);
		   GLCD_WriteC_D(T6963CMD_DataWRITEAndDecrement, GLCD_CMD, STATUSCHECK_MASK3);	// Decrement
			if (txtchr_pointerx > 0){	/*	Text Write/Read character pointer X, Y	*/
				txtchr_pointerx--;
			}else{
				txtchr_pointerx = glcd_columns - 1;
				if (txtchr_pointery > 0){
					txtchr_pointery--;
				}
			}
			if (activated_cursor_pointer){													// ? Auto move Cursor pointer
				GLCD_CursorDecr();
			}
		   break;
	   default:
		   GLCD_WriteC_D((ascII -32), GLCD_DATA, STATUSCHECK_MASK3);
		   GLCD_WriteC_D(T6963CMD_DataWRITEAndNonvariable, GLCD_CMD, STATUSCHECK_MASK3); // Nonvariable
	}
}
A fenti rutint hívó String ki író rutin.
Ha kel automatikus Cursor mozgatással.:

Kód: Egész kijelölése


/*..................................................................................................*/
/*
 * Write String Code Text Ram Area.
 * ascII: 			Dates (ASCII)
 * set_mode: 		Auto Address: Set and Non variable, Or Increment, Or Decrement
 */
void GLCD_TWriteString(char *String, uint8_t set_mode){
	uint8_t is = 0;
	uint8_t tca = 0;
	if (cursor_aktiv == 2){
		tca = cursor_aktiv;
		GLCD_CursorAktiv(1);		// Cursor move Off
	}
	while (String[is]){			// Nem 0
		GLCD_TWriteChr(String[is++], set_mode);
	}
	if (tca){												// ? Auto move Cursor pointer
		GLCD_CursorAktiv(tca);		// Cursor move On
		GLCD_Set_CursorPointer(cursor_pointerx, cursor_pointery, 1);
	}
}
Cursor beállító és mozgató rutinok:

Kód: Egész kijelölése

/*..................................................................................................*/
/**	written character position calculation
 * Cursor Pointer and CHR Pointer Increment >>
 */
void GLCD_CursorIncr(void){
	 uint8_t line = glcd_columns - 1;
	if ((++cursor_pointerx) > line){	/*	cursor pointer X, Y	*/
		cursor_pointerx =0;
		if (cursor_pointery < GLCD_CHR_LINES){
			cursor_pointery++;
		}
	}
	cursor_pointer_addr = (cursor_pointery << 8) + cursor_pointerx;			// X ADDRES, Y ADDRES

	if (auto_cur_aktiv){
		GLCD_WriteData2(cursor_pointer_addr, T6963CMD_SET_CURSOR_POINTER);
	}
}

/*..................................................................................................*/
/**	delete character position calculation
 * Cursor Pointer and CHR Pointer Decrement <<
 */
void GLCD_CursorDecr(void){
	if (cursor_pointerx > 0){	/*	cursor pointer X, Y	*/
		cursor_pointery--;
	}else{
		cursor_pointerx = glcd_columns - 1;
		if (cursor_pointery > 0){
			cursor_pointery--;
		}
	}
	cursor_pointer_addr = (cursor_pointerx << 8) + cursor_pointery;			// X ADDRES, Y ADDRES

	if (auto_cur_aktiv){
		GLCD_WriteData2(cursor_pointer_addr, T6963CMD_SET_CURSOR_POINTER);
	}
}
Mára ez elég is lesz talán!

Jó lenne olvasni valami véleményt, kritikát, javaslatot!
A kedves közönségtől!

8)

És frissítettem az előző oldalon levő listákat! (Amelyik végére oda írtam)
Ott egyben megtalálni mindent, ami eddig elkészült.
Viszont a grafikus rész még nem tesztelt. Mivel még gyerekcipőben jár.

:wink:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Hali ImTilk!

Ma találtam. Neked biztos hasznos lesz!:

STM32 embedded graphic objects/touchscreen library
http://www.st.com/internet/com/TECHNICA ... 259585.pdf

STM32F4 Discovery + HY32D TFT LCD
http://www.element14.com/community/grou ... 2d-tft-lcd


Szívok a font betöltéssel a CGRAM területre!
(A Pointerek és Strukturák kezelése még mindig káosz nekem!)
Nem tudsz rá valami jó mintát?
:?
Avatar
ImTilk
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2010. február 6. szombat, 7:00

Hozzászólás Szerző: ImTilk »

Szia!

Köszi, ennek a grafikus lib-nek a mintáit próbálom átalakítani a panelomhoz, ahogy az első hozzászólásomban említettem ;)
Hihetetlen jó kis cucc, van hozzá egy Windows-os tervező ami félig meddig legenerálja neked a kódot (nézd meg ezt a videót ha van kedved : http://www.youtube.com/watch?v=PL3enedXTs4 , csak annyi számomra a bibi, hogy a minták az st drágább eval boardjaihoz vannak, amin nem 32f407 van, úgyhogy van a portolással meló dögivel, ráadásul objektum orientált kódszerűség, ami aztán végképp magas nekem, mint ahogy azok a "pointerek" is, nekem is;)
Használom őket, de én sem értem igazán a lényegüket :oops: , talán majd egyszer...

Itt van az én kódom amivel karaktereket írok az lcd-re, remélem tudsz belőle ötletet meríteni, az a baj, hogy a két lcd nagyon különbözik egymástól így nem biztos, hogy nagy segítség :( Megpróbáltam kommentezni, hogy valamenyire érthető legyen, de ebben se vagyok túl jó :( :

Kód: Egész kijelölése

#include "english_16x8.h"

void lcd_write_karakter(uint8_t data,uint16_t cbcolor,uint16_t cfcolor)
{
/*	uint16_t avl,i,n;
	lcd_write_command(0x0022); //Számodra nem lényeges, az én kijelzőmnél a képRAM-ba írás parancsa
	for(i=0;i<16;i++) //16 pixel magas a karakter
	{
		avl=english[data-32][i]; //english konstans (ezt én is a netről szerváltam) ez tartalmazza az adatokat -> az include-olt .h-ban
			for(n=0;n<8;n++) /8 pixel széles a karakter
			{
				
					if (avl&0x80) lcd_write_data(cfcolor);  // ha 1 az aktuális képpont akkor rajzol egy "előtérszínt"
					else lcd_write_data(cbcolor); // ha 0 az aktuális képpont akkor rajzol egy "háttérszínt"
					avl<<=1;
				 }								
				
			}


    
}

void lcd_write_text(char *s,uint16_t stxpos,uint16_t stypos,uint16_t sbcolor,uint16_t sfcolor)
{
	LCD_CS_L; // nálad nem lényeges, nálam az lcd chip select lábának a vezérlése
	uint8_t k=0;
	
	while (*s)
	{
		lcd_set_window(stypos,stxpos+k,8,16); //Ez az én kijelzőmnél megint csak egy speckó dolog, a lényege az
						      //hogy lecsökkentem a képernyő ram méretét egy tetszőleges méretre,
						      //most épp 8*16 pixelre, így csak a kezdő pozíciót kell megadnom,hs
					              //folyamatosan tolom be az adatokat akkor feltölti ezt a "kis" ablakot...
		lcd_write_karakter(*s,sbcolor,sfcolor);
		k=k+8;
		s++;
	}
	lcd_write_bus(0x0020,0x0000); //ezek a sorok szintén az én kijelzőm számára kell, neked lényegtelenek
	lcd_write_bus(0x0021,0x0000);
	lcd_write_bus(0x0050,0x0000);
	lcd_write_bus(0x0051,239);
	lcd_write_bus(0x0052,0x0000);
	lcd_write_bus(0x0053,319);
	LCD_CS_H;	
}
Az english_16x8.h-t feltöltöttem ide:
http://www.4shared.com/file/HUZZRlhF/ ... furl=d1ur
Remélem a hétvégén végre meg tudom csinálni az új panelom, és folytathatom én is a "fejlesztést"....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Köszi a Fontokat!
De nincsenek benne ékezetes betűk?

Majd ha lesz rá időm (ha már használni is tudom!:)) kiegészítem.
Nekem ez a gyengém! Legalább mi csináljuk meg magunknak.

A mintádból pont az 1*1-et hagytad ki. Hogyan kel meghívni az olyan rutint, amiben a Tömböt Pointerrel adomát?

Most Rendeltem 1 Nokia kijelzőt!
Majd az már legalább színes lesz. Sajnos jóval kisebb, mint a tied!
Érdekes lesz illeszteni az ARM-hoz. Remélem ahhoz majd jobban találok mintákat.
:wink:

A kis vacak mikro USB csatlakozóval nem vagyok kibékülve!
3 átalakítót kellet közbeiktatnom, mire rá tudtam csatlakoztatni az PenDrivet.
De még nem vagyok benne biztos, hogy egyáltalán jó lesz?
:?
Avatar
ImTilk
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2010. február 6. szombat, 7:00

Hozzászólás Szerző: ImTilk »

Szívesen!
Éreztem, hogy nem sokat fog segíteni a kód,de gondoltam hátha :(
Igazándiból nem értem a kérdésedet, mondtam én, hogy hiába vagyok kicsit előrébb még nagyon béna vagyok c-ben, sok mindent alkalmazok, de sok mindent nem értek...

Nem tudom erre gondolsz-e, de hátha:

Kód: Egész kijelölése

char *data;
data="abcd";

 lcd_write_text(data,10,10,RED,YELLOW) ;
A magyar karakter bővítés majd talán a hossz téli estéken nekem is bele fognak férni, hiányzik nekem is...
Én vettem egy micro usb átalakítót (1,5 dolcsi volt szállítással együtt :D), úgyhogy ilyen gondom nincs...
Van a discovery minták közt egy olyan amivel flash-elni tudod a panelt pendriveról... Azzal könnyen le tudod tesztelni az átalakítódat, marha jópofa dolog....
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Á pont ez, ami nem volt tiszta!

Viszont a hiba az volt, hogy uint8_t-nek deklarált tömbbe becsúszott nagyobb értékű szám is.

De legalább jól körbe jártam a témát!

Kösz! A tesztelési ötletet. Már nagyon izgat az USB Host kezelése!

Magyar boltban nem találtam ilyen USB átalakítót. Így jóval többe került nekem.

Olyan béna vagyok, nem tudok külföldről rendelni! Nincsen bankszámlám. És nem tudom, hogyan kel a dolárt, EU-t átutalni.
Avatar
ImTilk
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2010. február 6. szombat, 7:00

Hozzászólás Szerző: ImTilk »

Örülök, hogy segíthettem... (Dagad is a mellem rendesen, én segítettem c-ben valakinek, nem is olyan rég ezt nem gondoltam volna :D)
C-ben nekem nagyon zavaró, hogy szigorú a változók típusa, nincs olyan egyszerű típuskonverzió mint pl. a bascomban...
Itt mindenért nyafog a fordító...
Jobb esetben warning van csak (de ezt se szeretem, mert rejtett hibákat okozhat), rossz esetben error...
Azt is megfigyeltem, jó sok kódot átböngészve, hogy pl. a fent használt char változó "kiment a divatból", uint8_t használnak helyette....
Ja és ahogy tapasztaltam pl. , hogy fordító és fordító között is van különbség...
Belefutottam abba, hogy az alábbi makró Avrstudio+gcc alatt működik tökéletesen, viszont Keil alatt már le se fordul...
Annyit csinál, hogy egyesít két 8 bites számot egy 16 bitessé, a tapipadhoz kellett, spi-n egymás után jön két 8 bites adat ezeket kellet a 16 bites koordináta adattá összerakni :

Kód: Egész kijelölése

	typedef union
{
    uint8_t bytes[2];
    uint16_t word;
} CompositeVal;
	
	#define MAKE_WORD(lo, hi) ({CompositeVal val;val.bytes[0] = lo;val.bytes[1] = hi;val.word;})

Megoldottam, és utólag nem is bánom, tanultam ebből is...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Szépen haladtok ezzel a holmival...
Tetszik a sok és átláthatóvá váló C kód :).
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Nálam mükxik az előző kódod. Vált oda vissza!

Kód: Egész kijelölése

//*.h
typedef union
{
  uint8_t bytes[2];
  uint16_t word;
} CompositeVal;

 #define MAKE_WORD(lo, hi) ({CompositeVal val; val.bytes[0] = lo; val.bytes[1] = hi; val.word;})

void Valto(void); 

Kód: Egész kijelölése

//*.c
void Valto(void){
CompositeVal Byte_Word;
uint8_t b1 = 1;
uint8_t b2 = 2;
uint16_t Word;

// Word < 2 byte
Byte_Word.bytes[0] = b1;
Byte_Word.bytes[1] = b2;
Word = Byte_Word.word;
// 2 Byte < Word
Word = 1234;
Byte_Word.word = Word;
b1 = Byte_Word.bytes[0];
b2 = Byte_Word.bytes[1];


b0 = 100;
b1 = 200;

Word = MAKE_WORD(b0, b1);

}
Debugban jók az eredmények.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Folytatás itt: ARM STM32F4DISCOVERY board II.
http://avr.tavir.hu/modules.php?name=Fo ... pic&t=1105
:arrow:

STM32F4-Discovery Demo:exe1
http://www.emcu.it/STM32F4xx/Exe1/EXE1.html#Software
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

Re: ARM STM32F4DISCOVERY board

Hozzászólás Szerző: winnerbt »

Szia!
Én is szert tettem egy ilyen panelra. Átolvastagattam a témát, de amit nem értek:
Az LCD 5V-os az STM32 meg 3.3. Hogyan is lett illesztve?
JAni
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: ARM STM32F4DISCOVERY board

Hozzászólás Szerző: kapu48 »

Így kiegészíteném:
Az LCD 5V-os az STM32 meg 3.3V a legtöbb I/O 5V toleráns.

Hogyan is lett illesztve? Sehogy!
Simán összekötöttem a I/O lábakat.
Az LCD kapott külön 5V tápot.

Programozásnál ügyelni! ARM adat I/O-k csak az LCD írásakor lehet O (Kimenet)!
(Nem szembe kapcsolni őket! De ezt már valószínűleg tudod!)
Gyárilag raknak 120ohm áramkorlátozókat.

8)
Válasz küldése