STM32F407 Cortex M4 şamataları

Başlatan bunalmis, 16 Ekim 2011, 17:14:50

muhittin_kaplan

Hocam Usart Programında;
iki yada daha fazla ölçüm değerini (PWM) PC ye göndermem gerekiyor, C kullanarak nasıl yapılır;


fatihinanc

IAR EW kullanan arkadaşlar debug yapmadan doğrudan download işlemini nasıl yapıyor ?
Project -> Download -> Download Active Application yolu var. Ben bunu kullanıyorum ama bu seçenekte kodu yükledikten sonra reset atmıyor...
Sizler nasıl yapıyorsunuz ?
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

muhittin_kaplan

Alıntı yapılan: muhittin_kaplan - 25 Ocak 2012, 00:20:12
Hocam Usart Programında;
iki yada daha fazla ölçüm değerini (PWM) PC ye göndermem gerekiyor, C kullanarak nasıl yapılır;
Neyseki Çözdüm..
SendChar ile Byte Byte Gönderdiğim değerlerin ardına Null değeride ekledim ve PC programında bu null değeri sorgulattım. Null değer geldiğinde İletişimin Bittiğini anlayarak Pc Tarafında String Manipulasyon ile istediğimiği istediğim yere aldım.

-Hasan-

Merhaba Arkadaşlar;

STM32 ' de PH0 PH1 pinlerinden çıkış alamıyorum. KS0108 driveri yazmaya başlayacaktım, o pinlere de CS1 CS2 ' yi bağlamıştım ama istediğim çıkışı alamıyorum bunun sebebi nedir acaba?

#include "STM32F4xx.h"

void SystemInit()
{
	unsigned int i;
	for (i=0;i<0x00100000;i++);          // OSC oturtma ve kurtarma rutini
    RCC->CFGR |= 0x00009400;         // AHB ve APB hizlarini max degerlere set edelim
    RCC->CR |= 0x00010000;            // HSE Xtal osc calismaya baslasin        
    while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
    RCC->PLLCFGR = 0x07405408;      // PLL katsayilarini M=8, N=336, P=2 ve Q=7 yapalim
//  RCC->PLLCFGR = 0x07402A04;     // PLL katsayilarini M=4, N=168, P=2 ve Q=7 yapalim
    RCC->CR |= 0x01000000;            // PLL calismaya baslasin  (Rehber Sayfa 95)
    while(!(RCC->CR & 0x02000000)); // Pll hazir oluncaya kadar bekle
//  FLASH->ACR = 0x00000705;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    FLASH->ACR = 0x00000605;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    RCC->CFGR |= 0x00000002;        // Sistem Clk u PLL uzerinden besleyelim
    while ((RCC->CFGR & 0x0000000F) != 0x0000000A); // Besleninceye kadar bekle
    RCC->AHB1ENR |= 0x0000009F;    // GPIO A,B,C,D,E,H clock'u aktif edelim 
    GPIOD->MODER = 0x55000000;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin)
    GPIOD->OSPEEDR= 0xFFFFFFFF;   // GPIOD nin tum cikislari en yuksek hizda kullanacagiz
}

void Delay()
{
	unsigned int i;
	for(i=0;i<0x00001000;i++);
}

int main()
{
	GPIOH->MODER=0x00000005; // GPIOH 0. ve 1. Pinler Çıkış Yapıldı
	GPIOH->OSPEEDR=0xFFFFFFFF; // GPIOH Çıkışlarını En Yüksek Hızda Kullanacağız
	GPIOH->ODR=0x00000001; // GPIOH 0. Pin '1' Yapıldı

	GPIOE->MODER=0x55555540;
	GPIOE->OSPEEDR=0xFFFFFFFF;
	GPIOE->ODR=0x00003F20;
	GPIOE->ODR|=0x00000080;
	Delay();
	GPIOE->ODR&=~0x00000080;
	Delay();

	while(1);
}

Klein

#844
Son günlerde bu başlık biraz öksüz kaldı sanki. Kitler bir köşeye mi atıldı ne?

Halen kitini bir köşeye atmamış olanlar için tek kanal ADC örneği.

#include "STM32F4xx.h" 
#include "stdio.h" 
 
unsigned char WAdr,RAdr;
char RxBuf[128];
char TxBuf[128];
unsigned char timer_update=0; 
uint16_t adc_val;
/*********************************************************************************
 CPU frekansi 168Mhz
 AHB frekansi 84 Mhz
 APB frekansi 42 Mhz
*********************************************************************************/
 
