Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

kompajler za stm32

[es] :: Elektronika :: Mikrokontroleri :: kompajler za stm32

[ Pregleda: 1923 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

GORSHTAK
Ivan Matić

Član broj: 136182
Poruke: 285
...148.91.adsl.dyn.beotel.net.



+5 Profil

icon kompajler za stm3206.01.2016. u 16:00 - pre 58 meseci
Zdravo svima,

dobio sam da radim sa stm32f415 mikrokontrolerom (iskustvo 0).

Nesto sam uspeo da isprogramiram u sledecim okruzenjima, Keil i IAR, (ali nisam postigao da rade isto).
Medjutim, posto su ova dva okruzenja komercijalna, voleo bih da radim na nekom besplatnom okruzenju (npr https://launchpad.net/gcc-arm-embedded)

Takodje sam skinuo eclipse plug-in http://gnuarmeclipse.github.io/

ono sto za pocetak pokusavam je obicno paljenje lampica. Lampice su na sledecim portovima: c12, c13 (STAT i DATA) i a14 (eksterno povezana na pin u-kontrolera)
u keil sam aktivirao c12 i c13, ali ne i a14 (dobio gotov primer)
u IAR sam aktivirao samo a14 (postoji primer u okviru FreeRTOS-a)
u eklipsi nijedan (koristio sam templejt projekat i rekonfigurisao gde mi se nalazi LED)
jos jedna varijanta sa kojom sam tek krenuo da eksperimentisem je codebench lite, ali bih radije da ovo izbegnem


Da li je neko uspeo da koristi https://launchpad.net/gcc-arm-embedded u programiranju stm32?
Jel imate neki savet gde da pogledam kako se pravilno inicijalizuju periferije, ili da mi posaljete gotov primer

Trenutno nemam nijedan primer da prilozim...
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Beograd, Vračar

Član broj: 288510
Poruke: 4259
95x153x130x207.kubangsm.ru.

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+486 Profil

icon Re: kompajler za stm3206.01.2016. u 17:40 - pre 58 meseci
www.coocox.org/
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15267
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2324 Profil

icon Re: kompajler za stm3206.01.2016. u 19:25 - pre 58 meseci
attolic true studio ti je trenutno najbolje free okruzenje koje postoji
za arm
 
Odgovor na temu

GORSHTAK
Ivan Matić

Član broj: 136182
Poruke: 285
...148.91.adsl.dyn.beotel.net.



+5 Profil

icon Re: kompajler za stm3208.01.2016. u 21:19 - pre 58 meseci
CoIDE je veoma nestabilan, guta resurse, pada, a i u trenutku kada je radio, imao sam konfliktre tokom kompajla, nesto ne radi lepo sa repozitorijumom...

Attolic generalno nije los, a primetio sam da nema release konfiguraciju, samo debug.
A primetio sam razliku u elementima strukture GPIO_TypeDef, jer sadrzi short elemente BSRRL i BSRRH, dok je u drugim okruzenjima int BSRR (nije strasno, ali moze napraviti zbrku tokom migracije na neko drugo okruzenje)

U oba slucaja nisam uspeo da nateram lampice da blinkaju...

Ploca na kojoj radim je bazirana na ovom uC http://www.mikroe.com/mini/stm32/
Na ploci ne postoji taster, i samo je jedna lampica na A14 portu.

Sad primeri kodova:

Keil:
Code (c):

void delay(int value) {
     int i = value*10000;
     while(i>0) {i--;}
}

void blinky (void const *argumnt) {
     while( 1 ) {
          GPIOC->BSRR = GPIO_BSRR_BS_13;
          GPIOC->BSRR = GPIO_BSRR_BS_12;
          delay(500);

          GPIOC->BSRR = GPIO_BSRR_BR_13;         
          delay(500);
         
         
          GPIOC->BSRR = GPIO_BSRR_BR_12;
          delay(500);
          GPIOC->BSRR = GPIO_BSRR_BS_13;
          delay(500);
          GPIOC->BSRR = GPIO_BSRR_BS_12;
          delay(500);
          GPIOC->BSRR = GPIO_BSRR_BR_13;         
          delay(500);
          GPIOC->BSRR = GPIO_BSRR_BS_13;
          delay(500);
          GPIOC->BSRR = GPIO_BSRR_BR_13;     
          GPIOC->BSRR = GPIO_BSRR_BR_12;     
          delay(500);
     //   */
     
     //   /*   lampica koja se ne pali
          GPIOA->BSRR = GPIO_BSRR_BS_14;
          delay(500);
          //osDelay(200);
          GPIOA->BSRR = GPIO_BSRR_BR_14;
          delay(500);
          //osDelay(500);
          GPIOA->BSRR = GPIO_BSRR_BS_14;
          delay(500);
          //osDelay(200);
          GPIOA->BSRR = GPIO_BSRR_BR_14;
          delay(500);

//        */
     }
}

/*
 * main: initialize and start the system
 */

int main (void) {
     // initialize peripherals here
     RCC->AHB1ENR = (RCC_AHB1ENR_GPIOCEN | RCC_AHB1ENR_GPIOAEN);
//   RCC->AHB1ENR |= (RCC_AHB1ENR_GPIOAEN);
//   /* // inicijalizacija C12 i C13
     GPIOC->MODER |= (GPIO_MODER_MODER12_0 | GPIO_MODER_MODER13_0);
     GPIOC->OTYPER &= ~(GPIO_OTYPER_OT_12 | GPIO_OTYPER_OT_13);
     GPIOC->OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR12 | GPIO_OSPEEDER_OSPEEDR13);
     GPIOC->PUPDR &= ~(GPIO_PUPDR_PUPDR12 | GPIO_PUPDR_PUPDR13);
     
//   */  // inicijalizacija A14
     GPIOA->MODER |= (GPIO_MODER_MODER14_0 );
     GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_14);
     GPIOA->OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR14 );
     GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR14 );
     
     blinky(0);
 
}
 


