Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Stm32f103 RTC

Başlatan muhittin_kaplan, 17 Kasım 2016, 19:24:33

muhittin_kaplan

RTC, sadece ayarlanan sürede interrupt üreten bir ünitemidir ?
Saati Dakikayı Hatta Yılı bir registerden çekip alabiliyormuyum ?
Yoksa 60 a bölme işlemleriylemi işlem yapıyorum ?

baran123

Direk çekiyorsun abi verileri.
Yani F0 da öyle yapmıştık.
https://www.picproje.org/index.php/topic,58660.0.html
Benim bildiğim alarm özellikli RTC lerde vardı.

muhittin_kaplan

evet rtc_setalarm(1) yaptım her 1 saniyede int. e giriyor.

muhittin_kaplan

#3
Muhtemelen Sadece belirtilen aralıklarda interrupt üretiyor STM32f103 de buradan yola çıkarak (bölme işlemleriyle) saat vb ulaşılıyor. Sanki bir yanlışlık var.

Bu mudur yani RTC basit bir atomik sayıcı

http://www.st.com/content/ccc/resource/technical/document/application_note/b0/34/9f/35/17/88/43/41/CD00207941.pdf/files/CD00207941.pdf/jcr:content/translations/en.CD00207941.pdf

muhittin_kaplan

dursun şurada

http://www.avislab.com/blog/stm32-rtc/

// Get current date
void RTC_GetDateTime(uint32_t RTC_Counter, RTC_DateTimeTypeDef* RTC_DateTimeStruct) {
    unsigned long time;
    unsigned long t1, a, b, c, d, e, m;
    int year = 0;
    int mon = 0;
    int wday = 0;
    int mday = 0;
    int hour = 0;
    int min = 0;
    int sec = 0;
    uint64_t jd = 0;;
    uint64_t jdn = 0;
 
    jd = ((RTC_Counter+43200)/(86400>>1)) + (2440587<<1) + 1;
    jdn = jd>>1;
 
    time = RTC_Counter;
    t1 = time/60;
    sec = time - t1*60;
 
    time = t1;
    t1 = time/60;
    min = time - t1*60;
 
    time = t1;
    t1 = time/24;
    hour = time - t1*24;
 
    wday = jdn%7;
 
    a = jdn + 32044;
    b = (4*a+3)/146097;
    c = a - (146097*b)/4;
    d = (4*c+3)/1461;
    e = c - (1461*d)/4;
    m = (5*e+2)/153;
    mday = e - (153*m+2)/5 + 1;
    mon = m + 3 - 12*(m/10);
    year = 100*b + d - 4800 + (m/10);
 
    RTC_DateTimeStruct->RTC_Year = year;
    RTC_DateTimeStruct->RTC_Month = mon;
    RTC_DateTimeStruct->RTC_Date = mday;
    RTC_DateTimeStruct->RTC_Hours = hour;
    RTC_DateTimeStruct->RTC_Minutes = min;
    RTC_DateTimeStruct->RTC_Seconds = sec;
    RTC_DateTimeStruct->RTC_Wday = wday;
}

kantirici

Hocam amaç saat dakika v.s almak ise oradaki gibi uğraşmaya gereke yok diye düşünüyorum.


void Read_RTC(void)
{
    RTC_TimeTypeDef RTC_TimeStructure;
    char time[20];
    /* Get the current Time */
    RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
    /* Display time Format : hh:mm:ss */
    sprintf((char*) time, "%0.2d:%0.2d:%0.2d", RTC_TimeStructure.RTC_Hours, RTC_TimeStructure.RTC_Minutes, RTC_TimeStructure.RTC_Seconds);
}

muhittin_kaplan

#6
stm32f10x de namevcut hocam.

RTC_GetTime fonksiyonuyla gidip okunabilecek bir register yok.

bu F4 un RTC sindeki gün ay yıl saat dakika sını BCD sayan kayıtcıları



Bu da F103 un kayıtcıları



maalesef hesabı kendiniz yapacaksınız.

AsHeS


muhittin_kaplan

Nasıl yani, elimdeki mi pititez ? Yoksa işlemci bu yapacak birşey yok mu ? :D

muhittin_kaplan

 if ((RCC->BDCR & RCC_BDCR_RTCEN) != RCC_BDCR_RTCEN)

burada ne yapmaya çalışmış bu adam

RCC-BDRC : Backup domain control register
RCC_BDCR_RTCEN: RTC clock enable

LukeSkywalker

STM32F103C'de takvim yok.

muhittin_kaplan

hocam STM32F10x in hiçbirinde mi, sadece STM32F103C' demi yok

Mucit23

Eğer özel bir serisi yok ise benimde bildiğim kadarıyla 103 lerde Takvim yok.

muhittin_kaplan

kütüphane stm32f10x diye geçiyor.

ve bu kütüphanede RTC_GetTime yok. 10x in hiçbirinde takvim yok.

LukeSkywalker

Doğrudur hocam. Ben datasheet karışırmaya üşendim şimdi. STM32F103C ile çalıştığımdan ve takvim olmadığını hatırladığımdan sadece onu belirttim. STM32F103RB6 birtakım fazladan özelliklere sahip olduğundan takvime de sahip olabilir diye düşündüm.