void SystemInit()
{
unsigned int i;
      for (i=0;i<0x00100000;i++);     // OSC oturtma ve kurtarma rutini
      RCC->CFGR |= 0x00009400;        // AHB ve APB hizlarini max degerlere set edelim
      RCC->CR |= 0x00010000;          // HSE Xtal osc calismaya baslasin        
      while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
      RCC->PLLCFGR = 0x07402A04;      // PLL katsayilarini M=4, N=168, P=2 ve Q=7 yapalim   168 Mhz 
      RCC->CR |= 0x01000000;          // PLL calismaya baslasin  (Rehber Sayfa 95)
      while(!(RCC->CR & 0x02000000)); // Pll hazir oluncaya kadar bekle
      FLASH->ACR = 0x00000605;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
      RCC->CFGR |= 0x00000002;        // Sistem Clk u PLL uzerinden besleyelim
      while ((RCC->CFGR & 0x0000000F) != 0x0000000A); // Besleninceye kadar bekle
      RCC->AHB1ENR |= 0x0000001F;     // GPIO A,B,C,D,E clock'u aktif edelim 
      GPIOD->MODER  = 0x55550000;     // GPIOD nin 15, 14, 13, 12, 11, 10, 9, 8 pinleri cikis tanimlandi (LEDler icin)
      GPIOD->OSPEEDR= 0xFFFFFFFF;     // GPIOD nin tum cikislari en yuksek hizda kullanacagiz 
	 RCC->APB1ENR|=0x00000020;       // Timer7 CLK'u aktif edelim (84 Mhz)

     TIM7->CR1=0x0080;               // Otomatik Reload
     TIM7->PSC =839;                 // Prescaler degerimiz 839, Count frekansimiz = fCK_PSC / (Yuklenen Deger + 1) 84E6 / (840) = 100 KHz
     TIM7->ARR =5;                   // Counter, Decimal 1 olunca basa donsun. Her 20 mikrosaniye de bir timer int olusacak.
     TIM7->DIER=0x0001;              // Update Int enable
     NVIC->ISER[1] = 0X00800000;     // NVIC de Timer 7 interrupta izin verelim
     TIM7->CR1|=0x0001;              // Counter Enable

                 GPIOB->MODER |= 0x00000003; 
	 RCC->APB2ENR|=0x00000100;  // ADC saat kaynağını aktif ettik. 
	 ADC1->CR1 |=0x00000100; //  ADC scan modunda çalışacak.
	 ADC1->SQR3 |= 0x00000008; // Çevrime ilk girecek kanal 8. (PB0)
	 ADC1->CR2 |=0x00000003;   // AD converter'i açtık. Sürekli çevirim yapacağımızı belirttik. 
} 
 
/*********************************************************************************
      USART3 modulunu kullanarak asenkron haberlesme (Hata kontrolu yapilmiyor)
*********************************************************************************/
void USART3_IRQHandler()
{
volatile int Sts;
     Sts=USART3->SR;
     RxBuf[WAdr]=USART3->DR;
     WAdr=(WAdr+1)&0x7F;
}
 
void UsartInit()
{
     WAdr=0;RAdr=0;
 
// USART3 MODULUNU AKTIF HALE GETIRELIM
 
      RCC->APB1ENR|=0x00040000;  // USART3 Clk Enable (Rehber Sayfa 113)
      RCC->APB1RSTR|=0x00040000;  // USART3 Resetlendi
      GPIOB->AFR[1]=0x07777700;  // PB10..PB14 pinleri USART3 ile alakalandirildi (Hard Sayfa 49)
      GPIOB->MODER|=0x2AA00000;  // GPIOB 10..14 icin alternatif fonksiyon tanimi (Rehber Sayfa 148)
 
// USART3 MODULUNU AYARLAYALIM  // 1 Start, 8 Data, 1 Stop, No parity (Default degerler)
 
      RCC->APB1RSTR&=~0x00040000;  // USART3 Reseti kaldiralim
//      USART3->SR&=~0X03FF;   // Status registeri silelim
      USART3->BRR=0X1112;    // 9600 Baud
 
      USART3->CR1|=0x0000202C;  // USART3 enable
      NVIC->ISER[1]|=0x80;         // NVIC da USART3 interrupta izin verelim
}
 
void SendChar(char Tx) 
{
      while(!(USART3->SR&0x80));  // TX Buffer dolu ise bekle (Rehber Sayfa 646)
      USART3->DR=Tx;
}
 
