STM32F4DISCOVERY i COOCOX pierwsze kroki miganie ledami

Rozmowy na temat układów elektronicznych sterowania obrabiarek CNC
Awatar użytkownika

Autor tematu
AOLEK
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 9
Posty: 376
Rejestracja: 17 lip 2011, 20:27
Lokalizacja: Świdnica

#11

Post napisał: AOLEK » 13 paź 2012, 14:15

To może zacznijmy od tego a potem będzie łatwiej :grin:

Kod: Zaznacz cały

 #define HWREG(x)         (*((volatile unsigned long *)(x))) 
  #define RCC             0x40023800 
  #define RCC_AHB1ENR     (RCC + 0x30) 
  #define GPIOA             0x40020000 
  #define GPIOA_IDR        (GPIOA + 0x10) 
  #define GPIOD            0x40020c00 
  #define GPIOD_MODER     (GPIOD + 0x0) 
  #define GPIOD_BSRR      (GPIOD + 0x18) 

  #define STACK_TOP 0x20002000                                        /* To może poruszać się całkiem szybko! */
albo jakieś namiary...


SPRZEDAM dwie nakrętki kulowe 20x5 więcej w dziale GIEŁDA !

Tagi:

Awatar użytkownika

markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 13
Posty: 3962
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

#12

Post napisał: markcomp77 » 13 paź 2012, 22:21

ten mój wcześniejszy blink również się kompiluje pod coIDE :)

Kod: Zaznacz cały

/* missing type */ 
 typedef unsigned int uint32_t; 


 /* hardware configuration */ 
 #define GPIOD 0x40020C00              /* port D */ 
 #define GPIOD_MODER (GPIOD + 0x00)    /* port mode register */ 
 #define LED_PORT_ODR (GPIOD + 0x14)   /* port output data register */ 
 #define LED_GREEN (1 << 12)           /* port D, pin 12 */ 
 #define LED_ORANGE (1 << 13)          /* port D, pin 13 */ 
 #define LED_RED (1 << 14)             /* port D, pin 14 */ 
 #define LED_BLUE (1 << 15)            /* port D, pin 15 */ 

 void _tmain(void) { 
     main(); 
 } 
 static inline void setup_leds(void) 
 { 
   *(volatile uint32_t*)GPIOD_MODER |= (1 << (12 * 2)) | (1 << (13 * 2)) | 
       (1 << (13 * 2)) | (1 << (14 * 2)) | (1 << (15 * 2)); 
 } 


 static inline void switch_leds_on(void) 
 { 
   *(volatile uint32_t*)LED_PORT_ODR = LED_BLUE | LED_GREEN | LED_ORANGE | LED_RED; 
 } 

 static inline void switch_leds_off(void) 
 { 
   *(volatile uint32_t*)LED_PORT_ODR = 0; 
 } 

 #define delay()                                    \ 
 do {                                            \ 
   register unsigned int i;                        \ 
   for (i = 0; i < 1000000; ++i)                    \ 
     __asm__ __volatile__ ("nop\n\t":::"memory");\ 
 } while (0) 

 /* static void __attribute__((naked)) __attribute__((used)) main(void) */ 
 void main(void) 
 { 
   setup_leds(); 

   while (1) 
   { 
     switch_leds_on(); 
     delay(); 
     switch_leds_off(); 
     delay(); 
   } 
 } 
AOLEK pisze:To może zacznijmy od tego a potem będzie łatwiej

Kod: Zaznacz cały

#define HWREG(x)         (*((volatile unsigned long *)(x))) 
#define RCC             0x40023800 
#define RCC_AHB1ENR     (RCC + 0x30) 
#define GPIOA             0x40020000 
#define GPIOA_IDR        (GPIOA + 0x10) 
#define GPIOD            0x40020c00 
#define GPIOD_MODER     (GPIOD + 0x0) 
#define GPIOD_BSRR      (GPIOD + 0x18) 

#define STACK_TOP 0x20002000

albo jakieś namiary...
dużo na temat symboli typu GPIOx można znaleźć nocie stm32 (mapie pamięci)

np. -- wzięte z noty:

Kod: Zaznacz cały