Ovaj kod pali samo C12 i C13 LED, a ne i A14. Da li neko primecuje, da li sam izostavio nesto tokom inicijalizacije?

--------------------------------
Za Attolic

Code (c):



//  stm32_discovery.h

#define LEDn                             3

#define LED4_PIN                         GPIO_Pin_12
#define LED4_GPIO_PORT                   GPIOC
#define LED4_GPIO_CLK                    RCC_AHB1Periph_GPIOC
 
#define LED3_PIN                         GPIO_Pin_13
#define LED3_GPIO_PORT                   GPIOC
#define LED3_GPIO_CLK                    RCC_AHB1Periph_GPIOC
 
#define LED5_PIN                         GPIO_Pin_14
#define LED5_GPIO_PORT                   GPIOA
#define LED5_GPIO_CLK                    RCC_AHB1Periph_GPIOA

void STM_EVAL_LEDInit(Led_TypeDef Led)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
 
  /* Enable the GPIO_LED Clock */
  RCC_AHB1PeriphClockCmd(GPIO_CLK[Led], ENABLE);

  /* Configure the GPIO_LED pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);
}

void STM_EVAL_LEDOn(Led_TypeDef Led)
{
  GPIO_PORT[Led]->BSRRL = GPIO_PIN[Led];
}

void STM_EVAL_LEDOff(Led_TypeDef Led)
{
  GPIO_PORT[Led]->BSRRH = GPIO_PIN[Led];  
}


void STM_EVAL_LEDToggle(Led_TypeDef Led)
{
  GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];
}

/////////// main.c
void delay(int value) {
     int i = value*10000;
     while(i>0) {i--;}
}

int main(void)
{
  RCC_ClocksTypeDef RCC_Clocks;
 
  /* Initialize LEDs and User_Button on STM32F4-Discovery --------------------*/
//  STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI);
 
  STM_EVAL_LEDInit(LED4);
  STM_EVAL_LEDInit(LED3);
  STM_EVAL_LEDInit(LED5);
 // STM_EVAL_LEDInit(LED6);
 
  delay(500);
  /* SysTick end of count event each 10ms */
  RCC_GetClocksFreq(&RCC_Clocks);
  SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);
 
  STM_EVAL_LEDToggle(LED4);
     delay(10);
     /* Toggle LED4 */
     STM_EVAL_LEDToggle(LED3);
     delay(10);
     /* Toggle LED4 */
     STM_EVAL_LEDToggle(LED5);
     delay(10);