void SendTxt(char *Adr)
{
      while(*Adr) 
        {
          SendChar(*Adr);
          Adr++;
        }  
}
 
char DataReady()
{
       return(WAdr-RAdr);
} 
 
char ReadChar()
{
char Dat;
    
      Dat=RxBuf[RAdr];
      RAdr=(RAdr+1)&0x7F;
      return(Dat);
}


void TIM7_IRQHandler()
{
TIM7->SR=0;    
timer_update=1;
} 
 
// Rx ve TX pinlerini (GPIOB10 ve GPIOB11) birbirine baglarsaniz gonderdiginiz datalar geri gelecektir
 
int main()
{
unsigned int ledtime;
      UsartInit(); 
      SendTxt("PicProje"); 
      ADC1->CR2 |=0x40000000; // ADC çevrimini başlattık. 
      while(1){
	  	if(ADC1->SR & 0x0002){
		    ADC1->SR &= ~0x0002;
			adc_val = ADC1->DR;
		}

	  	if(timer_update){
			timer_update=0;
			if(++ledtime > 5000){
	  			ledtime =0;
				GPIOD->ODR ^= 0x0000008000;
				sprintf(TxBuf,"ADC Degeri :%u\r",adc_val);
				SendTxt(TxBuf);
	  		}
		}
	  }; 
}


Register açıklamaları:

RCC->APB2ENR|=0x00000100;  // ADC saat kaynağını aktif ettik.
Artk her donanım için clk  kaynağını aktif etmemiz gerektiğini , aktif olmadıkları zaman güç tüketiminin düştüğünü biliyoruz. Bu yüzden bunun detayına girmiyorum.


ADC1->CR1 |=0x00000100; //  ADC scan modunda çalışacak.CR1 registerinin 8. biti scan modu açma kapama biti.
Eğer scan modu açıksa , kaç tane kanalın taranmasını istediysek  o kadar kanalın çevrimi sırayla yapılır. Tüm kanallar bitince çevirim durur.

   
ADC1->SQR3 |= 0x00000008; // Çevrime ilk girecek kanal 8. (PB0)SQR registerleri  hangi kanalın hangi sırayla çevirime gireceğini seçmemizi sağlar. Register 5'er bitlik alanlara ayrılmıştır. Her bir SQR registeri 6 tane kanalın sıralamasını seçmemize izin verir.   SQR3 registeri ilk 6 sıra, SQR2  7- 11 arası SQR1 de 12-15 arası olmak üzere toplam 16 kanalın sırasını seçmemize olanak verir. 
SQR1 reg isterini diğer SQR registerlerinden ayıran  özellik ise, Bu registerin 20-21-221 ve 23. bitlerinden scan modda  kaç kanalın taranacağını seçebiliyor olmamızdır.
Örneğimiz tek kanal olduğu için sadece  İlk sıraya kanal numarası girdik diğerlerine bir şey girmedik. PB0 8. kanal olduğu için bu registere 8 yazdık.


ADC1->CR2 |=0x00000003;   // AD converter'i açtık. Sürekli çevirim yapacağımızı belirttik.
CR2 registerinin ilk biti ADON bitidir. ADC'yi açma ve kapatmayay yarar. Burada dikkat edilmesi gereken şey ADC ON yapıldıktan sonra stabil olması için bir süre geçmesi gerekliliğidir. Stabil olduktan sonra çevirimi başlatmak gerek. Rehberde bununla ilgili açıklama var.
CR2 registerinin 1. biti ise continious mode seçim bitidir. Eğer 0 ise single 1 ise Continious modda çalışır.

ADC1->CR2 |=0x40000000; // ADC çevrimini başlattık.
CR2 registerinin 3. biti çevirimi başlatır.  Continious mode seçili olduğu için  bir kez başlatmak yeterlidir. Eğer single modda olsaydık. çevirim bittikten sonra başlatmak için yeniden set etmemiz gerekecekti.

Bu ve diğer bazı örnekler  "örnekler" başlığı altında olsa daha ulaşılabilir olacak. Ancak  yazmaya kapalı olduğu için atamadım.


muhittin_kaplan

Olurmu Hocam Kitle Çalışmaya Devam..

berat23

aksine daha yeni birşeyler yapmaya başladım.

-Hasan-

