You are on page 1of 12

HỆ THỐNG XUNG CLOCK TRÊN STM32F1

Trên STM32F103 có 2 bộ dao động thạch


anh ngoại :
• HSE (High Speed External): Bộ dạo
động ngoại tốc độ cao từ 4 -> 16MHz.
Bộ dao động cấp cho CPU hoạt động.
• LSE (Low Speed External): Bộ dao
động ngoại tốc độ thấp 32.768 KHz. Bộ
dao động này cấp cho bộ RTC có sẵn
trên chip.
• HSI (High Speed Internal): Bộ dao động
nội tốc độ cao 8 MHz. Bộ này sẽ dùng
cấp cho CPU trong trường hợp không
có bộ HSE.
• LSI (Low Speed Internal): Bộ này dùng
để cấp cho Watchdog Timer có tần số
40KHz
Ngọc Tuấn
TIMER TRÊN STM32
❖ Phân loại Timer trên họ STM32F1:
• Timer 1 và Timer 8: (Advance control timer) Đây là nhóm timer nâng cao với rất nhiều
chế độ hoạt động như: Định thời, PWM, Input capture, Output compare, Encoder…
• Timer 2 -> Timer 5: (General purpose timer) Đây là nhóm timer với mục đích chung
như: Định thời, PWM, Input capture, Output compare…nhưng ít chế độ hơn so với Timer 1
và Timer 8.
• Timer 9 -> Timer 14: : (General purpose timer) Đây là nhóm timer với mục đích chung
như: Định thời, PWM, Input capture, Output compare… nhưng ít chế độ hơn so với Timer 2
-> Timer 5.
• Timer 6, Timer 7 (Basic timer) : Chỉ có chức năng định thời.

❖ Đối với chip STM32F103C8T6 có tất cả 4 bộ Timer từ Timer 1 đến Timer 4:


• Timer 1: Advance – control timer.
• Timer 2, Timer 3, Timer 4: general purpose timer.

Ngọc Tuấn
TIMER BASE TRÊN STM32
Nguyên lí hoạt động của Timer trên STM32:
Timer là 1 bộ đếm độc lập so với CPU. Cứ sau 1 lượng thời gian t (thời gian này có thể lập
trình được) thì giá trị của thanh ghi CNT của Timer sẽ tăng lên 1 đơn vị. Khi giá trị đếm bằng với giá
trị trên thanh ghi ARR thì bộ đếm sẽ cuộn về 0 đồng thời chương trình sẽ sinh ra một ngắt cập nhật
(Timer Update Overflow) ).

7
ARR = 7 6
5
4
3
2
1
0
t
Sinh ra ngắt Update
CNT sẽ tăng lên 1
đơn vị sau 1 khoảng
thời gian t Ngọc Tuấn
TÍNH TOÁN TIMER
Prescaler: Đây là bộ chia tần số, giúp đưa một tần số lớn về một tần số nhỏ hơn.

Prescaler (PSC)
𝐹𝐶𝐾_𝑃𝑆𝐶 𝐹𝐶𝐾_𝑃𝑆𝐶
𝐹𝐶𝐾_𝐶𝑁𝑇 =
𝑃𝑆𝐶 + 1

72
𝑽í 𝒅ụ: 𝐹𝐶𝐾_𝑃𝑆𝐶 =72MHz, 𝑃𝑆𝐶 = 1 ⇒ 𝐹𝐶𝐾_𝐶𝑁𝑇 = =36MHz
1+1

Ngọc Tuấn
TÍNH TOÁN TIMER
Xác định thời gian t để thanh ghi CNT tăng lên 1 đơn vị:
Bước 1: Xác định tần số cấp vào bộ Timer.

𝐹𝑇𝑖𝑚𝑒𝑟 = APB1 Timer Clock hoặc APB2 Timer Clock (tra


datasheet xem timer đang dùng là cái nào)

Bước 2: Tính tần số 𝐹𝐶𝐾_𝐶𝑁𝑇

𝐹𝑇𝑖𝑚𝑒𝑟
𝐹𝐶𝐾_𝐶𝑁𝑇 = (Hz)
𝑃𝑆𝐶+1

Bước 3: Tính thời gian t để CNT tăng lên 1 đơn vị.


