ARM – Not6: STM32 Unique ID (Benzersiz Kimlik Numarası)

Yayınlandı: 06 Eylül 2015 / ARM STM32F4DISCOVERY Programlama...
Etiketler:, , , , , , ,

admin-ajax.php Cihazların kendilerine ait benzersiz kimlik numaralarının var olması bazı uygulamalarda olmazsa olmaz bir özelliktir. Bu numaralar tasarımcı tarafından belirlenebileceği gibi, bazı çip üreticileri halihazırda ürünlerine benzersiz kimlik numaraları atamaktadırlar.

STM32 mikrodenetleyicilerin güzel donanım özelliklerinden birisi de 96 bitlik (12 byte) unique id’ye (benzersiz kimlik numarasına) sahip olmalarıdır.  Unique ID, nesnelerin interneti uygulamaları, uzaktan sayaç okuma işlemleri, akıllı ev sistemleri, telemetri sistemleri gibi uygulamalarda oldukça işe yarayacak şekilde kullanılabilirler.

STM32F407 mikrodenetleyicisine ait referans manuelinde Unique ID bilgisinin 0x1FFF7A10 adresinden başladığı ve her biri 32 bitlik 3 adet registerdan oluştuğu belirtilmiştir. (Ref. Manual Rev6 Sayfa 1691) Her register 4 byte (32bit) yer kapladığı için ikinci registerın adresi 0x1FFF7A14, üçüncü registerın adresi ise 0x1FFF7A18 olmaktadır. Bu adreslerden okuyacağımız 96 bit uzunluğundaki veri STM32F407 mikrodenetleyicisinin benzersiz kimlik numarasını oluşturmaktadır.

Şimdi isterseniz bu numarayı okuyup uart üzerinden gönderen bir uygulama yapalım.

const unsigned long UNIQUE_ID[3]={0x1FFF7A10,0x1FFF7A14,0x1FFF7A18};
unsigned long *okunan;
unsigned short i=0;

char txt[12];
void main() {
UART2_Init(9600);
while(1)
        {
         UART2_Write_Text("UNIQUE ID=");
         for(i=0;i<3;i++)
                         {
                          okunan=UNIQUE_ID[i];
                          longtostr(*okunan,txt);
                          UART2_Write_Text(txt);
                         }
         UART2_Write_Text("\r\n");
         delay_ms(2000);  
}

Yukarıdaki kodları derleyip mikrodenetleyicimize yüklersek ve gerekli bağlantıları bir bilgisayara yaparsak herhangi bir terminal programından aşağıdaki gibi bir çıktı görebilmemiz gerekir.

Adsız

Bu yazıyla ilgili dosyaları buradan indirebilirsiniz.

İyi çalışmalar.
yorum
  1. Sinan Kurtman dedi ki:

    Sayın hocam

    Mikro C ile ARM programlama kitabınızı okudum. Çok beğendim. Yeni kitaplarınızı merakla bekliyorum. Önceden beri PIC, 8051, Arduino ve AVR yazıyordum ama ARM mimarisine cesaret edemiyorum. Sayenizde hızlı bir başlangıç yapmış oldum.
    İyi çalışmalar.

    • mikrodunya dedi ki:

      Teşekkür ederim.
      Yeni bir kitap çalışmam halihazırda devam ediyor. Günümüzüde kullanımda olan ve yeni yeni hayatımıza giren kavramlar hakkında bir kitap hazırlamaya çalışıyorum.
      Saygılar, iyi çalışmalar.

  2. serhed dedi ki:

    İyi akşamlar hocam mikroc ile stm32f407 de ds1621 sıcaklık sensöründen sıcaklığı I2C veri protokollü LCD ekrana yazdırmaya çalışıyorum ama yapamıyorum yardımcı olabilir misiniz?

  3. muratpolata dedi ki:

    Hocam Merhabalar STM32F407VG software reset yapmak istiyorum,
    RCC_BDCRbits.BDRST=1;
    RCC_CSRbits.SFTRSTF=1;
    yapıyorum ama reset durumu gerçekleşmiyor.

    void pinstat() iv IVT_INT_EXTI0 ics ICS_AUTO { //Kullanıcı tuş On SoftReset
    EXTI_PR=1;
    RCC_BDCRbits.BDRST=1;
    RCC_CSRbits.SFTRSTF=1;
    }

    Neden kaynaklı olabilir yardımcı olabilir misiniz?

    • mikrodunya dedi ki:

      Hocam bunlara gerek yok, “systemreset();” yazmanız yeterli.

      • muratpolata dedi ki:

        Çok teşekkür ederim hocam #include eklemem gerekiyor sanırım, bir de PWM ile alakalı olarak pulse üretmek istiyorum step motor hazır sürücüler için, pulse girişleri oluyor.İstediğim frekansta PWM sinyali üretebiliyorum ancak örneğin bir motor sürücü var pulse girişi var buraya pulse uyguladığım zaman ve frekansı değiştirdiğim zaman hızı değişiyor, mesela ben 1 adım git demek istiyorum yani 200 pulse vermek istiyorum(200*1.8 derece) bunun için ne yapmam gerekir?

        void PWM(unsigned long freq,unsigned int step){
        unsigned long period;
        while(step–){
        period=PWM_TIM11_Init(freq);
        PWM_TIM11_Set_Duty((period/100)*50,_PWM_NON_INVERTED,_PWM_CHANNEL1);
        PWM_TIM11_Start(_PWM_CHANNEL1,&_GPIO_MODULE_TIM11_CH1_PB9);
        }
        }

        Yani girilen step sayısı kadar pulse üretecek bir fonksiyon yazmam gerekiyor.
        Örneğin PWM(10000,200); yazdığım zaman 10kHz de ve 360 derece dönecek , tam tur,bu mümkün müdür?
        Çok Teşekkür Ederim.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s