0x4004 0000 - 0x4007 FFFF USB OTG HS
0x4002 9400 - 0x4003 FFFF Reserved
0x4002 9000 - 0x4002 93FF
0x4002 8C00 - 0x4002 8FFF
0x4002 8800 - 0x4002 8BFF ETHERNET MAC
0x4002 8400 - 0x4002 87FF
0x4002 8000 - 0x4002 83FF
0x4002 6800 - 0x4002 7FFF 0x4002 6400 - 0x4002 67FF DMA2
0x4002 6000 - 0x4002 63FF DMA1
0X4002 5000 - 0X4002 5FFF Reserved
0x4002 4000 - 0x4002 4FFF 
0x4002 3C00 - 0x4002 3FFF Flash interface register
0x4002 3800 - 0x4002 3BFF RCC
0X4002 3400 - 0X4002 37FF Reserved
0x4002 3000 - 0x4002 33FF CRC
0x4002 2400 - 0x4002 2FFF Reserved
0x4002 2000 - 0x4002 23FF GPIOI
0x4002 1C00 - 0x4002 1FFF GPIOH
0x4002 1800 - 0x4002 1BFF GPIOG
0x4002 1400 - 0x4002 17FF GPIOF
0x4002 1000 - 0x4002 13FF GPIOE
0X4002 0C00 - 0x4002 0FFF GPIOD
0x4002 0800 - 0x4002 0BFF GPIOC
0x4002 0400 - 0x4002 07FF GPIOB
0x4002 0000 - 0x4002 03FF GPIOA
0x4001 5800- 0x4001 FFFF Reserved
zazwyczaj symbole typu GPIOx bywają zdefiniowane w #includach

[ Dodano: 2012-10-13, 22:29 ]
http://www.emcu.it/STM32/STM32VLDiscove ... brary.html

tutaj jest nieźle wyjaśnione inicjowanie peryferii...
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm

Awatar użytkownika

Autor tematu
AOLEK
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 9
Posty: 376
Rejestracja: 17 lip 2011, 20:27
Lokalizacja: Świdnica

#13

Post napisał: AOLEK » 14 paź 2012, 07:03

A TU można na tłumacza google wrzucić gość opisuje jescze jakieś ustawienia tylko w jakim celu ? to niezabardzo kumam.
SPRZEDAM dwie nakrętki kulowe 20x5 więcej w dziale GIEŁDA !

Awatar użytkownika

markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 13
Posty: 3962
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

#14

Post napisał: markcomp77 » 14 paź 2012, 14:12

fajny opis... dzięks

ta "ręczna" metoda wysyłania binarki do modułu discovery działa, również wysłanie wygenerowanego pliku *.elf przez coIDE - jednak nie udaje mi się tego wysłać z coIDE pod Wine, bo jakoś nie udaje się klientowi stlink w coIDE skomunikować z serverikiem stlink zaimplementowanym pod linuksem (gdbserver/st-util fu bar)
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm

Awatar użytkownika

Autor tematu
AOLEK
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 9
Posty: 376
Rejestracja: 17 lip 2011, 20:27
Lokalizacja: Świdnica

#15

Post napisał: AOLEK » 14 paź 2012, 16:15

fajny opis... dzięks
Ustawić według tego opisu ?
Niewiem czy to pod linuxem się przyda ale jak wczoraj czytałem i dobrze zrozumiałem to rozwiązaniem jest wcześniejsza wersja drivera stlink ale to chba chodziło o komunikacje w XP
Załączniki
STLinkUSBDriver.zip
(203.73 KiB) Pobrany 173 razy
SPRZEDAM dwie nakrętki kulowe 20x5 więcej w dziale GIEŁDA !

Awatar użytkownika

ursus_arctos
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 7
Posty: 2083
Rejestracja: 11 cze 2011, 18:29
Lokalizacja: Warszawa / Lublin

#16

Post napisał: ursus_arctos » 15 paź 2012, 10:42

Hmm... widzę, że koledzy chcą ustawić peryferia "na pałę", bez bibliotek... To się może zemścić. Jeżeli nie podobają się te od ST (w sumie nie dziwię się), to może libopencm3?

Awatar użytkownika

markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 13
Posty: 3962
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

#17

Post napisał: markcomp77 » 15 paź 2012, 11:01

ursus_arctos pisze:Hmm... widzę, że koledzy chcą ustawić peryferia "na pałę", bez bibliotek... To się może zemścić. Jeżeli nie podobają się te od ST (w sumie nie dziwię się), to może libopencm3?
hehe... "na pałę"...tak trochę chcemy skumać co i gdzie tam jest w tym stm32
projekt led - blink - to dobra okazja na zrozumienie...

ja to mam jeszcze problem ze skomunikowanie coIDE na Wine z discovery...
samo coIDE poza pewnymi zawieszeniami, właściwie działa dość sprawnie pod Wine/Linux-64b
pozostaje jedynie dorobić jakoś tę komunikację - bo sam plik *.elf daje się przesłać "z ręki" do discovery... ale to nie jest praca interaktywna.. a przydało by się debugowanie w coIDE
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm

Awatar użytkownika

