Lập trình STM32 RTC – Real Time Clock

Lập trình stm32 rtc đồng hồ thời gian thực

STM32 RTC là một ngoại vi giúp cho vi điều khiển có thể chạy được các tác vụ thời gian thực như tính toán ngày, tháng, năm, phút giây mà không cần đến các chip thời gian thực khác như DS3231, DS1307…

Bài 13 trong serie Học lập trình STM32 từ A tới Z

RTC là gì?

RTC hay Real Time Clock là ngoại vi sử dụng như một bộ đồng hồ – lịch thời gian thực. Thuật ngữ thời gian thực là chỉ thời gian trong cuộc sống của con người hằng ngày, chứ không phải thời gian trong tính toán như các Timer khác.

Để bộ RTC có thể hoạt động chúng ta cần nối chân Vbat của vi điều khiển với một nguồn 3V, thường sử dụng Pin Cmos, nguồn điện này giúp duy trì xung RTC hoạt động bình thường.

 

real time clock được ứng dụng rất nhiều trong nhúng

Ưu nhược điểm của RTC on chip so với các IC RTC khác như DS3231, DS1307

Ưu điểm:

  • Tiết kiệm chi phí linh kiện, góp phần giảm giá thành sản phẩm
  • Có thể sử dụng thanh ghi Backup 16bit như 1 Eprom điều mà STM32 thiếu

Nhược điểm

  • Sai số từ bộ dao động lớn (1%), khi chạy lâu dài sẽ dẫn tới sai thời gian

Các thông số chính của STM32 RTC

  • Có thể cấu hình Clock đầu vào theo 3 nguồn đó là: LSE, HSE, LSI
  • Bộ chia clock lên đến 20 bit, giúp bộ RTC hoạt động chính xác.
  • Độ phân giải của timer RTC lên đến 32 bit – tức là 2^32 giây mới tràn và cần reset lại.
  • 3 nguồn clock source có thể được sử dụng.
  • 2 loại Reset RTC riêng biệt.
  • Có các ngắt hỗ trợ là : ngắt Alarm, ngắt mỗi giây, ngắt tràn bộ đếm.

Trong bài hướng dẫn này, mình sẽ hướng dẫn các bạn tạo ra một chiếc đồng hồ chạy thời gian thực, nó sẽ vẫn chạy dù cho nguồn vi điều khiển có bị mất hay không. Bắt đầu nhé

Cấu hình STM32 RTC tạo đồng hồ thời gian thực

Để bắt đầu ta sẽ cấu hình STM32 RTC trong Cube MX

Trong Tab System Core, chọn RCC là HSE

STM32 RTC RCC

Tab SYS, chọn Debug là Serial Wire

 

STM32 RTC SYS

Tab RTC tích chọn Active Source Clock để bật bộ RTC, chọn Active Calendar để cấu hình ngày giờ bắt đầu cho RTC, chọn Tamper nếu sử dụng chân Tamper làm chân xuất tín hiệu RTC Out

Trong tab cấu hình

  • Data Fomat chọn là Binary data format: Định dạng cho thời gian là kiểu số nhị phân
  • Time, minutes, sec: thời gian ban đầu của hệ thống
  • Day, date, week, …: Lịch ban đầu của hệ thông
  • Các tab còn lại là cấu hình xung đầu ra cho RTC

STM32 RTC cau hinh

Mở phần mềm lên và chọn chip STM32F103C8T6, cấu hình Clock và HSE, Cấu hình Clock cho RTC là HSE

STM32 RTC Clock source

Chuyển sang Project đặt tên và Gen Code

STM32 RTC Gen code

Lập trình STM32 RTC trong Keil C

Mở project đã tạo lên.

Trong phần cấu hình MX_RTC_Init(), ta sử dụng hai hàm Read và Write Backup Register. Công dụng của đoạn code này chính là, nếu Time và Date đã được ghi, thanh ghi RTC_BKP_DR1 sẽ có dữ liệu = 0x2608 (Số này tùy chọn), thanh ghi này sẽ không mất dữ liệu nếu chân Vbat được cấp 3V. Vì vậy ta chỉ có thể ghi dữ liệu vào RTC 1 lần mà thôi, khi reset MCU, dữ liệu thời gian, ngày tháng sẽ không bị ghi đè.

Copy đoạn code ghi dữ liệu vào RTC

RTC coppy set time

Paste vào trong if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) == 0x2608) ,  cuối cùng sử dụng HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, 0x2608); để ghi vào BKP_DR1

RTC Backup check

Phía trên main() tạo 2 biến toàn cục dạng struct lưu thời gian và ngày tháng

RTC tao bien

Trong While(1) chúng ta sẽ đọc giá trị của thanh ghi RTC vào 2 biến đó

RTC while

Nhấn F7 để build trương trình, F8 để nạp code vào Kit

Kết nối phần cứng cho STM32 RTC

Để RTC có thể hoạt động được chúng ta cần nối Vbat với Pin 3V, đảm bảo rằng chân đó luôn có điện

stm32 rtc vbat

Sau khi nạo chương trình vào chip nhấn vào Debug, Chọn các biến sTime, sDate cho vào Watch 1.

RTC debug

Run trong debug mode để xem sự thay đổi của các biến

RTC Time

 

Ta thấy rằng đồng hồ đã bắt đầu đếm số giây. Nhấn reset mạch, ta thấy rằng thời gian không bị reset về giá trị set ban đầu => Thanh ghi BKP không bị mất dữ liệu.

Kết

STM32 RTC rất dễ học, được ứng dụng rất nhiều, các bạn có thể sử dụng nó làm một chiếc đồng hồ báo thức thông minh, một lịch vạn niên hiển thị cả ngày, tháng, năm.
Hi vọng kiến thức vừa rồi có thể giúp ích được cho các bạn, hẹn gặp lại vào các bài tiếp theo.

 

 

 

2 thoughts on “Lập trình STM32 RTC – Real Time Clock

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *