Site icon TAPIT

Tìm hiểu Clock Security System (CSS) vi điều khiển STM32 qua ví dụ thực tế

Hầu hết tất cả các thiết bị IC số đều cần một cách để đồng bộ hoạt động của các mạch điện bên trong IC hoặc để đồng bộ IC với các mạch khác ở bên ngoài khi giao tiếp với nhau. Và tín hiệu clock đã được sử dụng cho mục đích này. Tín hiệu clock là một tín hiệu dao động định kỳ, với thông số quan trọng nhất mà chúng ta thường biết đến là tần số, được thể hiện bằng đơn vị Hertz. Người ta thường ví tín hiệu clock giống như nhịp tim của thiết bị điện tử.

Tần số clock bên trong vi điều khiển liên quan trực tiếp đến hiệu năng và mức độ tiêu thụ năng lượng bên trong vi điều khiển. Điều này đòi hỏi clock phải được thiết kế để có thể lựa chọn các nguồn cung cấp clock khác nhau. Và clock phải được tổ chức theo một cấu trúc phân cấp, và phải được thiết kế để có thể thực hiện được việc bật/tắt, cấu hình tốc độ riêng biệt cho các khối khác nhau bên trong vi điều khiển.  

Hình 1. Clock tree của vi điều khiển STM32F303

Hãng ST đã thiết kế và cung cấp cho người dùng khả năng làm việc với toàn bộ clock tree của vi điều khiển STM32 một cách đơn giản nhất thông qua Giao diện STM32CubeMX và module RCC của thư viện HAL. Chi tiết về Clock tree và các kiến thức cần thiết để các bạn có thể thiết kế và quản lý clock cho các ứng dụng sử dụng dòng vi điều khiển STM32 đã được mình trình bày trong khóa học Lập trình Vi điều khiển STM32 – Vi xử lý ARM Cortex M3/4.

Trong bài viết này, chúng ta sẽ tìm hiểu về Clock Security System (CSS) của vi điều khiển STM32 và làm rõ chức năng này qua các ví dụ thực tế.

1.  Nguồn clock cho System clock (SYSCLK)  vi điều khiển

Hình 2. Thanh ghi điều khiển clock RCC_CR

Thử nghiệm thực tế:

Phần cứng: Các bạn cũng có thể thử nghiệm trên các board mạch STM32 có nguồn dao động ngoài từ thạch anh như  STM32F103 Blue Pill hoặc các board mạch STM32 Discovery hoặc các board mạch có dao động ngoài từ phần mạch Debugger STLink đính kèm như board mạch Nucleo (xem sơ đồ nguyên lý và tài liệu User Manual Board để hiểu rõ hơn)

Hình 3. Board STM32 Nucleo chưa được hàn thạch anh nhưng được cấp dao động ngoài từ phần mạch Debugger STLink tích hợp

Phần mềm: Cấu hình cho vi điều khiển sử dụng bộ dao động ngoại (RCC > High Speed Clock (HSE) > Crystal/Ceramic Resonator). 

Hình 4. Cấu hình nguồn Clock HSE cho vi điều khiển

Trong chương trình chính, build chương trình và vào debug. Đặt Breakpoint tại hàm SystemClock_Config, phân tích các bit trạng thái tại thanh ghi Clock Control Register (RCC_CR)

Hình 5. Giá trị thanh ghi RCC_CR khi vi điều khiển khởi động

Hình 6. Giá trị thanh ghi RCC CR và CFGR sau khi thực hiện hàm cấu hình clock

2.  Clock Security system (CSS) vi điều khiển STM32

Hình 7. Thanh ghi cấu hình clock RCC_CFGR

Thử nghiệm thực tế:

Phần cứng: Các bạn cũng có thể thử nghiệm trên các board mạch STM32 không có nguồn dao động ngoài hoặc tháo thạch anh 8MHz ở board mạch STM32F103 BluePill hay board mạch STM32Discovery hoặc tháo cầu SB dẫn tín hiệu từ phần mạch Debuger STLink tích hợp của các board STM32Nucleo. Các bạn cũng có thể tác động vào các board mạch có sẵn nguồn dao động ngoại để làm lỗi tạm thời nguồn dao động ngoài (lưu ý: việc này không khuyến khích, thao tác không cẩn thận có thể làm hỏng vi điều khiển/ board mạch).

Phần mềm: 

Hình 8. Cấu hình Enable CSS

Ta thấy, khi chương trình đang chạy bằng HSE, bit SW = 1, cho thấy HSE đang được sử dụng làm clock cho hệ thống.

Hình 9. Giá trị bit SW tại thanh ghi CFGR khi HSE bình thường

Khi có vấn đề xảy ra với HSE (mình đã tác động để làm HSE lỗi), chương trình đã nhảy vào hàm HAL_RCC_CSSCallback() để thực thi chương trình bên trong hàm ngắt, Có thể thấy tại hình 10, chương trình đã dừng lại tại break point.

Hình 10. Giá trị bit SW tại thanh ghi CFGR khi HSE gặp sự cố

Bit SW trong thanh ghi CFGR đã bị reset về 0, lúc này HSI sẽ được chọn làm clock cho hệ thống thay thế cho HSE. 

Lưu ý: Nếu HSE được sử dụng một cách trực tiếp hay gián tiếp thông qua PLL thì khi HSE bị vô hiệu hóa vì lỗi thì PLL cũng sẽ bị vô hiệu hóa và HSI được sử dụng trực tiếp làm nguồn vào cho SYSCLK. Các bạn cần lưu ý các giá trị tần số sẽ ảnh hưởng như thế nào trong ứng dụng của các bạn và có những giải pháp phù hợp.

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

Cộng đồng Kỹ thuật TAPIT
Binh Hoang, Tai Pham, Thuong Nguyen

Tìm hiểu thêm
[HỌC ONLINE TẠI TAPIT: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]
Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32
Tổng hợp hướng dẫn Internet of Things với NodeMCU ESP8266 và ESP32
Fanpage Cộng đồng Kỹ thuật TAPIT: TAPIT – Learning, Research and Sharing Community
Kênh Youtube: Cộng đồng Kỹ thuật TAPIT