You are on page 1of 16

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG ĐIỆN – ĐIỆN TỬ


---o0o---

BÁO CÁO THỰC TẬP KỸ THUẬT

ĐỀ TÀI: XÂY DỰNG THƯ VIỆN GIAO TIẾP MÀN HÌNH LCD

Người hướng dẫn : Anh Nguyễn Tràng Trung

Anh Nguyễn Huy Hoàng

Sinh viên thực hiện : Phạm Văn Sỹ 20193088

Dương Đức Huy 20203821

Phạm Trung Hiếu 20207560

Hồ Đức Nam 20203515

Hà Nội, tháng 9 năm 2023

1
2
MỤC LỤC
LỜI MỞ ĐẦU ........................................................................................................................................... 1
CHƯƠNG I. TỔNG QUAN VỀ ĐỀ TÀI....................................................................................................... 3
1.1 Mục tiêu đề tài .............................................................................................................................. 3
1.2 Cơ sở thực hiện đề tài ................................................................................................................... 3
1.3 Tài nguyên, kiến thức sử dụng trong đề tài .................................................................................. 4
CHƯƠNG II. BỘ KIT STM32 (NUCLEO-F401RE) ...................................................................................... 5
CHƯƠNG III. NGOẠI VI SPI ..................................................................................................................... 7
3.1. Tổng quan về ngoại vi SPI ............................................................................................................ 7
3.2. Tổng quan về cách thức hoạt động của SPI ................................................................................. 7
3.3. Ưu và nhược điểm của SPI ........................................................................................................... 8
CHƯƠNG IV. DỰ ÁN ............................................................................................................................... 9
4.1 Tiến hành xây dựng dự án ............................................................................................................ 9
4.2 Kết quả dự án .............................................................................................................................. 10
4.3. Code ........................................................................................................................................... 11
KẾT LUẬN .............................................................................................................................................. 12
TÀI LIỆU THAM KHẢO ........................................................................................................................... 13

3
LỜI MỞ ĐẦU

Màn hình LCD (Liquid Crystal Display) đã trở thành một phần quan trọng không
thể thiếu trong cuộc sống hàng ngày của chúng ta. Chúng xuất hiện trên các thiết bị
điện tử, từ điện thoại di động, máy tính xách tay, đến đồ điện gia dụng và thiết bị y tế.
Tính linh hoạt và khả năng hiển thị hình ảnh và văn bản một cách rõ ràng của màn hình
LCD đã làm cho chúng trở thành công cụ quan trọng cho việc hiển thị thông tin và
tương tác người-máy.

Trong bối cảnh này, việc xây dựng một thư viện giao tiếp màn hình LCD đáng
tin cậy và hiệu quả là một nhiệm vụ quan trọng trong lĩnh vực kỹ thuật điện tử và lập
trình nhúng. Thư viện này không chỉ giúp giảm bớt thời gian và công sức khi phát triển
các ứng dụng sử dụng màn hình LCD, mà còn đóng góp vào việc tối ưu hóa tài nguyên
và nâng cao hiệu suất của các thiết bị điện tử.

Báo cáo này sẽ trình bày tổng quan đề tài, phát triển, và thử nghiệm thư viện
giao tiếp màn hình LCD, và tìm hiểu về ngoại vi SPI, cùng với các giải pháp được áp
dụng để tạo ra một sản phẩm hoàn thiện. Chúng tôi sẽ trình bày về kiến thức cơ bản
về LCD, các giao thức giao tiếp, cũng như các công cụ và tài liệu tham khảo đã sử dụng
trong quá trình nghiên cứu.

Chúng tôi hy vọng rằng báo cáo này sẽ cung cấp cho độc giả cái nhìn rõ hơn về
quá trình xây dựng thư viện giao tiếp màn hình LCD và đóng góp vào sự hiểu biết về
vai trò quan trọng của công nghệ này trong thế giới hiện đại.

1
2
CHƯƠNG I. TỔNG QUAN VỀ ĐỀ TÀI

1.1 Mục tiêu đề tài


Làm quen với lập trình nhúng, hiểu được các nguyên lý kiến thức cơ bản. Biết
cách giao tiếp với cảm biến với ngoại vi SPI của STM32F401, chia và vận dụng các hàm
con (Functions).

Lập trình tạo ra một thư viện giao tiếp với LCD và thay đổi được font chữ (30
font chữ) và vẽ hình mặc định lên màn hình. Thông qua dự án, học được cách lập trình
trên vi điều khiển, cụ thể là STM32, và các ứng dụng của nó.

1.2 Cơ sở thực hiện đề tài


Vi điều khiển STM32: là 1 dòng sản phẩm của STMicroelectronics, là các vi điều
khiển nhúng dựa trên ARM Cortex-M. STM32 rất phổ biến và được sử dụng rộng rãi
trong các ứng dụng điện tử, nhúng và IOT. Một số điểm quan trọng về STM32:

- Kiến trúc ARM Cortex-M


- Nhiều loại dòng và sản phẩm
- Hệ sinh thái lớn
- Bảo mật tích hợp
- Tiết kiệm năng lượng
- Bộ nhớ đa dạng
- Led RGB dễ sử dụng và phổ biến, tra cứu tài liệu hướng dẫn dễ dàng.
- Các loại cảm biến: ánh sáng, độ ẩm, nhiệt độ. Đây là những cảm biến có thể dễ
dàng tìm thấy trên thị trường với da dạng phân khúc giá và cách sử dụng được
hướng dẫn chi tiết.
- Kiến thức lập trình: sử dụng ngôn ngữ lập trình C, một ngôn ngữ lập trình cấp
trung và đã được làm quen trong chuyên ngành.
- Ứng dụng: STM32cubeide có giao diện dễ sử dụng hỗ trợ ngôn ngữ lập trình C,
hỗ trợ Debug và chạy trên kit STM32f401RE-NUCLEO

3
1.3 Tài nguyên, kiến thức sử dụng trong đề tài
- Sử dụng môi trường phát triển phần mềm (IDE) thích hợp là STM32CubeIDE để
viết mã điều khiển cho STM32.
- KIT STM32F401RE – NUCLEO
- Thư viện SDK (SDK_1.0.3_NUCLEO-F401RE)

4
CHƯƠNG II. BỘ KIT STM32 (NUCLEO-F401RE)

Bộ kit STM32 NUCLEO-F401RE là một trong những sản phẩm phổ biến trong
dòng sản phẩm NUCLEO của STMicroelectronics. Bộ kit này được thiết kế để giúp bạn
dễ dàng phát triển ứng dụng nhúng sử dụng các vi điều khiển STM32, đặc biệt là vi
điều khiển dòng F4.

Dưới đây là một số thông tin tổng quan về bộ kit STM32 NUCLEO-F401RE:

1. Vi điều khiển STM32F401RE: Bộ kit này đi kèm với một vi điều khiển STM32F401RE,
thuộc dòng F4 của STM32. Vi điều khiển này có lõi ARM Cortex-M4, tốc độ xử lý cao
và nhiều tính năng mạnh mẽ.

2. Chức năng nạp và giao tiếp: NUCLEO-F401RE có một giao diện ST-LINK/V2-1 tích
hợp, cho phép bạn nạp chương trình và giao tiếp với vi điều khiển thông qua USB. Bạn
cũng có thể sử dụng các chân giao tiếp ngoại vi như UART, SPI, I2C để kết nối với các
thiết bị ngoại vi khác.

3. Thiết kế hệ thống: Bộ kit này có một nút nhấn và một LED tích hợp để giúp bạn kiểm
tra và điều khiển các chức năng cơ bản của vi điều khiển. Bạn cũng có thể mở rộng các
tính năng bằng cách sử dụng các chân ngoại vi và gắn thêm các module mở rộng thông
qua giao tiếp GPIO.

4. Hỗ trợ cho môi trường phát triển: STMicroelectronics cung cấp hỗ trợ phần mềm
bằng cách sử dụng môi trường phát triển tích hợp (IDE) như STM32CubeIDE hoặc các
IDE phổ biến khác như Keil hoặc IAR. Bạn có thể viết mã ứng dụng bằng các ngôn ngữ
lập trình như C/C++ và sử dụng các thư viện HAL (Hardware Abstraction Layer) để truy
cập các tính năng của vi điều khiển.

5. Hỗ trợ cho các giao tiếp và tính năng nâng cao: NUCLEO-F401RE hỗ trợ nhiều giao
tiếp như UART, SPI, I2C, GPIO, và còn nhiều tính năng nâng cao khác như PWM, DMA,
và các tính năng bảo mật.

