Skip to content Skip to sidebar Skip to footer

Widget HTML #1

STM32 RTC Internal Arduino Cara Akses Data RTC

STM32 RTC Internal Arduino Cara Akses Data RTC

STM32 RTC Internal Arduino Cara Akses Data RTC - Artikel ini akan memberi Anda cara Mengakses Data STM32 RTC dan menampilkannya ke Arduino IDE Serial Monitor tanpa reset.

Chip ini sekarang mulai disukai oleh para programmer Arduino. Bagaimana tidak, dengan ukuran chip yang sama dengan Atmega328, papan Blue Pill STM32 chip memiliki beberapa keunggulan dibandingkan Atmega328, salah satunya adalah Internal RTC.

A. STM32 RTC Internal

Inilah yang paling saya sukai, chip ini adalah seri STM32F103C8T6 yang memiliki Internal RTC, jadi ini akan menyederhanakan rangkaian yang akan kami buat, cukup tambahkan sumber jam, osilator kristal.

Sebelumnya saya telah menulis tutorial cara mengakses data Internal Pill Blue RTC STM32F103, dan itu berhasil. Tetapi ketika daya terputus dari Pil BLue, data yang disimpan dengan benar adalah data Jam, Menit dan Detik, sedangkan Tanggal, Bulan dan Tahun akan diatur ulang ke 1-1-2000. Agak sedikit menyebalkan, ternyata data Date, Month and Year disimpan di SRAM.

Data tanggal perlu disimpan ke register cadangan di STM32F103C8T6 Blue Pill. Teman kami dari Gorontalo dengan nama "Zulns" telah membuat perpustakaan RTC STM32F1 dengan pembaruan data ke register cadangan. Jadi, bahkan jika daya terputus dari STM32 atau Blue Pill, Tanggal, Bulan dan Tahun tidak akan diatur ulang. Zulns, terima kasih untuk perpustakaannya!

Artikel ini adalah artikel perbaikan dari artikel STM32F103 Bluepill Internal RTC. Cara mengelola dan menampilkan data RTC pada Monitor Serial IDE Arduino. Papan yang saya gunakan adalah BluePill STM32F103. Perpustakaan yang saya gunakan adalah Arduino_Core_STM32. Anda dapat mengunduh melalui tautan ini, atau klik tombol di bawah ini.

B. ST Link V2 sebagai Programmer STM32F103C8T6

Untuk mengunggah program ke stm32f103c8t6, ​​saya menggunakan ST Link V2 STM32 Programmer. Sementara itu, untuk melihat hasilnya melalui monitor serial pada Arduino IDE, saya menggunakan FTDI.

Zulns telah membuat dokumentasi yang sangat baik dari perpustakaan STM32F1 RTC di github, Anda juga dapat membaca unduhan perpustakaan stm32f1_rtc.h dan panduannya di sini.

1. PROGRAM PENGATURAN AKSES DAN WAKTU RTC INTERNAL STM32F103C8T6

#include <stm32f1_rtc.h>
#define FLAGS_REGISTER 1
#define HIJRI_MODE_BIT 1
#define HIJRI_MODE_FLAG (1 << HIJRI_MODE_BIT)
#define IS_HIJRI_MODE(x) ((x.getBackupRegister(FLAGS_REGISTER) & HIJRI_MODE_FLAG) == HIJRI_MODE_FLAG)
const char * weekdayName[] = { "Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu" };
const char * arabicWeekdayName[] = { "Ahad", "Ithnayn", "Thulatha", "Arba'a", "Khamis", "Jumu'ah", "Sabt" };
const char * monthName[] = { "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "Desember" };
const char * hijriMonthName[] = { "Muharram", "Safar", "Rabi'al-Ula", "Rabi'ath-Thani", "Jumadal-Ula", "Jumadath-Thani", "Rajab", "Sha'ban", "Ramadan", "Shawwal", "Dhul-Qa'dah", "Dhul-Hijjah" };
DateVar date;
TimeVar time;
STM32F1_RTC rtc;
uint32_t epochTime;
bool isHijriMode = true;
void setup() {
Serial.begin(115200);
rtc.begin();
isHijriMode = IS_HIJRI_MODE(rtc);
//Hilangkan komen baris dibawah jika ingin atur waktu
// setWaktu();
// delay(100);
epochTime = rtc.getTime();
rtc.epochToTime(epochTime, time);
}
void loop() {
if (rtc.isCounterUpdated()) {
rtc.clearSecondFlag();
epochTime = rtc.getTime();
rtc.epochToTime(epochTime, time);
printTime(); printDate(); }
void printTime() {
}
uint8_t h = time.hours;
print2Digits(h);
Serial.print(":");
print2Digits(time.minutes);
Serial.print(":");
print2Digits(time.seconds);
Serial.print(" | ");
void print2Digits(uint8_t n) {
}
if (n < 10)
Serial.print(0);
Serial.print(n);
}
void setWaktu() {
// Tentukan waktu yang ingin di atur
time.hours = 11;
time.minutes = 35;
time.seconds = 0;
date.day = 15;
date.month = 5;
date.year = 2020;
epochTime = rtc.dateTimeToEpoch(date, time);
rtc.setTime(epochTime); }
void printDate() {
//Kalender Hijriah
rtc.epochToHijriDate(epochTime, date);
Serial.print(arabicWeekdayName[date.weekday]);
Serial.print(", ");
Serial.print(date.day);
Serial.print(" ");
Serial.print(hijriMonthName[date.month - 1]);
Serial.print(" ");
Serial.print(date.year);
Serial.print(" H");
Serial.print(" | ");
// Kalender Masehi
rtc.epochToDate(epochTime, date);
Serial.print(weekdayName[date.weekday]);
Serial.print(", ");
Serial.print(date.day);
Serial.print(" ");
Serial.print(monthName[date.month - 1]);
Serial.print(" ");
Serial.println(date.year);
}

Hasil:
Perbaiki Tanggal Reset Setelah Power di Matikan STM32F1 Blue Pill Internal RTC

Jika Anda merasa RTC Anda terlambat menghitung detik, jangan menghubungkan apa pun ke pin PC14 dan PC15.
 
Jika pin tajuk masih disolder pada pin ini, harap lepaskan. Pin ini terhubung langsung ke kristal RTC.
 
Ini akan mengganggu osilasi osilator kristal. Perhatikan pada gambar di bawah ini, saya memotong jalur PCB pada pin PC14 dan PC15. Dan sekarang berjalan normal.
 
STM32 Internal RTC

Saya harap ini dapat membantu Anda dalam mengembangkan perangkat elektronik berbasis STM32 RTC yang membutuhkan RTC. Itu saja.

2 comments for "STM32 RTC Internal Arduino Cara Akses Data RTC"

  1. terima kasih atas tutorial yg sangat membantu, izin bertanya bagaimana cara menyesuaikan waktu rtc dengan waktu sekarang? saya sudah membaca dokumtasi githubnya namun belum paham cara setting waktunya

    mohon bantuannya, terima kasih!

    ReplyDelete
    Replies
    1. Uncomment baris // setWaktu();

      terus, ubah waktu di void setWaktu() {
      time.hours = 11;
      time.minutes = 35;
      time.seconds = 0;
      date.day = 15;
      date.month = 5;
      date.year = 2020;
      }

      sesuaikan dengan waktu sekarang. Lalu upload.

      Setelah itu comment lagi setWaktu(); , lalu upload lagi biar waktu tidak diseting berulang.

      Semoga membantu.

      Delete