15 tatilde çalışmalarım full speed gidiyordu.  :D Ama okul açılınca durma noktasına kadar yavaşlıyor maalesef.  :( Ders çalışıyorum. Tatilde kartın yarısını tamamladım. Temel elemanları koydum.







Herkese kolay gelsin.

pisayisi

Bu kiti görünce nedense 1990 larda tasarlanmış yerlimalı en baba elektronik kit denen EBEK kod adlı bir kit vardı bogazicinden bir prof tasarlamıştı 8 bitlik 6502 mikroişlemci mimarili ses kasetlerine data kaydı yapan özellikli bir cihazdı :)Şİmdilerde ünv lerde kimse, yaa kendi kitimizi yapalım özgün özellikli bişi olsun diye çabalamıyor. 1990 lardan bile gerideyis sanki...
Murat

_MvM_

Herkese merhabalar;

Forumda ilk mesajım  :) uzun zamandır uzaktan izliyorum arm bölümünü   :D gerçeği söylemek gerekirse arm hakkında bu kadar türkçe kaynak bulacağım hiç aklıma gelmemişti emeği geçenlere teşekkür etmek isterim.

STM32F4 kitim bu gün elime ulaştı ve örneklerden bir kaç tanesini başarıyla çalıştırdım.İşin teorik kısmında anladığımı düşünüyorum.Ama çok önemli bir şey kaynamış gitmiş burada.Hangi sayfada olduğunu tam olarak hatırlamıyorum ama bunalmıs hocamız SystemInit fonksiyonuna ne kod yazacağımızı nereden bildik diye sormuştu sonra araya tartışma girdi bu önemli soru da kaynadı gitti  :).

Rica etsem SystemInit i nasıl yazacağımızı nereden anladık öğrenebilir miyim?

camby

Alıntı yapılan: pisayisi - 07 Şubat 2012, 18:44:22
Bu kiti görünce nedense 1990 larda tasarlanmış yerlimalı en baba elektronik kit denen EBEK kod adlı bir kit vardı bogazicinden bir prof tasarlamıştı 8 bitlik 6502 mikroişlemci mimarili ses kasetlerine data kaydı yapan özellikli bir cihazdı :)Şİmdilerde ünv lerde kimse, yaa kendi kitimizi yapalım özgün özellikli bişi olsun diye çabalamıyor. 1990 lardan bile gerideyis sanki...

Amacım reklam değil : http://www.expkits.com/ . Yapılan kitler var .

Ama kit işi genelde yarı iletken üreticilerinin elinde , bir çeşit pazarlama aracı sonuçta.

Valiant2023

Alıntı yapılan: EMG81 - 12 Aralık 2011, 14:16:58
Ben STM32 Kartımı çok önceden almıştım. Fakat işten güçten anca dün adam biraz ilgilenebildim. Oturdum HD44780 chipli 2x16 Lcd için kod yazdım. Dün elimde Lcd olmadığı için deneyemedim. Aslında bu gün de deniyemiyecektim ama Tesadüfen elime bir tane geçti. Denedim Tüm Fonksiyonlar çalışmakta.

Main.c;
#include "STM32F4xx.h"
#include "Delay.c"
#include "HD44780.c"


void SystemInit(void)
{
unsigned int i;

    for (i=0;i<0x00100000;i++);          // OSC oturtma ve kurtarma rutini
    RCC->CFGR |= 0x00009400;         // AHB ve APB hizlarini max degerlere set edelim
    RCC->CR |= 0x00010000;            // HSE Xtal osc calismaya baslasin       
    while (!(RCC->CR & 0x00020000));// Xtal osc stabil hale gelsin
    RCC->PLLCFGR = 0x07405408;      // PLL katsayilarini M=8, N=336, P=2 ve Q=7 yapalim
//  RCC->PLLCFGR = 0x07402A04;     // PLL katsayilarini M=4, N=168, P=2 ve Q=7 yapalim
    RCC->CR |= 0x01000000;            // PLL calismaya baslasin  (Rehber Sayfa 95)
    while(!(RCC->CR & 0x02000000)); // Pll hazir oluncaya kadar bekle
//  FLASH->ACR = 0x00000705;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    FLASH->ACR = 0x00000605;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
    RCC->CFGR |= 0x00000002;        // Sistem Clk u PLL uzerinden besleyelim
    while ((RCC->CFGR & 0x0000000F) != 0x0000000A); // Besleninceye kadar bekle
    RCC->AHB1ENR |= 0x0000000F;    // GPIO A,B,C,D clock'u aktif edelim
    
	GPIOD->MODER = 0x55005555;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin) 0..7 arasıda çıkış
	GPIOB->MODER = 0x00000500;     // GPIOB 4 ve 5 i çıkış yaptık.

    GPIOA->OSPEEDR= 0x00000000;   // GPIOD nin tum cikislarinı Max. 2 Mhz de kullanacağız.
	GPIOB->OSPEEDR= 0x00000000;	  // AYnı şey GPIOB içinde geçerli
	GPIOC->OSPEEDR= 0xFFFFFFFF;
	GPIOD->OSPEEDR= 0xFFFFFFFF;
}