5
Bộ kit STM32 NUCLEO-F401RE rất phù hợp để bạn bắt đầu phát triển các ứng dụng
nhúng, học tập và thử nghiệm các tính năng của vi điều khiển STM32. Điều này giúp
bạn có cơ hội thực hành và tìm hiểu về công nghệ nhúng và phát triển sản phẩm dựa
trên vi điều khiển STM32.

6
CHƯƠNG III. NGOẠI VI SPI

3.1. Tổng quan về ngoại vi SPI


SPI (Giao diện ngoại vi nối tiếp) là một giao thức truyền thông kết nối điểm-
điểm tiếp theo được sử dụng để kết nối các thiết bị ngoại vi với điều khiển. SPI sử dụng
4 dây tín hiệu để truyền dữ liệu, bao gồm:

 SCK: Đồng hồ tín hiệu


 MOSI: Dữ liệu tín hiệu từ vi điều khiển sang thiết bị ngoại vi
 MISO: Dữ liệu tín hiệu từ thiết bị ngoại vi sang vi điều khiển
 SS: Thiết bị chọn tín hiệu

SPI là một giao thức truyền thông tốc độ cao, có tốc độ đạt tới hàng trăm
megabit mỗi giây. SPI thường được sử dụng để kết nối các thiết bị ngoại vi như màn
hình LCD, cảm biến, flash bộ nhớ,...

3.2. Tổng quan về cách thức hoạt động của SPI


SPI hoạt động theo cách thức sau:

Vi điều khiển tạo ra xung đồng hồ trên đường SCK.

Vi điều khiển gửi dữ liệu ra đường MOSI.

Thiết bị ngoại vi nhận dữ liệu từ đường MISO.

Thiết bị ngoại vi có thể gửi dữ liệu ngược lại vi điều khiển bằng cách bật tín hiệu SS.

Các chế độ truyền dữ liệu của SPI

SPI hỗ trợ 4 chế độ truyền dữ liệu, bao gồm:

7
Chế độ 0: Dữ liệu được truyền từ vi điều khiển sang thiết bị ngoại vi trên đường MOSI
trong chu kỳ đồng hồ đầu tiên và từ thiết bị ngoại vi sang vi điều khiển trên đường
MISO trong chu kỳ đồng hồ thứ hai.

Chế độ 1: Dữ liệu được truyền từ vi điều khiển sang thiết bị ngoại vi trên đường MOSI
trong chu kỳ đồng hồ thứ nhất và từ thiết bị ngoại vi sang vi điều khiển trên đường
MISO trong chu kỳ đồng hồ đầu tiên.

Chế độ 2: Dữ liệu được truyền từ vi điều khiển sang thiết bị ngoại vi trên đường MOSI
trong chu kỳ đồng hồ chẵn và từ thiết bị ngoại vi sang vi điều khiển trên đường MISO
trong chu kỳ đồng hồ lẻ.

Chế độ 3: Dữ liệu được truyền từ vi điều khiển sang thiết bị ngoại vi trên đường MOSI
trong chu kỳ đồng hồ lẻ và từ thiết bị ngoại vi sang vi điều khiển trên đường MISO
trong chu kỳ đồng hồ chẵn.

3.3. Ưu và nhược điểm của SPI


Ưu điểm:
 Tốc độ truyền dữ liệu cao
 Có thể kết nối nhiều thiết bị ngoại vi cùng lúc
 Dễ dàng sử dụng
Nhược điểm:
 Yêu cầu 4 dây tín hiệu
 Có thể gây nhiễu cho các thiết bị xung quanh

8
CHƯƠNG IV. DỰ ÁN

4.1 Tiến hành xây dựng dự án


- Bước 1: Lên ý tưởng, xây dựng mô hình và các thuật toán sử dụng

- Bước 2: Tạo một project và thêm các đường dẫn đến thư mục cần thiết trong thư
viện SDK_1.0.3_NUCLEO-F401RE như các bài Lab đã thực hành.

- Bước 3: Thêm các thư viện cần thiết về ngoại vi GPIO, SPI, TIMER vào project.

- Bước 4: Xây dựng các hàm khởi tạo ngoại vi GPIO, SPI và TIMER của vi điều khiển
STM32F401.

