STM32F4 Discovery Program Yükleme.

Başlatan LukeSkywalker, 03 Temmuz 2012, 22:44:55

SrtG

Elinde eğer hazır bir proje dosyası yoksa internetten ilk olarak basit led uygulamalarını indirebilirsin. Bu uygulamaların içindeki .hex uzantılı dosyayı yükleyeceksin st-link utility ile.
öncelikle şunu söyleyim iki çeşit usb kablosu var. midi ve mini. bir tanesini usb port ve power için kullanıyorsun diğerini ise yazılım yüklemek için. st-link utility ile yükleme yaparken iki kablon da takılı olması gerekiyor. ilk olarak connect butonuna tıklayıp aygıtını görmen gerekiyor. eğer bağlanmıyorsa verdiği hatayı yazarsan cevap yazabiliriz. eğer bağlantı yapıyorsan, yükleyeceğin dosyayı, dosya aç ile açtıktan sonra, bağlan butonunun sağındaki 3. buton olan program verify ile programı kite yüklüyorsun ve çalışıyor...

st-link utility haricinde program yazabilmek için bir yazılım indirmelisin. bu Keil olabilir veya atollic olabilir. biraz araştırmalısın. Ben Keil kullanıyorum...

Bu arada, ben de bu işte yeniyim...
Acilen yardıma ihtiyacım var. stm32f4 ile gerilim ve frekans ölçer yapmam gerekiyor. yardım lütfen.

camby

Alıntı yapılan: SrtG - 05 Haziran 2013, 23:48:57
Bu arada, ben de bu işte yeniyim...
Acilen yardıma ihtiyacım var. stm32f4 ile gerilim ve frekans ölçer yapmam gerekiyor. yardım lütfen.

Kit'e kod atıp led yakıp söndürdüyseniz olayın büyük kısmı bitmiştir.

Gerilim ve frekans için çalışmaya başladınız mı ?

ADC örnekleri vardı farklı farklı forumda.. Takıldığın bir yer var mı ?

SrtG

Alıntı yapılan: camby - 06 Haziran 2013, 00:04:04
Kit'e kod atıp led yakıp söndürdüyseniz olayın büyük kısmı bitmiştir.

Gerilim ve frekans için çalışmaya başladınız mı ?

ADC örnekleri vardı farklı farklı forumda.. Takıldığın bir yer var mı ?

Araştırmalar yapıyorum ama şimdiye kadar bir yere vardığım söylenemez. bulduğum uygulamaları yükleyip çalıştırabiliyorum. Bu forumda iki ayrı başlık buldum ADC kullanıp sonucu LCD de görme ile ilgili ama konular yarım kalmış gibi. yani çalışan programlar gibi görünmüyor. Forumdaki Kaan'ın blogunu da takip ediyorum programlarını çalıştırmaya çalışıyorum ancak henüz içerisinde pin bağlantıları bulunan bir uygulamayı çalıştırabilmiş değilim. ne zaman lcd bağlantısı yapmaya çalışsam kiti kaybediyorum ve reset atmak zorunda kalıyorum...

Bu forumdaki ADC ve LCD ile çalışmış iki arkadaştan yardım istedim cvplarını bekliyorum. Siz bu konuda yardımcı olabilir misiniz?

mesmert

Konuyu biraz bölmüş olacam ama STM serisi mikrokontrollere code protected işlemi nasıl yapılıyor internette araştırdım ama pek bir bilgi bulamadım.

camby

Alıntı yapılan: SrtG - 06 Haziran 2013, 01:13:56
Araştırmalar yapıyorum ama şimdiye kadar bir yere vardığım söylenemez. bulduğum uygulamaları yükleyip çalıştırabiliyorum. Bu forumda iki ayrı başlık buldum ADC kullanıp sonucu LCD de görme ile ilgili ama konular yarım kalmış gibi. yani çalışan programlar gibi görünmüyor. Forumdaki Kaan'ın blogunu da takip ediyorum programlarını çalıştırmaya çalışıyorum ancak henüz içerisinde pin bağlantıları bulunan bir uygulamayı çalıştırabilmiş değilim. ne zaman lcd bağlantısı yapmaya çalışsam kiti kaybediyorum ve reset atmak zorunda kalıyorum...

Bu forumdaki ADC ve LCD ile çalışmış iki arkadaştan yardım istedim cvplarını bekliyorum. Siz bu konuda yardımcı olabilir misiniz?

Yol gösterebilirim yada mevcut çalışmalarınız hakkında konuşabiliriz.

Discovery kitte çalışıyorsunuz büyük ihtimalle. İlk adım olarak ölçüm sonucunu görmeniz gerekli , bunun için de elinizdeki LCD'yi düzgün bir şeklide çalıştırmanız lazım. LCD ne var elinizde ?