int main(void)
{
	void SystemInit();

	while(1)
	{ 
	  	
	  Lcd_init();
	  Lcd_Imlec_Yok();
	  Lcd_Yaz("    PicProje"); Lcd_Git(2,6);
	  Lcd_Yaz("Emg81");

	  Delay_ms(2000);

//    Bit Banding
		
      GPIO_D(15)=1;
	  Delay_ms(1000);
	  GPIO_D(15)=0;
	  Delay_ms(1000);
	  GPIO_D(14)=1;
	  Delay_ms(1000);
	  GPIO_D(14)=0;
	  Delay_ms(1000);

	}
}


Delay.c;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//		 Kullanılışı;
//		 Delay_ms(100);   // 100 msn Bekle.
//		 Delay_us(100);   // 100 usn Bekle. 
//		 Not CPU OSC = 168 mhz - 210 MIPS

#include "Delay.h"

void Delay_ms(unsigned long Bekle)
{
	Bekle = Bekle * 21008;	// mSn ye ye çevirdik. OSC 168Mhz de uçuyor.
	while(Bekle>0){Bekle--;}
}

void Delay_us(unsigned long Bekle)
{
	Bekle = Bekle * 21;	// uSn ye ye çevirdik. OSC 168Mhz de uçuyor.
	while(Bekle>0){Bekle--;}
}

Delay.h;
extern void Delay_ms(unsigned long Bekle);
extern void Delay_us(unsigned long Bekle);

HD44780.c;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//		  LCD data Portu GPIOD
//        RS. GPIOB.4
//        E.  GPIOB.5  olarak kullanılmıştır.
//
//	      Kullanılışı;
//		  Lcd_init();         // 2x16 LCD yi kullanıma hazır hale getirir.
//		  Lcd_Veri();         // Lcd ye KOmut göndermek için kullanılır.
//		  Lcd_Git(1,2);       // Lcd nin 1. satırının 2. sütununa imleci konumlandırır.
//		  Lcd_Yaz("Merhaba"); // Lcd ye Merhaba Stringini gönderir.
//                Yaz();              // Bu kullanılmayacak.
//                Lcd_Sil();          // Lcd yi silmek için kullanılır.
//		  Lcd_Imlec_Var();	  // İmleç YanSön Moduna sokar.
//		  Lcd_Imlec_Yok();	  // İmleç i yok eder.
//
//
#include "hd44780.h"


void Lcd_init(void)
{

	GPIOD->MODER = 0x55005555;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin) 0..7 arasıda çıkış
	GPIOB->MODER = 0x00000500;     // GPIOB 4 ve 5 i çıkış yaptık.

    GPIOA->OSPEEDR= 0x00000000;   // GPIOD nin tum cikislarinı Max. 2 Mhz de kullanacağız.
	GPIOB->OSPEEDR= 0x00000000;	  // AYnı şey GPIOB içinde geçerli

	GPIO_B(4)=0;	GPIO_B(5)=0;  //	 Genel
	GPIOD->ODR= 0x00000000;		  //	 Temizlik

	Delay_ms(20);

	Lcd_Veri(0x30); // Lcd Reset
	Lcd_Sil();
	Lcd_Veri(56);   // 2 satır kullanacağımızı yazdık
	Lcd_Veri(15);   // Display i aç
	Lcd_Veri(0x06); // Kursör 1 artan modda.
	Lcd_Sil();	    // Lcd yi temizle

}

void Lcd_Veri(unsigned char veri)
{
 	GPIO_B(4)=0;  Delay_ms(10);
	GPIOD->ODR = veri;
	GPIO_B(5)=1;  Delay_ms(10);  GPIO_B(5)=0;
}

void Lcd_Git(unsigned char p1,unsigned char p2)
{
	if (p1==1) Lcd_Veri(0x80+(p2-1));
	else      Lcd_Veri(0xC0+(p2-1));
}

void Lcd_Yaz(unsigned char *lcd_data)
{
	Delay_ms(10);
	while(*lcd_data)  Yaz(*lcd_data++);
}

