You are on page 1of 6

THỰC HÀNH THIẾT KẾ HỆ THỐNG NHÚNG

Họ và tên: Nguyễn Anh Kiệt - 20521497


Lê Như Gia Khiêm - 20520216
Võ Đông Hưng - 20521376
Lớp: CE224.N13.MTCL.1

LAB01: LÀM QUEN VỚI KIT STM32F4 DISCOVERY


3. Bài tập
Bài tập 1: Trình bày về các đặc điểm Timer trên KIT STM32F4
Discovery (số lượng Timer, các chế độ hoạt động, cách cấu hình, cách cài đặt)
Trả lời:
STM32F407VG có 14 timer, bao gồm 2 timer cao cấp (TIM1/TIM8), 10 timer
đa dụng, 2 timer cơ bản.
Các tính chất cơ bản:

Các chế độ hoạt động của Timer:


• Input capture: Chế độ này phát hiện và lưu lại sự xuất hiện sự thay đổi
mức logic (sườn lên/ sườn xuống) của tín hiệu. Từ đó, ta có thể biết được
khoảng thời gian giữa hai lần có sườn lên/ sườn xuống.
• Output compare: Đây là chế độ giúp tạo ra các sự kiện(ví dụ như ngắt)
khi CNT đạt đến giá trị được lưu trong các thanh ghi TIMx_CCMRx
(capture/compare mode register). Ứng dụng phổ biến nhất của Output
Compare là tạo ra nhiều xung PWM với các tần số khác nhau trên cùng
một Timer.
• PWN generation (Edge - and Center - aligned modes): Tính năng điều
chế độ rộng xung (băm xung).
• One-pulse mode output: Tạo ra một xung duy nhất với độ rộng có thể
cấu hình được, CNT sẽ tự động dừng khi có sự kiện tràn
Các tham số để thiết lập cấu hình cho Timer:
• TIM_Period: Period có nghĩa là chu kỳ của timer (không phải là chu kỳ
của 1 xung clock timer). Ví dụ một chu kỳ gồm 1000 xung clock mà mỗi
xung clock = 1us ta sẽ được period là 1ms. Cần trừ đi cho 1 là vì hệ thống
đếm bắt đầu từ 0.
• TIM_Prescaler : Tham số TIM_Prescaler hiểu đơn giản như một bộ
chia tần số.
TIM_Prescaler = ((SystemCoreClock/n)/Ftim_cnt)-1
Trong đó:
• SystemCoreClock/n: tần số clock timer (xem bảng trên)
• Ftim_cnt: tần số đếm của timer
• TIM_CounterMode: Thiết lập mode cho timer là đếm lên, đếm xuống
hay đếm lên/xuống. Nếu chọn mode đếm tăng (đếm lên) có nghĩa là mỗi
xung nhịp timer, bộ đếm counter sẽ tự tăng lên một giá trị theo chiều
dương cho đến khi nào bằng giá trị period sẽ đếm lại từ đầu, người ta
thường gọi trường hợp này là tràn bộ đếm. Có thể cấu hình để khi tràn bộ
đếm sẽ có ngắt xảy ra.
Cách cài đặt Timer:
• Đầu tiên chọn Tab Clock Configuration, thiết lập Sysclk như hình bên
dưới. Vì xung Clock của Timer 6 sẽ được cấp bởi bộ APB1 thế nên xung
Interal Clock có tần số là 90Mhz

• Sau đó chuyển qua Pinout & Configuration, trong Tab Timer chọn Timer
6. Trong mục mode tích vào active

• Áp dụng công thức tính ngắt cho Timer để cài đặt Prescaler và Counter
Period cho phù hợp.
• Tiếp theo chọn NVIC setting, tích vào TIM6 global interupt.. nếu muốn
sử dụng ngắt

Bài tập 2: Sử dụng Timer để viết chương trình chạy 2 LED 3 và LED 4
cùng lúc như nhau:
- LED 3 chớp tắt với chu kì 01 giây
- LED 4 chớp tắt với chu kì 750ms
Link Github: https://github.com/DongHung2510/CE224.N13.MTCL
File code nằm trong đường dẫn: LEDBlink/core/src
Trình bày:

- Sử dụng hàm HAL_TIM_Base_Start_IT đây là hàm cho phép bắt đầu


chạy TIM6, TIM7 đồng thời Enable ngắt tràn cho TIM6, TIM7 bất cứ khi
nào CNT của TIM6, TIM7 tăng quá giá trị cho phép nó sẽ được reset về
0 đồng thời tạo ra 1 ngắt tràn.
- Sử dụng hàm HAL_TIM_PeriodElapsedCallback để sử lý ngắt cho TIM6,
TIM7. Code trong hàm này sẽ được chạy khi có ngắt timer xảy ra.

- Dựa vào công thức để LED3 chớp tắt với chu kỳ 1s

- Vì sử dụng timer 6 và timer 7 nên Fhệ thống = 90Mhz = 90000000 Hz. Từ


công thức trên suy ra Prescaler = 8999. Tiếp theo sử dụng công thức

- Thế giá trị Prescaler = 8999 và Fhệ thống = 90000000 và Tevent = 1 từ công
thức trên suy ra Counter Period = 9999. Vì mỗi chu kỳ xung clock sẽ có
1 cạnh lên và một cạnh xuống mà ở đây mình chỉ xét lúc cạnh lên nên
giá trị Counter Perioid lúc này sẽ chia 2 = 4999.
- Tương tự áp dụng công thức tính cho timer 7 ta được Prescaler = 8999,
Counter Period = 3749

You might also like