1 𝑃𝑆𝐶+1
t= = (s)
𝐹𝐶𝐾_𝐶𝑁𝑇 𝐹𝑇𝑖𝑚𝑒𝑟

𝑃𝑆𝐶+1
=> 𝑇𝑢𝑝𝑑𝑡𝑎𝑒 = *( ARR+1)
𝐹𝑇𝑖𝑚𝑒𝑟

Ngọc Tuấn
BÀI TẬP LUYỆN TẬP VỀ TIMER
Bài 1: Cấu hình Timer 1 giống như dưới đây, tính thời gian để xảy ra sự kiện ngắt update? Cho biết
clock hệ thống là 72MHz

Bài 2: Cấu hình Timer 2 giống như bên trên, tính thời gian để xảy ra sự kiện ngắt update? Cho
biết clock timer là 64MHz

Ngọc Tuấn
BÀI TẬP LUYỆN TẬP VỀ TIMER
Bài 3: Tính toán các thông số để tạo ngắt update cho timer 1 200ms ngắt 1 lần? Cho biết clock
timerlà 72MHz.
Bài 4: Tính toán các thông số để tạo ngắt update cho timer 2 200ms ngắt 1 lần? Cho biết clock
timer là 64MHz.

Ngọc Tuấn
CÁC HÀM LIÊN QUAN
HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
Chức năng: Khởi động bộ timer. Khi đếm bằng giá trị ARR thì sẽ sinh ra sự kiện ngắt.

HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim)
Chức năng: Dừng đếm Timer.

__HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__)
Chức năng: ghi giá trị vào thanh ghi CNT

__HAL_TIM_GET_COUNTER(__HANDLE__)
Chức năng: lấy giá trị vào thanh ghi CNT

__HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__)
Chức năng: đặt giá trị vào thanh ghi ARR

Ngọc Tuấn
TẠO HÀM DELAY SỬ DỤNG TIMER
void delay_us(uint16_t us)
{
/*cach 1*/ // __HAL_TIM_SetCounter(&htim1,0);
// __HAL_TIM_SetAutoreload(&htim1,65535);
// HAL_TIM_Base_Start(&htim1);
// while(__HAL_TIM_GetCounter(&htim1)<us);
// HAL_TIM_Base_Stop(&htim1); /*cach 2*/
__HAL_TIM_SetCounter(&htim1,0);
__HAL_TIM_SetAutoreload(&htim1,us);
__HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_UPDATE);
HAL_TIM_Base_Start_IT(&htim1);
while(!__HAL_TIM_GET_FLAG(&htim1,TIM_FLAG_UPDATE));
HAL_TIM_Base_Stop_IT(&htim1);
}

Ngọc Tuấn
CẢM BIẾN SIÊU ÂM HC – SR04

Thông số kĩ thuật:
Điện áp hoạt động: 5v.
Khoảng đo: 2 -> 400 cm

Cấu tạo chân


• Vcc: 4.5 – 5v
• Gnd: 0v.
• Trigger: chân kích hoạt quá trình phát
sóng siêu âm.
• Echo: chân phản hồi tín hiệu.
• OUT: không sử dụng

Ngọc Tuấn
GIAO TIẾP VỚI CẢM BIẾN SIÊU ÂM
Nguyên lí hoạt động:
Khi ta cấp 1 xung tối thiểu 10uS ở mức cao trên chân Trigger thì cảm
biến sẽ xuất ra 8 xung sóng siêu âm. Ngay sau đó chân Echo sẽ được
đưa lên mức cao đến khi nhận tín hiệu sóng phản xạ(hoặc quá quá thời
gian timeout )thì chân echo sẽ xuống mức thấp. Từ đó ta sẽ đo được
khoảng thời gian chân Echo ở mức cao sẽ suy ra khoảng cách.

T
S = v*t = v* = 340*100/10^6*( T/2) = 0.017*T (cm)
2
Trong đó:
+) S là khoảng cách từ cảm biến đến vật.
+) v là vận tốc âm thanh 340 (m/s) = 340*100/10^6 (cm/us)
+) T thời gian từ lúc phát sóng siêu âm đến lúc nhận được. Ngọc Tuấn
GIAO TIẾP VỚI CẢM BIẾN SIÊU ÂM

Ngọc Tuấn

You might also like