- Bước 5: Khai báo và định nghĩa kiểu dữ liệu và biến toàn cục

 Một số loại dữ liệu được định nghĩa để mô tả trạng thái và sự kiện của ứng
dụng.
 Các biến toàn cục được khai báo để lưu trữ trạng thái thông tin, thời gian, sự
kiện và các thông tin khác cần thiết cho ứng dụng.

- Bước 6: Khai báo mảng font

 Một mảng chứa các font được định nghĩa bằng cách sử dụng Ucglib.

- Bước 7: Khởi tạo ứng dụng (AppInitCommon)

 Cài đặt hệ thống và các thành phần cơ bản cho ứng dụng, bao gồm đồng bộ hệ
thống, bộ hẹn giờ, quản lý sự kiện và các cài đặt ban đầu khác.

- Bước 8: Xây dựng hàm LoadConfiguration

 Thiết lập môi trường cho màn hình hiển thị và font ban đầu

- Bước 9: Xây dựng hàm AppStateManager

9
 Quản lý trạng thái của ứng dụng và xử lý các sự kiện tương ứng với trạng thái
đó

- Bước 10: Xây dựng hàm DeviceStateMachine

 Quản lý trạng thái của thiết bị và xử lý các sự kiện từ nút nhấn.


 Khi nút B3 được nhấn, ứng dụng có thể chuyển đổi giữa phông chữ thay đổi chế
độ đổi font và chế độ hiển thị thông tin.
 Trong chế độ đổi phông chữ, nút B1 và B5 được sử dụng để thay đổi font hiển
thị.

- Bước 11: Cập nhật màn hình (Task_Screen_Update)

 Hàm này được gọi định kỳ để cập nhật nội dung trên màn hình.
 Nó cập nhật thông tin về font chữ hiện tại

- Bước 12: Hàm main

 Hàm chính của chương trình, nơi chạy vòng lặp chính.
 Nó quản lý việc xử lý sự kiện và cập nhật màn hình.

- Bước 13: Hàm cancleTimer và Screen_Scan

 Hàm “cancleTimer” dùng để hủy bỏ các timer nếu cần.


 Hàm “Screen_Scan” dùng để quét và cập nhật màn hình định kỳ.

- Bước 14: Hàm setup

 Hàm này cài đặt ban đầu cho màn hình hiển thị, bao gồm vẽ hình ảnh của ngôi
nhà và xe tải

4.2 Kết quả dự án


Link demo dự án

10
4.3. Code
Dự án

Thư viện SDK_1.0.3_NUCLEO-F401RE

11
KẾT LUẬN

Trong báo cáo này, chúng ta đã tìm hiểu về quá trình xây dựng thư viện giao
tiếp màn hình LCD, một phần quan trọng trong việc điều khiển và hiển thị thông tin
trên các màn hình LCD trong các ứng dụng như điều khiển máy tính, thiết bị IoT, và
nhiều lĩnh vực công nghiệp khác.

Chúng ta đã tìm hiểu vào các khía cạnh quan trọng của việc xây dựng thư viện
giao tiếp màn hình LCD, bao gồm việc hiểu cách hoạt động của STM32, cách thức giao
tiếp như SPI cũng như việc lập trình các chức năng cơ bản để điều khiển hiển thị trên
màn hình LCD.

Nhóm chúng em đã cố gắng vận dụng những kiến thức được học trên trường,
trên công ty cũng như các tài liệu tham khảo bên ngoài để hoàn thành đề tài này. Sản
phẩm đã chạy và đã có những thành công bước đầu.Tuy nhiên, do vốn kiến thức và
kinh nghiệm hạn chế nên không tránh khỏi những thiếu sót.

Chúng em xin chân thành cảm ơn Công ty Cổ Phần Lumi Việt Nam, quý thầy cô
và các anh chị đã hướng dẫn chúng em làm đề tài này trong suốt thời gian vừa qua.
Chúng em rất hi vọng được lắng nghe những góp ý từ công ty, thầy cô, các anh chị và
các bạn để hoàn thiện hơn.

12
TÀI LIỆU THAM KHẢO

[1] DevIoT, “Blog kỹ thuật lập trình nhúng”.

[2] Các nguồn tài liệu của công ty CP Lumi Việt Nam.

[3] Tài liệu lập trình C++.

13

You might also like