while(1) {
    /* Turn on LEDs available on STM32F4-Discovery ---------------------------*/
    STM_EVAL_LEDOn(LED4);
    STM_EVAL_LEDOn(LED3);
    STM_EVAL_LEDOn(LED5);
  //  STM_EVAL_LEDOn(LED6);

    delay(500);
    STM_EVAL_LEDToggle(LED4);
    STM_EVAL_LEDToggle(LED3);
    STM_EVAL_LEDToggle(LED5);
    delay(100);

      /* Turn off LEDs available on STM32F4-Discovery ------------------------*/
      STM_EVAL_LEDOff(LED4);
      STM_EVAL_LEDOff(LED3);
      STM_EVAL_LEDOff(LED5);
   //   STM_EVAL_LEDOff(LED6);
      delay(500);
      STM_EVAL_LEDToggle(LED4);
          STM_EVAL_LEDToggle(LED3);
          STM_EVAL_LEDToggle(LED5);
          delay(100);
}

}

 


main sam modifikovao, jer je originalni primer pravljen za diskovery plocu, koja ima i taster, ali svakako ne pali lampice.
i zna li neko cemu sluzi toggle u ovom primeru?
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 876
*.dynamic.isp.telekom.rs.



+78 Profil

icon Re: kompajler za stm3208.01.2016. u 22:54 - pre 58 meseci
Taj pin PA14 je istovremeno i SWCLK. Možda treba da se isključi SWD da bi taj pin koristio kao output pin. Možeš li da staviš LED na neki drugi pin porta A pa onda probaš?
gorankg
 
Odgovor na temu

GORSHTAK
Ivan Matić

Član broj: 136182
Poruke: 285
...148.91.adsl.dyn.beotel.net.



+5 Profil

icon Re: kompajler za stm3209.01.2016. u 01:02 - pre 58 meseci
Na zalost, ne. Elektronicar je tako zalemio....
Inace, u IAR-u uspevam da upalim pin (FreeRTOS templejt), ali je previse zamrsen kod, i ne radi mi u IAR-u "Go to definition" opcija, pa mi je tesko da ispratim.
 
Odgovor na temu

motor
Stjepan Bartolović
Požega

Član broj: 78890
Poruke: 166
109.227.16.*



Profil

icon Re: kompajler za stm3216.01.2016. u 20:54 - pre 58 meseci
Program za paljenje LED dioda za tvoj MCU je slijedeći:

Konfiguracija takta MCU-a,neka je naprimjer 64Mhz:
Code:


void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  __PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = 16;
  RCC_OscInitStruct.PLL.PLLN = 128;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}


Konfiguracija pina na kojima su prikljucene tri LED diode:
Code:


void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Port Clock Enable */
  __GPIOC_CLK_ENABLE();
  __GPIOA_CLK_ENABLE();

  /*Configure GPIO pins : PC13 PC12 */
  GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_12;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure GPIO pin : PA14 */
  GPIO_InitStruct.Pin = GPIO_PIN_14;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}


Glavni program:

Code:


#include "stm32f4xx_hal.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  while (1)
  {
   HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_12);
   HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13)
   HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_14)
   HAL_Delay(500);
  }

}




 
Odgovor na temu

GORSHTAK
Ivan Matić

Član broj: 136182
Poruke: 285
212.178.244.*



+5 Profil

icon Re: kompajler za stm3214.02.2016. u 01:09 - pre 57 meseci
Bio sam malo odsutan :)
U medjuvremenu sam saznao za aplikaiju koja generise kod za doticni MCU, STM32CubeMX.
Sa tim sam dosta uradio. Naravno, imam jos puno toga da provaljujem, ali drugom prilikom o tome....
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: kompajler za stm32

[ Pregleda: 1923 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.