@mesmert

forumda vardı sanki bu konu

SrtG

Alıntı yapılan: camby - 06 Haziran 2013, 14:52:41
Yol gösterebilirim yada mevcut çalışmalarınız hakkında konuşabiliriz.

Discovery kitte çalışıyorsunuz büyük ihtimalle. İlk adım olarak ölçüm sonucunu görmeniz gerekli , bunun için de elinizdeki LCD'yi düzgün bir şeklide çalıştırmanız lazım. LCD ne var elinizde ?

@mesmert

forumda vardı sanki bu konu

evet LCD bağlantılarını yaptım LCD'ye yazı attım çalışıyor şuan. Attolic ile hazırlanmış hazır bir proje ile yazı görüntüleyebiliyorum şuan.

Devremi de hazırladım.
Sorularım şunlar:

Gerilim değiştirmek için harici devreye bağladığım Pot'un ayağına discovery'de hangi ucu bağlamalıyım? Yani pot ayarladıkça input olarak kullanacağım pin discovery üzerinde hangisi olacak. Biliyorum herhangi birisini seçebilirim ancak ADC input pini hangisi/hangileri acaba?
ve input yaptıktan sonra bu değeri alıp lcd'ye gönderecek fonksiyonu yazabilir misiniz acaba?

ben bu fonksiyonu kullanarak, LCD'ye yazı gönderdiğim programa ekleyip, yazı yerine, ADC input pininden gelen değeri oraya göndereceğim. Planım bu. Umarım anlatabilmişimdir..

Size mesaj yazmak istedim ama, ilerde ihtiyacı olan arkadaşlar buradan inceleyerek yol alabilirler diye forumda yazmak daha iyi olur diye düşündüm..

Kaanx

Merhaba arkadaşlar ;

2x16 lcd için pin baglantıları

stm32f4 discovery           LCD
PC6                            –>D4;

PC7                            –>D5;                                                       

PC8                            –>D6;
                                                     
PC9                             –>D7;

PA8                             –>E (ENABLE);

PA9                              –> RS
Pin baglantılarınız yaptıktan sonra http://kaankandemir.wordpress.com/2013/02/28/stm32f4-discovery-2x16-lcd-kullanimi-2/ kodları kullanabilrisiniz

ben bu konuyla ugrasmıstım fakat tam bir sonuc alamadım belki benim lcd den belki donanımdan kaynaklanan bir sorun olustugunu dusunuyorum.
2. bir sebeb olarak da adc kanalın 42 mhz hızın da dönusumunun hızlı gelmesi nedeniyle ekran degerlerin tutulmadıgını dusunmustum fakat o kanaldaki degeri bölemedıgım ıcın bırakmıstım kodun son hali burada arkadaşlar umarım yardımcı olur kolay gelsin sizlerde deneyin bende tam sonuc gelmemişti

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "4_bit_lcd.h"
#include <stdio.h>

/* Private variables ---------------------------------------------------------*/

#define ADC3_DR_ADDRESS     ((uint32_t)0x4001224C)

 uint16_t ADC3ConvertedValue=0;   // unsigned olarak degiskenlerimizi belirledik
 uint32_t ADC3ConvertedVoltage=0;

 //GPIO_InitTypeDef GPIO_InitStructure;

 //int ticks1;

void deger_goster(uint32_t);
void ADC3_CH12_DMA_Config(void);

/* Private functions ---------------------------------------------------------*/

/**
  * @brief   Main program
  * @param  None
  * @retval None
  */
int main(void)
{

  STM_EVAL_LEDInit(LED4);

  STM_EVAL_LEDOn(LED4);

  if (SysTick_Config(SystemCoreClock / 1000))
  {
    while (1);
  }


     initDiscovery();

   lcd_init();
   DelayMS(20);

    LCD_DATA(0x01,0);
    DelayMS(20);
  LCD_LINE(1);
  LCD_STR((const char*)"ADC-1 LCD ");
  DelayMS(200);
  LCD_LINE(2);
  LCD_STR((const char*)"Kaan KANDEMİR");

  DelayMS(200);
    LCD_DATA(0x01,0);

      ADC3_CH12_DMA_Config();
      ADC_SoftwareStartConv(ADC3);

DelayMS(200);
            LCD_DATA(0x01,0);

  while (1)
  {			// 3.3volt benim usb de 2.951 volt o yüzden aşağıda bölmede bu değeri kullandım.
          ADC3ConvertedVoltage = ADC3ConvertedValue * 2951 / 0xFFF;   // 0xFFF = 4095 = 12bit

          deger_goster(ADC3ConvertedVoltage);

        STM_EVAL_LEDToggle(LED4);

        DelayMS(250);
  }
}