void Yaz(unsigned dat)
{
 	GPIO_B(4)=1;  Delay_ms(10);
	GPIOD->ODR = dat;
	GPIO_B(5)=1;  Delay_ms(10);  GPIO_B(5)=0;
}
	
void Lcd_Sil(void)
{
	Lcd_Veri(1);
	Delay_ms(10);
}

void Lcd_Imlec_Yok(void)
{
	Lcd_Veri(0x0C);
	Delay_ms(10);
}

void Lcd_Imlec_Var(void)
{
 	Lcd_Veri(0x0F);
	Delay_ms(10);
}

HD44780.h;
#define GPIO_A(b) *((volatile unsigned long *)( 0x42000000 + (((unsigned long)&GPIOA->ODR) << 5) + ((b) << 2)))
#define GPIO_B(b) *((volatile unsigned long *)( 0x42000000 + (((unsigned long)&GPIOB->ODR) << 5) + ((b) << 2)))
#define GPIO_C(b) *((volatile unsigned long *)( 0x42000000 + (((unsigned long)&GPIOC->ODR) << 5) + ((b) << 2)))
#define GPIO_D(b) *((volatile unsigned long *)( 0x42000000 + (((unsigned long)&GPIOD->ODR) << 5) + ((b) << 2)))
#define GPIO_E(b) *((volatile unsigned long *)( 0x42000000 + (((unsigned long)&GPIOE->ODR) << 5) + ((b) << 2)))
#define GPIO_F(b) *((volatile unsigned long *)( 0x42000000 + (((unsigned long)&GPIOF->ODR) << 5) + ((b) << 2)))
#define GPIO_G(b) *((volatile unsigned long *)( 0x42000000 + (((unsigned long)&GPIOG->ODR) << 5) + ((b) << 2)))
#define GPIO_I(b) *((volatile unsigned long *)( 0x42000000 + (((unsigned long)&GPIOI->ODR) << 5) + ((b) << 2)))

extern void Lcd_Veri(unsigned char veri);
extern void Lcd_Git(unsigned char p1,unsigned char p2);
extern void Yaz(unsigned dat);
extern void Lcd_Yaz(unsigned char *lcd_data);
extern void Lcd_Sil(void);
extern void Lcd_Imlec_Var(void);
extern void Lcd_Imlec_Yok(void);


Resim1;
[IMG]http://img849.imageshack.us/img849/5027/adsz1xu.jpg[/img]
Resim2;
[IMG]http://img269.imageshack.us/img269/707/adsz2vq.jpg[/img]
bi türlü calıstıramadım
bu hataları alıyorum
Build target 'Target 1'
compiling HD44780.c...
hd44780.h(16): warning:  #1-D: last line of file ends without a newline
HD44780.c(24): error:  #20: identifier "GPIOD" is undefined
HD44780.c(25): error:  #20: identifier "GPIOB" is undefined
HD44780.c(27): error:  #20: identifier "GPIOA" is undefined
HD44780.c(33): warning:  #223-D: function "Delay_ms" declared implicitly
HD44780.c(46): error:  #20: identifier "GPIOB" is undefined
HD44780.c(46): warning:  #223-D: function "Delay_ms" declared implicitly
HD44780.c(47): error:  #20: identifier "GPIOD" is undefined
HD44780.c(59): warning:  #223-D: function "Delay_ms" declared implicitly
HD44780.c(65): error:  #20: identifier "GPIOB" is undefined
HD44780.c(65): warning:  #223-D: function "Delay_ms" declared implicitly
HD44780.c(66): error:  #20: identifier "GPIOD" is undefined
HD44780.c(73): warning:  #223-D: function "Delay_ms" declared implicitly
HD44780.c(79): warning:  #223-D: function "Delay_ms" declared implicitly
HD44780.c(85): warning:  #223-D: function "Delay_ms" declared implicitly
HD44780.c(86): warning:  #1-D: last line of file ends without a newline
Target not created

fryrmnd

tam emin değilim ama hd44780.c de stm32 yi include edebilirmisiniz.

Valiant2023

zaten yazılı hocam tesekkurler bı kutuphane problemınden suphelenıyorum

Klein

#854
main.c içindeki  #include "delay.c" ve #include"hd44780.c" satırlarını  #include "delay.h"  ve  #include"hd44780.h" olarak değiştir

hd44780.c içerisine
#include "stm32f4xx.h"
#include "delay.h"

hd44780.h içine de

extern void Lcd_init(void);


satırlarını ekle