Networks Business Online Việt Nam & International VH2

Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt

Đăng ngày 07 November, 2022 bởi admin
Timer là một ngoại vi được ứng dụng rất nhiều trong lập trình nhúng, trong STM32 có khá nhiều Timer hầu hết là 16 bit và chúng hoàn toàn có thể thao tác một những độc lập với nhau
Trong bài này ta sẽ khám phá Timer STM32 được sử dụng như thế nào, lập trình Timer STM32 tinh chỉnh và điều khiển chớp tắt led không dùng delay
Bài 5 trong Serie Lập trình STM32 từ A tới Z

Timer là gì ?

Timer dịch đơn giản là người ghi giờ, bộ hẹn giờ.

Ví dụ khi bạn cần thức dậy sau 8 tiếng ngủ bạn sử dụng một bộ hẹn giờ, đếm ngược hoặc đếm xuôi đủ 8 tiếng, chuông sẽ kêu và bạn thức dậy .
Hoặc khi chạy 100 m người trọng tài chính là Timer để đo thời hạn bạn chạy hết 100 m đó .
Trong lập trình Timer là một khối độc lập, có tính năng tạo ra những sự kiện hoặc ngắt để kích hoạt những ngoại vi khác hoạt động giải trí, hoặc đo thời hạn hoạt động giải trí của 1 giá trị nguồn vào nào đó .
Trong STM32F103C8 có 4 bộ Timer trong đó :

  • Timer 1: Là bộ Advanced – control Timer hay là bộ Timer điều khiển nâng cao, có nhiều chức năng nhất
  • 3 bộ Timer chung là Timer 2,3,4 Có chức năng tương tự nhau và độc lập với nhau

Trong bài này tất cả chúng ta sẽ thao tác với Timer 2, những công dụng đều tựa như với những Timer khác

Các tính năng chính của Timer STM32

Các tính năng chính của Timer STM32 gồm có :
– Thanh ghi 16 bit đếm lên, xuống, lên / xuống tự nạp lại
– 16 bit bộ chia tần số để chia tần số từ APB ( giá trị xê dịch từ 1 – 65536 )
– 4 Kênh độc lập mỗi Timer cho những công dụng :
+ Input Capture
+ Output Compare
+ One Pulse
– Đồng bộ hóa với những mạch tạo tín hiệu bên ngoài để phối hợp nhiều bộ Timer với nhau
– Ngăt / DMA được sinh ra khi có những sự kiện :
+ Cập nhật : tràn Counter, khởi tạo Counter ( bởi ứng dụng hoặc kích hoạt inernal / external trigger )
+ Sự kiện kích hoạt ( Bắt đầu đêm, dừng đếm, khởi tạo bộ đếm hoặc đếm bởi inernal / external trigger )
+ Input Capture : Bắt xung đầu vào
+ Output Compare : So sánh xung đầu ra
– Hỗ trợ tinh chỉnh và điều khiển Encoder và Hall-sensor
– Đầu vào kích hoạt cho đồng hồ đeo tay bên ngoài hoặc quản trị theo chu kì
Chi tiết những bạn tìm hiểu thêm mục 15.2 trong Reference Manual
H1 2Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 50
Trong bài này tất cả chúng ta sẽ thông số kỹ thuật Timer 2 chính sách Time-base unit .
Mô tả tính năng này như sau :
– Chế độ Timer-Base unit là chính sách chính của Timer gồm có những chính sách đếm : lên, xuống hoặc cả lên lên và xuống
– Xung Clock được chia bởi bộ chia tần Prescaler để lấy thời hạn thích hợp đếm 1 lần
– Các thanh ghi quản trị gồm có :
+ Counter Register ( TIMx_CNT ) : lưu giá trị đếm
+ Prescaler Register ( TIMx_PSC ) : lưu giá trị chia từ tần số cơ sở cấp cho Timer để tạo ra tần số thích hợp
+ Auto-Reload Registor ( TIMx_ARR ) : lưu giá trị đích đếm lên hoặc đếm xuống
– Thanh ghi Auto-Reload sẽ được nạp trước khi Timer hoạt động giải trí, và hoàn toàn có thể nạp trong khi Timer hoạt động giải trí, trước khi một sự kiện update sảy ra ( UEV ) .
– Chế độ đếm sẽ được hoạt động giải trí khi Bit CEN của thanh ghi TIMx_CR1 được bật
Chi tiết những bạn tham khải mục 15.3.1
H2 3Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 51
Nhìn vào miêu tả này tất cả chúng ta hoàn toàn có thể viết ra những bước để Timer hoạt động giải trí như sau :

  1. Khởi tạo bộ Timer 1 với xung Clock thích hợp(Tất cả các ngoại vi đều phải có bước này)
  2. Ghi giá trị cho bộ chia tần Prescaler
  3. Ghi giá trị cho thanh ghi Auto-reload
  4. Bật Timer cho hoạt động
  5. Xử lý các sự kiện sảy ra như tràn ….