void  ADC3_CH12_DMA_Config(void)
{
     ADC_InitTypeDef       ADC_InitStructure;
      ADC_CommonInitTypeDef ADC_CommonInitStructure;
      DMA_InitTypeDef       DMA_InitStructure;
      GPIO_InitTypeDef      GPIO_InitStructure;

    //SIMDI SIRAYLA ADC DMA GPIO BUS YOLLARININ CLOCKLARINI AKTIF EDELIM

      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);
       RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);

    //DMA AYARLARINI YAPALIM
       DMA_InitStructure.DMA_Channel = DMA_Channel_2;
         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC3_DR_ADDRESS;
         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC3ConvertedValue;
         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
         DMA_InitStructure.DMA_BufferSize = 1;
         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
         DMA_InitStructure.DMA_Priority = DMA_Priority_High;
         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
         DMA_Init(DMA2_Stream0, &DMA_InitStructure);
         DMA_Cmd(DMA2_Stream0, ENABLE);
    //GPIO AYARLARI YAPILIYOR C PORTUNDA ISLEM YAPICAZ
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
          GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
          GPIO_Init(GPIOC, &GPIO_InitStructure);

    //ADC MODULU AYARLARI

          ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
          ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
          ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
          ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
          ADC_CommonInit(&ADC_CommonInitStructure);

    //ADC3 AYARLARI

          ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
          ADC_InitStructure.ADC_ScanConvMode = DISABLE;
          ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
          ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
          ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
          ADC_InitStructure.ADC_NbrOfConversion = 1;
          ADC_Init(ADC3, &ADC_InitStructure);
    //ADC3 REGULE KANAL 12
          ADC_RegularChannelConfig(ADC3, ADC_Channel_12, 1, ADC_SampleTime_3Cycles);
          ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);

    //ADC ICIN DMA AKTIF
          ADC_DMACmd(ADC3, ENABLE);
    //ADC3 AKTIF
          ADC_Cmd(ADC3, ENABLE);


}

void deger_goster(uint32_t ham)
{
    uint32_t v=0,mv=0;
    char text[30];

    v=(ADC3ConvertedVoltage)/1000;
    mv = (ADC3ConvertedVoltage%1000);
    DelayMS(200);

    sprintf((char*)text,"ADC: %02ld,%03ld Volt",v,mv);
    DelayMS(200);
  LCD_LINE(1);
  DelayMS(200);
  LCD_STR2((u8*)text);

    sprintf((char*)text,"ADC: %04ld mv    ",ADC3ConvertedVoltage);
    DelayMS(200);
  LCD_LINE(2);
  DelayMS(200);
  LCD_STR2((u8*)text);
}

#ifdef  USE_FULL_ASSERT


void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}

#endif



uint16_t EVAL_AUDIO_GetSampleCallBack(void)
{
    return 0; // ses çipini kullanıyorsanız tek sample veriyi burada return ile döndürün.
}
void EVAL_AUDIO_TransferComplete_CallBack(uint32_t pBuffer, uint32_t Size)
{
    return; // ses çipini kullanıyorsanız  burada çipe veri aktarımı DMA sona ermiş
}



SrtG

paylaşım işim teşekkürler.. main.c 'de STM_EVAL_LED(LED4) ayarlamalarında hata veriyor. LED4 için undefined diyor...
4_bit_lcd.c de ise:

