Skip to content Skip to sidebar Skip to footer

STM32F103 BluePill Internal RTC, How to set and display RTC data in Arduino IDE Serial Monitor

RTC read from stm32
Image from Pixabay


STM32F103 Bluepill Internal RTC Bagaimana cara mengatur dan menampilkan data RTC Pada Serial Monitor Arduino IDE

Salah satu kelebihan dari STM32F103 atau BluePill yang saya sukai adalah RTC Internal yang tersedia. Dari itu kita tidak lagi membutuhkan modul RTC seperti umum yang digunakan DS1307 dan DS1323 untuk menampilkan waktu, serta rangkaian menjadi lebih simpel. 

Di tutorial ini saya  akan menampilkan data RTC di Seral Monitor, untuk dapat berkomunikasi serial, saya menggunakan komunikasi USB. Jika anda ingin menggunakan STM32 melalui USB, anda dapat membaca tutorial yang sudah saya buat pada halaman Cara Program STM32 Blue Pill STM32F103C8T6  atau CKS32F103C8T6 Melalui USB Menggunakan Arduino Pada Linux (Ubuntu)

Hal terpenting jika anda ingin menggunakan USB sebagai media programnya, dihalaman yang telah saya tulis di atas adalah anda hanya butuh burn bootloadernya saja. karrena itu yang akan membuat STM32 dapat berkomunikasi via USB. Saya mencoba beberapa kali untuk komunikasi serial melalui ST-LINK V2, tetapi tidak bisa.

Program untuk membaca dan set waktu RTC Internal STM32

Berikut saya bagikan program dasarnya. adapun cara kerjanya adalah, buka terminal, kemudian akan tampil data RTCnya. Untuk emrubah data RTC, tulis di serial monitor dengan karakter 'e' dan kirimkan atau "ENTER". Kemudian akan muncul pertanyaan, Masukkan jam, masukkan tanggal dan seterusnya.

#include <RTClock.h>

RTClock rtclock (RTCSEL_LSE);
tm_t mtt;
tm_t mt;

int jam, menit, tanggal, bulan, tahun = 0;  //hour, minute, date, month, year 
char s[128];
const char * weekdays[] = {"Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Ahad"};
const char * months[] = {"Dummy", "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" };


void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  show_time();
  read_serial();
}

void read_serial() {
  if (Serial.available() > 0) {
    if (Serial.read() == 'e') {
      Serial.println("--------------------------");
      Serial.println("Masuk Mode Atur Waktu");
      Serial.readString();

      Serial.print("Masukkan Jam: ");
      while (!Serial.available()) {}
      jam = Serial.parseInt();
      Serial.print("   ---> Saved ");
      Serial.println(jam);
      delay(300);
      Serial.readString();

      Serial.print("Masukkan Menit: ");
      while (!Serial.available()) {}
      menit = Serial.parseInt();
      Serial.print("   ---> Saved ");
      Serial.println(menit);
      delay(300);
      Serial.readString();

      Serial.print("Masukkan Tanggal: ");
      while (!Serial.available()) {}
      tanggal = Serial.parseInt();
      Serial.print("   ---> Saved ");
      Serial.println(tanggal);
      delay(300);
      Serial.readString();

      Serial.print("Masukkan Bulan: ");
      while (!Serial.available()) {}
      bulan = Serial.parseInt();
      Serial.print("   ---> Saved ");
      Serial.println(bulan);
      delay(300);
      Serial.readString();

      Serial.print("Masukkan Tahun: ");
      while (!Serial.available()) {}
      tahun = Serial.parseInt();
      Serial.print("   ---> Tahun ");
      Serial.println(tahun);
      delay(300);
      Serial.readString();

      set_time();
    }
  }
}

void set_time() {
  mt.hour = jam;
  mt.minute = menit;
  mt.second = 0;
  mt.day = tanggal;
  mt.month = bulan;
  mt.year = tahun - 1970;

  rtclock.setTime(mt);
}

void show_time() {
  rtclock.breakTime(rtclock.now(), mtt);
  sprintf(s, "%s %u %u, %s, %02u:%02u:%02u\n",
          months[mtt.month], mtt.day, mtt.year + 1970, weekdays[mtt.weekday], mtt.hour, mtt.minute, mtt.second);
  Serial.print(s);
  delay(997);
}

Hasilnya adalah seperti ditampilkan pada gambar berikut:
How to set and display RTC Internal STM32

Jika anda mengalami masalah dengan RTC yang tidak dapat membaca nilai RTC secara berkelanjutan atau hang atau Freeze, anda dapat membaca artikel yang saya buat yaitu Cara memperbaiki masalah dengan RTC SMT32, Berjalan sejenak kemudian berhenti membaca data (Hang atau Beku) dari STM32.

Perhatian! Program pada Artikel ini terdapat BUG / kesalahan yaitu tanggal reset ke 1-1-2000 tiap kali daya terputus dari STM32. Saya telah memperbaiki kode program pada Artikel Akses Internal RTC STM32. Silahkan kunjungi Artikel tersebut.

Semoga bermanfaat. Sekian.

Post a Comment for "STM32F103 BluePill Internal RTC, How to set and display RTC data in Arduino IDE Serial Monitor"

Berlangganan via Email