Các bước cơ bản là vậy, sau đây mình sẽ hướng dẫn các bạn cấu hình trên CubeMX

Cấu hình Timer STM32 chính sách Time Base

Đề bài của tất cả chúng ta như sau : Sử dụng TimerSTM32 đơn cử là Timer 2 nhấp nháy led mỗi 500 ms một lần .
Các bạn mở ứng dụng, chọn chip STM32F103C8, thông số kỹ thuật SYS debug : Serial Wire .
Chuyển qua Tab Clock Configuration, tất cả chúng ta chọn Thạch Anh nội 8M hz. Vì xung Clock của Timer 2 sẽ được cấp bởi bộ APB1 thế nên xung Interal Clock có tần số là 8M hz
H3 2Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 52
Chi tiết về cách thông số kỹ thuật Clock những bạn xem Bảng 1 Mục 3.1
H4 1Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 53
Trong Tab Timer những bạn chon Timer 2. Clock Source chon Internal Clock .
Trong bảng Parameter Settings :
Chọn Prescale là 8000 sẽ đếm mỗi 1 ms vì 8MH z / 8000 = 1 khz => T = 1 ms
Counter Mode : Up down đều được
Counter Period : 499, đếm từ 0 đến 499 là 500 lần 1 ms ta sẽ được 500 ms
Auto-preload : Enable
Các thông số kỹ thuật còn lại giữ nguyên
H5 2Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 54
Chọn PC13 là LED output
H6 2Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 55
Trong NVIC tick vào Tim2 global Interupts để bật ngắt cho Timer 2
H7 3Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 56
Sau đó dặt tên Project – chọn tool MDK-ARM V5 và ấn Gen Code
H8 2Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 57

Lập trình Timer STM32 chớp tắt led

Mở Project – Nhấn Build ( F7 )
Trong phần stm32f1xx_it. c đã có hàm thực thi ngắt Timer2, những bạn nhấn chuột phải chọn Go to Define hàm HAL_TIM_IRQHandler ( và htim2 ) ;
H9 2Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 58
Tại đây những bạn nhấn CtrF Tìm từ update nhấn Find Next sẽ tìm thấy, phần giải quyết và xử lý ngắt Update Event .
Chọn File HAL_TIM_PeriodElapsedCallback ( htim ) ; nhận chuột phải Go to Define để tìm thấy nơi viết hàm đó .
Đây là hàm gọi về khi có sự kiện ngắt Update xảy ra
H10 2Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 59
Coppy hàm đó dán vào khu tiền giải quyết và xử lý trên hàm main ( ) trong main. c nhớ bỏ __weak nhé .
Sau đó trong hàm này tất cả chúng ta viết thêm hàm hòn đảo trạng thái led như sau :
H11 2Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 60
Trước while ( 1 ) ta khởi chạy Timer với ngắt bằng câu lệnh sau
H12 1Bài 5: Lập trình Timer STM32 chớp tắt Led dùng ngắt 61
Sau đó Build và Nạp chương trình và xem hiệu quả
Kết
Timer là một ngoại vi không hề thiếu trong việc lập trình nhúng. Timer STM32 ngoài được sử dụng trong việc hẹn giờ, chúng còn được sử dụng đo đếm thời hạn của những xung, tạo ra những xung có tần số khác nhau mà bài sau tất cả chúng ta sẽ đề cập .

5/5 – ( 4 bầu chọn )

Source: https://vh2.com.vn
Category : Tin Học