lcd.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f4xx.o).
lcd.axf: Error: L6218E: Undefined symbol ADC_Cmd (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol ADC_CommonInit (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol ADC_DMACmd (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol ADC_DMARequestAfterLastTransferCmd (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol ADC_Init (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol ADC_RegularChannelConfig (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol ADC_SoftwareStartConv (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol DMA_Cmd (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol DMA_Init (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol GPIO_Init (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol RCC_AHB1PeriphClockCmd (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol RCC_APB2PeriphClockCmd (referred from main.o).
lcd.axf: Error: L6218E: Undefined symbol SystemCoreClock (referred from main.o).

hataları.. bir fikriniz var mı?

camby

Temel konuların hepsi başlıklarda konuşuldu ve örnekler yazıldı. Onların hepsine tek tek göz atmanızda fayda var.

Tabi daha önce yazıldı diye de konuşmayacak değiliz.

Şu şekilde yapmanızda fayda var bundan sonrası için:

Aldığınız hatanın sebebi hazır proje taslaklarını kullanmanız. Proje taslağında başka bir yerde mesela LED4 define edilmiş , ve STM library'leri eklenmiş ve siz bu projenin tamamına hakim olmadığınız için parçaları birleştiremiyorsunuz normal olarak. Başlangıç aşamasında üreticiler tarafından hazırlanmış örnekler karışık gelebilir.

Sıfırdan proje oluşturup kendi taslağınızı oluşturun. Tüm projelerinizi bu şekilde yapın. Biraz uğraştırır ama daha rahat ilerlersiniz.

Aldığınız hata da STM libary dosyalarını bulamamasından kaynaklı.

https://www.picproje.org/index.php/board,179.0.html

Kaanx

eklemen gerekenler burada

/* Includes ------------------------------------------------------------------*/
#include "stm32f4_discovery.h"
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_adc.h"


/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
void TimingDelay_Decrement(void);

camby

aslında conf.h dosyasını eklemek yetiyor.

O da stm32f4xx.h dosyası içinde tanımlı zaten , onu aktif hale getirmek gerekli sadece.

SrtG

#26
Alıntı yapılan: Kaanx - 08 Haziran 2013, 23:29:08
eklemen gerekenler burada

/* Includes ------------------------------------------------------------------*/
#include "stm32f4_discovery.h"
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_adc.h"


/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
void TimingDelay_Decrement(void);

Hocam teşekkür ederim bunları eklemiştim zaten dosyama... bu hatalar onları ekledikten sonra olanlar...

conf.h dosyasını aktif etmek ne demek onu tam anlamadım...

ADC'yi giriş olarak kullanan ve lcd'ye veri gönderebilen iki çalışan programı birleştirdim. MicroC ile yazılmış iki programı. şimdi o program üzerinde çalışıyorum... tek sorunum ara değerleri göremem. yani sadece 1 2 3 4 gibi değerleri görüyorum. 2.45 veya 1.23 gibi değerleri görebilirsem tam olacak :) kodları aşağıda veriyorum... Bahadır Çokdilli ve Efkan Efe'nin çalışmaları çok faydalı oldu. onların uygulamalarını birliştirdim. ihtiyacı olanlar için kodlar...

float okunan;
char str[10];

// LCD BAĞLANTILARI
sbit LCD_RS at GPIOA_ODR.B2;
sbit LCD_EN at GPIOA_ODR.B3;
sbit LCD_D4 at GPIOA_ODR.B4;
sbit LCD_D5 at GPIOA_ODR.B5;
sbit LCD_D6 at GPIOA_ODR.B6;
sbit LCD_D7 at GPIOA_ODR.B7;

sbit LCD_RS_Direction at GPIOA_ODR.B2;
sbit LCD_EN_Direction at GPIOA_ODR.B3;
sbit LCD_D4_Direction at GPIOA_ODR.B4;
sbit LCD_D5_Direction at GPIOA_ODR.B5;
sbit LCD_D6_Direction at GPIOA_ODR.B6;
sbit LCD_D7_Direction at GPIOA_ODR.B7;
char txt1[] = "GERILIM";

void Move_Delay() {                  // Metni taşıma için kullanılan Fonksiyon
  Delay_ms(50);                     // Metnin yazma hızı
}

void main() {
RCC_AHB1ENR|=0x00000001;//A  portuna clock veriliyor.
GPIOA_OSPEEDR=0;//giriş çıkış hızları en düşükte (2MHZ)

GPIOA_MODER=11;                //         A Portu Analog Mode Giriş Tanımlanır.
ADC1_Init();                   //         Initialize ADC module with default settings
ADC_Set_Input_Channel(_ADC_CHANNEL_1); // ADC'nin 1. kanalını aktif ettim (GPIOA.IDR.B1)

GPIOA_MODER=0x00000000;
GPIOB_MODER=0x00000000;
GPIOB_ODR=0x00000000;

Lcd_Init();                        // LCD Yazmaya Hazırlama
Lcd_Cmd(_LCD_CLEAR);               // Ekran Temizleme
Lcd_Cmd(_LCD_CURSOR_OFF);          // İmleci Kapat

while(1)
 {
  okunan = ADC1_Get_Sample(1);   // 1. kanalı oku;
  Lcd_Out(1,1,txt1);
  FloatToStr(okunan,str);
  Lcd_Out(2,1,str);
  Delay_ms(200);
 }

}


yardımlarınız için teşekkürler...

emre salman

herkese iyi günler bugun stm32f407vg kitim geldi ama bir türlü yazılım atamıyorum mikroc nin st_lınk hata veriyor usb cominucation gibi birşey yazıyor

yazılım atarken iki usbyide bağlamam mı gerekiyor

muhittin_kaplan

hayır sadece birine bağlaman yeterli,
(büyük olan)

st link utilty programını indir ve kur (driver felan hepsini kuracak)