Professional Documents
Culture Documents
Mục Lục
1. Khối Clock của STM32F103 ................................................................................................................ 2
1.1. Các clock trong hệ thống. ............................................................................................................. 2
1.2. Chân MCO (Microcontroller Clock Output)................................................................................. 5
2. Các hàm của thư viện STM32F1xx HAL thao tác lên Clock. .............................................................. 5
3. Chương trình mẫu ................................................................................................................................. 6
4. Bài tập ................................................................................................................................................... 7
Bài tập 1 (3đ) ............................................................................................................................................ 7
Bài tập 2 (3đ) ............................................................................................................................................ 7
Bài tập 3 (2đ) ............................................................................................................................................ 7
Bài tập 4 (2đ) ............................................................................................................................................ 7
Phụ lục .......................................................................................................................................................... 8
1. Khối Clock của STM32F103
HSE oscillator clock: dao động ngoài tốc độ cao, 4-16 MHz.
HSI oscillator clock: dao động RC nội tốc độ cao. Tốc độ cố định ở 8MHz.
LSE oscillator clock: dao động ngoài tốc độ thấp, nối với thạch anh 32.768 KHz.
LSI oscillator clock: dao động RC nội tốc độ thấp. Tốc độ cố định ở 40MHz.
Trong đó HSE hoặc HSI sẽ được sử dụng để cấp clock chính cho toàn bộ hệ thống (SYSCLK –
System clock). LSE hoặc LSI được sử dụng để cấp clock cho khối Real time clock nội bên trong
STM32F103. Trong bài lab ta sẽ tìm hiểu về HSE, HSI, SYSCLK, và các clock được cấp thực sự đến các
ngoại vi.
Tổ chức khối clock của STM32F103 được thể hiện ở hình sau:
Hình 2. STM32F103 Clock tree. (Reference Manual, tr. 93)
Trong đó ta thấy System clock (SYSCLK) được cấp từ một trong 3 nguồn là: trực tiếp từ HSE, HSI
hoặc thông qua bộ nhân tần số PLL (PLLCLK). Bộ nhân tần PLL (phase-locked loop) của STM32F103
có thể hỗ trợ việc nhân 2 – 16 lần tần số đầu vào tuỳ thuộc vào việc cấu hình trong code. Sau khi đã có
được SYSCLK, SYSCLK sẽ được chia thành các nhánh khác nhau để cấp đến các ngoại vi:
AHB clock (HCLK): hình thành bằng cách chia tần của SYSCLK thông qua AHB prescaler
(/1 - /512). AHB được cấp cho lõi ARM, khối bộ nhớ, DMA và các ngoại vi tốc độ cao như
SDIO, FSMC …
AHB clock tiếp tục được chia tần thành 2 kênh clock APB1 (PCLK1) và APB2 (PCLK2) để
cấp cho các ngoại vi khác. Trong đó APB1 có tốc độ tối đa 36MHz và APB2 là 72MHz. Các
ngoại vi được cấp bởi APB1 và APB2 được thể hiện ở hình sau.
PLLCLK
HSI
HSE
SYSCLOCK.
Trên board (Hình 1), vị trí Clock testpoint được nối với chân MCO của STM32.
2. Các hàm của thư viện STM32F1xx HAL thao tác lên Clock.
Các hàm để thao tác lên Clock nằm ở Module RCC của thư viện: Home => Modules => RCC
(STM32F103xG_User_Manual.chm). Một số hàm cần chú ý:
Sử dụng để cấu hình (bật/ tắt/ các thông số chia/ nhân tần) các bộ dao động HSE, HSI, LSE, LSI và
PLL. Khi muốn cấu hình một bộ dao động ta phải chọn bộ dao động nào bằng cách gán vào trường:
OscillatorType của struct RCC_OscInitTypeDef, và đưa các thông số tương ứng vào các trường
còn lại. Ta có thể cấu hình nhiều bộ dao động cùng 1 lúc bằng cách or ( | ) các tham số của trường
OscillatorType. Chú ý rằng khi không muốn cấu hình PLL thì cũng phải gán trường
PLL.PLL_State = RCC_PLL_NONE
HAL_RCC_OscConfig(&rcc_osc_init_s);
Tham số FLatency được gán tuỳ thuộc vào tốc độ chạy của SYSCLK. Việc cấu hình không đúng
FLatency sẽ dẫn đến việc đọc/ghi dữ liệu từ Flash sẽ sai.
Cấu hình clock sẽ được xuất ra từ chân MCO. Đối với STM32F1xx chỉ có duy nhất chân PA8 có khả
năng xuất clock nên tham số RCC_MCOx chỉ có 1 lựa chọn là RCC_MCO. Clock nào được xuất ra sẽ được
cấu hình ở tham số RCC_MCOSource. Chú ý rằng STM32F103 thuộc dòng High-density nên chỉ có 4
nguồn clock có thể được lựa chọn (HSE, HSI, PLLCLK/2, SYSCLK). Tham số RCC_MCODiv chỉ có một
lựa chọn là RCC_MCODIV_1 nghĩa là clock được xuất ra không qua 1 bộ chia tần nào cả.
Chú ý: chân PA8 phải được cấu hình với Mode là GPIO_MODE_AF_PP và tốc độ GPIO_SPEED_HIGH
(50MHz) để có thể xuất được clock.
Các hàm trên tương ứng để lấy giá trị SYSCLK, HCLK, PCLK1, PCLK2.
Chú ý: bản thân chương trình không thể nào biết được tần số thạch anh được cấp vào cho bộ dao động
HSE là bao nhiêu. Nên tần số HSE là một giá trị được định nghĩa sẵn bởi chương trình. Toàn bộ quá trình
tính toán để lấy về SYSCLK, HCLK, PCLK1, PCLK2 đều dựa trên giá trị này.
Giá trị SYSCLK sẽ được đọc về bằng hàm HAL_RCC_GetSysClockFreq và được xuất ra USART1
(baud rate: 115200, 8 bits data, no flow control).
HSI clock sẽ được xuất ra trên chân Clock testpoint của board (MCO).
4. Bài tập
Bài tập 1 (3đ)
Sinh viên nạp chương trình mẫu và sử dụng máy dao động kí để kiểm tra tần số clock (HSI) hiện tại đang
là bao nhiêu. So sánh với kết quả hiển thị trên UART.
Sinh viên thử nghiệm các tổ hợp khác của PCLK và dao động kí để so sánh với kết quả.
Dao động ký là một loại thiết bị điện tử được sử dụng để quan sát mức điện thế của các tín hiệu điện,
thường được hiển thị lên trên đồ thị 2 chiều. Trục ngang biểu thị thời gian và trục dọc có thể biểu diễn
mức điện thế của tín hiệu hoặc độ chênh lệch điện thế của tín hiệu với tín hiệu khác.
Hình 4 là hình chụp một oscilloscope, bao gồm Nút nguồn, Màn hình và Các nút chức năng.
Đối với oscilloscope này ta có 2 đầu đo tín hiệu tương ứng với 2 kênh input, Hình 5. Mỗi đầu đo gồm có
một kẹp dùng để nối mass, đầu còn lại tham khảo nối mass này để đo tín hiệu hiển thị ra màn hình LCD.
Hình 5. Đầu đo tín hiệu của oscilloscope.
- Cắm dây nguồn và bật nút Power ở phía trên của OSC.
- Chờ cho đến khi màn hình hiện thông báo quá trình self test thành công và nhấn nút
SAVE/RECALL ở mặt trước bên tay phải của OSC.
- Chú ý menu Setup đang được chọn và nhấn nút bên cạnh menu “Recall Factory”. Osc sẽ quay trở
lại các thông số ban đầu của nhà sản xuất. Sau này, bất kì khi nào không hiểu Osc đang hiển thị
cái gì, ta có thể lặp lại các bước trên để thiết lập lại các thông số mặc định cho Osc.
Hình 6. Các nút chức năng của oscilloscope.
Đo test thử:
- Nối đầu dò của kênh 1 vào probe comp phía trên, đất của kênh 1 vào ground ngay phía dưới, xem
Hình 6 ở góc dưới bên trái.
- Nhấn nút AUTOSET ở góc phía trên bên phải. Lúc này Osc sẽ tự động chỉnh chiều ngang, dọc,
và tự động điều khiển trigger và hiển thị ra màn hình LCD dạng sóng vuông mẫu.
- Nếu muốn hiển thị hai kênh cùng lúc, nhấn CH 2 MENU để cho phép hiển thị kênh 2 và nhấn
AUTOSET lại.
- Ở bước này, ta chỉ xem xét kênh 1 và các nút điều chỉnh cho kênh 1, kênh 2 cũng điều chỉnh
tương tự.
- Điều chỉnh vị trí hiển thị theo chiều đứng (Hình 7): xoay nút Cursor1 bên menu VERTICAL. Ở
đây ta xoay Cursor 1 sao cho dạng sóng nằm ngay chính giữa màn hình.
Hình 7. Các nút điều khiển hiển thị theo chiều đứng.
- Điều chỉnh vị trí hiển thị theo chiều ngang (Hình 8): xoay nút ở menu HORIZONTAL để điều
chỉnh vị trí của dạng sóng hiển thị. Ở đây ta xoay cho dạng sóng nằm chính giữa màn hình.
Hình 8. Các nút điều khiển hiển thị theo chiều ngang.
- Điều chỉnh bước chia điện thế: nút VOLTS/DIV cho phép điều chỉnh bước chia điện thế. Xoay về
bên phải sẽ làm tăng độ nhạy (làm giảm độ lớn hiệu điện thế giữa hai bước chia).
- Điều chỉnh bước chia thời gian: nút SEC/DIV điều khiển bước chia thời gian. Xoay nút về bên
phải sẽ làm giảm khoảng thời gian giữa hai bước chia.
- Đôi khi ta muốn quan sát dạng sóng hiển thị tại một thời điểm nào đó, điều này được thực hiện
bằng cách sử dụng nút Run/Stops nằm ở góc trên bên phải (Hình 9).