ursus_arctos
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 7
Posty: 2083
Rejestracja: 11 cze 2011, 18:29
Lokalizacja: Warszawa / Lublin

#18

Post napisał: ursus_arctos » 15 paź 2012, 11:05

Do znajdowania co i gdzie to fajnie jest liby pooglądać. Znowu, więcej widać w libopencm3 niż w oryginalnym CMSIS.
BTW - gdzie jest inicjalizacja procka? PLL trzeba ustawić, reset handler... Rozumiem, że jest oddzielny pliczek do tego, buchnięty z jakichś bibliotek?

Awatar użytkownika

markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 13
Posty: 3962
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

#19

Post napisał: markcomp77 » 15 paź 2012, 11:43

ursus_arctos pisze: więcej widać w libopencm3 niż w oryginalnym CMSIS
dzięki za wsparcie..
ja jak zwykle zagoniony - ale może uda mi sie przez chwilę coś poczytać na temat tej biblioteki...

Kod: Zaznacz cały

mark@hpecik:~$ cd ARM
mark@hpecik:~/ARM$ mkdir libopencm3
mark@hpecik:~/ARM$ cd libopencm3/
mark@hpecik:~/ARM/libopencm3$  git clone git://github.com/libopencm3/libopencm3.git
Cloning into 'libopencm3'...
remote: Counting objects: 8530, done.
remote: Compressing objects: 100% (2760/2760), done.
remote: Total 8530 (delta 5493), reused 8452 (delta 5438) 
Receiving objects: 100% (8530/8530), 1.34 MiB | 850 KiB/s, done.
Resolving deltas: 100% (5493/5493), done.
mark@hpecik:~/ARM/libopencm3$ cd libopencm3/
mark@hpecik:~/ARM/libopencm3/libopencm3$ make
  BUILD   lib/stm32/f1
  CP      libopencm3_stm32f1.ld
  CC      vector.o
  CC      rcc.o
....
  BUILD   examples/lpc43xx/hackrf-jellybean/ssp
  BUILD   examples/lpc43xx/hackrf-jellybean/systick
  BUILD   examples/lm3s/lm3s3748-evb/miniblink
biblioteka łatwo się ściągnęła... i dało się coś kompilować :)
o!... jest i jakaś dokumentacja i również daje się makeować :)

zabieram się za oglądanie doc przez html... dzięks:)

[ Dodano: 2012-10-15, 11:49 ]
tak wygląda miganie z libopencm3

Kod: Zaznacz cały

#include <libopencm3/stm32/f4/rcc.h> 
#include <libopencm3/stm32/f4/gpio.h> 

/* Set STM32 to 168 MHz. */
void clock_setup(void) 
{ 
	rcc_clock_setup_hse_3v3(&hse_8mhz_3v3[CLOCK_3V3_168MHZ]); 

	/* Enable GPIOD clock. */
	rcc_peripheral_enable_clock(&RCC_AHB1ENR, RCC_AHB1ENR_IOPDEN); 
} 

void gpio_setup(void) 
{ 
	/* Set GPIO12-15 (in GPIO port D) to 'output push-pull'. */
	gpio_mode_setup(GPIOD, GPIO_MODE_OUTPUT,
			GPIO_PUPD_NONE, GPIO12 | GPIO13 | GPIO14 | GPIO15); 
} 

int main(void) 
{ 
	int i; 

	clock_setup(); 
	gpio_setup(); 

	/* Set two LEDs for wigwag effect when toggling. */
	gpio_set(GPIOD, GPIO12 | GPIO14); 

	/* Blink the LEDs (PD12, PD13, PD14 and PD15) on the board. */
	while (1) { 
		/* Toggle LEDs. */
		gpio_toggle(GPIOD, GPIO12 | GPIO13 | GPIO14 | GPIO15); 
		for (i = 0; i < 6000000; i++) /* Wait a bit. */
			__asm__("nop"); 
	} 

	return 0; 
} 
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm

Awatar użytkownika

ursus_arctos
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 7
Posty: 2083
Rejestracja: 11 cze 2011, 18:29
Lokalizacja: Warszawa / Lublin

#20

Post napisał: ursus_arctos » 15 paź 2012, 11:58

Nie widzę tu jeszcze ustawienia prędkości GPIO - w CMSIS ustawia się prędkość GPIO od 2MHz do 50MHz.... Pewnie jest po prostu ustawione 50 na sztywno.
Mnie niestety libopencm3 nie udało się odpalić, bo Makefile intensywnie używa basha - a pod winxp siłą rzeczy mu to nie wychodzi ;). Muszę przerobić tego makefila, ale na razie utknąłem na hardwarowych problemach ze sterownikiem silnika, więc STM32 czeka na lepsze czasy.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika CNC”