Bài 08: RTC với STM32F303CC trong MXCUBE

Bài 09: RTC với STM32F303CC.

  1. Giới thiệu sơ lược về ADC.
  2. RTC(Real time clock ) là bộ thời gian thực được tích hợp sẵn trong STM32F303CC. Thay vì phải gắn thêm IC thời gian thực để đọc được ngày tháng năm, giờ phút giây thì không phải dùng nó khi dùng STM32F303CC. Một số ứng dụng chính như làm đồng hồ, mạch kiểm soát thời gian, báo thức, bộ đếm thời gian…

    Bộ RTC này sử dụng timer độc lập, tách biệt với các timer khác. Việc cài đặt thời gian, đọc thời gian cũng trở nên dễ dàng hơn bằng cách tác động trực tiếp vào các thanh ghi thời gian của MCU.

    Nguồn clock cấp cho bộ RTC hoạt động có thể được sử dụng 1 trong 3 nguồn sau:

    • HSE : sử dụng thạch anh ngoài tốc độ cao 62.5 Khz.
    • LSI RC: sử dụng bộ giao động RC nội tốc độ 40Khz.
    • LSE : sử dụng thạc anh ngoài tốc độ thấp 32.768khz.

    Thạch anh ngoài giúp bộ MCU hoạt động ổn định hơn. Khi cần backup data khi mất nguồn trên chân VDD thì cần có 2 điều kiện là sử dụng thạch anh ngoài và có điện áp trên chân VBAT.

    Các chức năng cơ bản của bộ RTC:

    • Lịch với các đơn vị thời gian như giây, phút, giờ(AM - PM), thứ, ngày, tháng, năm.
    • Ngắt cảnh báo tương ứng với ngắt báo thức của đồng hồ.
    • Tự động thức tỉnh từ chế độ ngủ với xung trigger.
    • Có bộ kiểm tra clock tham chiếu giúp nâng cao độ chính xác của bộ lịch.
    • Có chế độ daylight saving time(thường cho các nước châu Mỹ và châu Âu dùng cho việc điều chỉnh giờ giữa ban ngày và ban đêm )
    • 16 thanh ghi backup data.
    • Các vector ngắt bổ trợ:
      • Alarm A.
      • Alarm B.
      • Wake up interrupt.
      • Time-stamp.
      • Tamper detection.
  3. Cấu hình trên STM32 CubeMx.
  4. VD: Viết chương trình cấu hình cho bộ RTC sử dụng thạch anh ngoài(LSE). Thời gian được hiển thị mỗi 1s/ 1 lần lên máy tính thông qua UART với tốc độ baund 38400.

    Vì bộ RTC của STM32F303CC không hỗ trợ ngắt 1s/1 lần nên ta phải dụng sử timer để tạo sự kiện ngắt 1s/ 1 lần. Timer sử dụng ở đây là timer15.

    1. New project. Cửa sổ mới được mở ra. Chọn loại MCU theo tên hoặc theo họ, loại package… Ở đây mình nhớ tên luôn nên gõ vào cho nhanh STM32F303CC.
    2. Chọn loại MCU, Double click vào tên MCU được tìm thấy hoặc bấm vào Start project để bắt đầu quá trình cài đặt.
    3. Cấu hình thạch anh, chuẩn nạp trước tiên. Bài này sử dụng UART2, RTC, TIM15. Click chuột trái để chọn chức năng cho ngoại vi.Click chuột phải để tạo nhãn cho chân ngoại vi cho dễ nhìn.Cấu hình thạch anh, chuẩn nạp trước tiên. Bài này sử dụng UART2, RTC, TIM15. Click chuột trái để chọn chức năng cho ngoại vi.Click chuột phải để tạo nhãn cho chân ngoại vi cho dễ nhìn.

      Ở đây, chân PA2,PA3 lần lượt là chân UART2_TX, UART2_RX. Bài này sử dụng cả HSE, LSE. Timer 15 được cấu hình nội.

    4. Tab Clock Configuration để tốc độ là tối đa 72Mhz.
    5. Tab Configuration
      • Connectivity -> click vào UART đã chọn(UART2) để bắt đầu cấu hình. Cấu hình tốc độ baud là 38400, độ dài là 8 bit, không sử dụng bit parity và 1 bit stop, các phần khác để mặc định.
      • Sau khi nhập các thông số, nhấn Ok để đóng bảng.

      • Tab Configuration -> Control –> RTC :
      • Chú ý một số thông số như sau:

        • Hour format : kiểu định dạng giờ là 24h hay 12h.
        • Asynchronous Predivider value:
        • Synchronous Predivider value :
        • Đây là 2 bộ chia tần số đồng bộ và không đồng bộ. để tần số đầu ra là 1hz tức là 1s thì thanh ghi thời gian được cập nhật 1 lần.

        • Data format : kiểu định dạng dữ liệu là BCD hay nhị phân.
        • Hours, minutes, seconds : là thời gian ban đầu cài đặt khi chạy.
        • Daylight saving và store operator : có sử dụng chế độ thêm bớt giờ( cái này search google nha các bạn, chế độ này ít sử dụng ở Việt Nam) và có lưu trữ việc sử dụng mode đó hay không.
        • Week day, month, date, year : là thời gian ban đầu(thứ, tháng, ngày, năm) khi khởi tạo chương trình.

        Sau khi nhập các thông số, nhấn Ok để đóng bảng.

      • Tab Configuration -> Control –> TIM15 :
      • Sau khi nhập các thông số, nhấn Ok để đóng bảng.

      • Tab System -> NVIC –> click chọn ngắt timer 15 và mức ưu tiên :
      • Sau khi nhập các thông số, nhấn Ok để đóng bảng.

    6. Tab power consumption Caculator để các thông số mặc định.
    7. Cài đặt file xuất ra cho project : vào Project -> settings.Việc cài đặt tương tự như các bài 02, 03. Và không có gì khác biệt nhiều.
    8. Lưu ý : Tab code generator chọn copy only the necessary library files để chương trình sinh ra chỉ copy những file cần thiết -> chương trình tốn ít bộ nhớ hơn. Tab Advanced Setting để mặc định. Nhấn Ok để kết thúc quá trình.

    9. Xuất code sau khi cài đặt : Project -> code generate hoặc click vào biểu tượng. Sau khi code được sinh ra click vào open project để mở project đó lên.
  5. Chỉnh sửa code trên keil C.
    1. Mở file main.c trong khung project lên để chỉnh sửa code sinh ra.
    2. Thêm dòng code như hình.
      • Khai báo biến sử dụng trong chương trình, define để sử dụng lệnh printf
      • Khai báo chương trình con hiển thị thời gian lên mà hình.
      • Thực thi code trong main
      • Chương trình con hiển thị thời gian qua UART.
      • Extern biến để sử dụng trong file stm32xxx_it.c
      • Chương trình thực thi ngắt trong file stm32xxx_it.c.

      Lưu ý: thêm code vào giữa begin và end để generate code lần sau không bị mất code đã thêm vào.

    3. Chọn reset and run trong options of target -> Utilities -> setting -> Flash download để sau khi nạp xong chương trình chạy luôn mà không cần nhấn nút reset.
    4. Biên dịch chương trình(Build) ở lần đầu tiên và Rebuild(F7) cho các lần tiếp theo. Chương trình không báo lỗi. Nhấn nút Load để nạp(F8).
    5. Lưu ý:
      • Vì không có ngắt 1s/ 1 lần giống như F1 nên phải tạo thêm 1 timer phụ để tạo ngắt 1s/ 1 lần. Cấu hình prescaler và Period lần lượt là 7199, 9999 để thỏa mãn điều kiên ngắt 1s.
      • Sử dụng thạch anh ngoài tốc độ thấp(LSE) để bộ giao động RTC được chính xác hơn. Ở ví dụ này cần có thạch anh ngoài 32,768Khz để chạy được chương trình
      • Các hàm HAL_RTC_GetTime, HAL_RTC_GetDate dùng để đọc giá trị thời gian trả về.

      Chúc các bạn thành công.

  6. Bài tập
    1. Viết chương trình cấu hình cho bộ RTC sử dụng thạch anh ngoài(LSE). Thời gian được hiển thị mỗi 1s/ 1 lần lên máy tính thông qua UART với tốc độ baund 38400. Thời gian ban đầu được cài đặt là 0h 0p 0s, đến 0h 1p 0s có ngắt alarm xảy ra. Khi có alarm xảy ra thì led PB9 sáng.
    2. Viết chương trình cấu hình cho bộ RTC sử dụng thạch anh ngoài(LSE). Thời gian được hiển thị mỗi 1s/ 1 lần lên máy tính thông qua UART với tốc độ baund 38400. Sử dụng backup data để kiểm tra trạng thái khi bị mất nguồn thì bộ RTC vẫn hoạt động. Lưu ý: cần có Pin C-Mos nối với chân Vbat để thực hiện được chương trình này.


Link tải ví dụ RTC ở trên