- Vật liệu thiết yếu
- Sơ đồ mạch và kết nối
- Lập trình STM32 cho LCD bằng Arduino
- Tải chương trình lên STM32F103C8T6
Đối với bất kỳ dự án vi điều khiển nào, việc giao tiếp một đơn vị hiển thị với nó sẽ làm cho dự án dễ dàng và hấp dẫn hơn rất nhiều cho người dùng tương tác. Đơn vị hiển thị được sử dụng phổ biến nhất cho vi điều khiển là các màn hình số Alpha 16 × 2. Những loại màn hình này không chỉ hữu ích để hiển thị thông tin quan trọng cho người dùng mà còn có thể hoạt động như một công cụ gỡ lỗi trong giai đoạn phát triển ban đầu của dự án. Vì vậy, trong hướng dẫn này, chúng ta sẽ tìm hiểu cách chúng ta có thể giao tiếp màn hình LCD 16 × 2 với bảng STM32F103C8T6 STM32 Development và lập trình nó bằng Arduino IDE. Đối với những người đã quen với Arduino, hướng dẫn này sẽ chỉ là một bước dạo đầu vì cả hai đều rất giống nhau. Ngoài ra, để tìm hiểu thêm về STM32 Blue Pill Board, hãy làm theo hướng dẫn bắt đầu của chúng tôi.
Vật liệu thiết yếu
- Ban phát triển thuốc xanh STM32
- Màn hình LCD 16 × 2
- Lập trình viên FTDI
- Kết nối dây
- LCD
Giới thiệu ngắn gọn về màn hình LCD ma trận điểm 16 × 2
Như đã nói trước đó, Energia IDE cung cấp một thư viện tuyệt đẹp giúp giao diện trở thành một miếng bánh và do đó không bắt buộc phải biết bất kỳ điều gì về mô-đun hiển thị. Nhưng, sẽ không thú vị khi hiển thị những gì chúng tôi đang sử dụng !!
Tên 16 × 2 ngụ ý rằng màn hình có 16 Cột và 2 Hàng, cùng nhau (16 * 2) tạo thành 32 hộp. Một hộp duy nhất sẽ trông giống như thế này trong hình dưới đây
Một hộp đơn có 40 pixel (chấm) với thứ tự ma trận gồm 5 Hàng và 8 cột, 40 pixel này cùng nhau tạo thành một ký tự. Tương tự, 32 ký tự có thể được hiển thị bằng cách sử dụng tất cả các hộp. Bây giờ chúng ta hãy nhìn vào sơ đồ chân.
Màn hình LCD có tổng cộng 16 Chân, như hình trên, chúng có thể được phân loại thành bốn nhóm như sau
Các chân nguồn (1, 2 và 3): Các chân này cấp nguồn và mức độ tương phản cho màn hình
Các chân điều khiển (4, 5 và 6): Các chân này đặt / điều khiển các thanh ghi trong IC giao tiếp LCD (có thể tìm thêm thông tin này trong liên kết bên dưới)
Các chân dữ liệu / lệnh (7 đến 14): Các chân này cung cấp dữ liệu về thông tin nào sẽ được hiển thị trên màn hình LCD.
Chân LED (15 và 16): Các chân này được sử dụng để phát sáng đèn nền của LCD nếu cần (tùy chọn).
Trong số tất cả 16 chân này, chỉ có 10 chân được sử dụng bắt buộc để màn hình LCD hoạt động bình thường nếu bạn muốn biết thêm về các màn hình LCD này, hãy chuyển đến bài viết LCD 16x2 này.
Sơ đồ mạch và kết nối
Sơ đồ mạch giao diện LCD ma trận 16 * 2 với bảng STM32F103C8T6 STM32 Blue Pill được hiển thị bên dưới. Nó được thực hiện bằng Phần mềm Fritzing.
Như bạn có thể thấy kết nối hoàn chỉnh được thực hiện trên breadboard. Chúng ta cần một bo mạch FTDI để lập trình Vi điều khiển STM32. Vì vậy, tương tự như hướng dẫn trước của chúng tôi, chúng tôi đã đấu dây bảng FTDI với STM32, chân Vcc và chân nối đất của bộ lập trình FDTI được kết nối tương ứng với chân 5V và chân nối đất của STM32. Điều này được sử dụng để cấp nguồn cho bảng STM32 và màn hình LCD vì cả hai đều có thể chấp nhận có thể + 5V. Chân Rx và Tx của bo mạch FTDI được kết nối với chân A9 và A10 của STM32 để chúng ta có thể lập trình bo mạch trực tiếp mà không cần bộ nạp khởi động.
Tiếp theo, màn hình LCD phải được kết nối với bảng STM32. Chúng ta sẽ sử dụng màn hình LCD ở chế độ 4 bit, vì vậy chúng ta phải kết nối 4 chân bit dữ liệu (DB4 với DB7) và hai chân điều khiển (RS và EN) với bảng STM32 như được hiển thị trong mạch giao diện LCD STM32F103C8T6 sơ đồ trên. Hơn nữa, bảng dưới đây sẽ giúp bạn thực hiện kết nối.
Số chân LCD |
Tên pin LCD |
Tên pin STM32 |
1 |
Mặt đất (Gnd) |
Mặt đất (G) |
2 |
VCC |
5V |
3 |
VEE |
Mặt đất (G) |
4 |
Đăng ký Chọn (RS) |
PB11 |
5 |
Đọc / Ghi (RW) |
Mặt đất (G) |
6 |
Bật (EN) |
PB10 |
7 |
Bit dữ liệu 0 (DB0) |
Không có kết nối (NC) |
số 8 |
Bit dữ liệu 1 (DB1) |
Không có kết nối (NC) |
9 |
Bit dữ liệu 2 (DB2) |
Không có kết nối (NC) |
10 |
Bit dữ liệu 3 (DB3) |
Không có kết nối (NC) |
11 |
Bit dữ liệu 4 (DB4) |
PB0 |
12 |
Bit dữ liệu 5 (DB5) |
PB1 |
13 |
Bit dữ liệu 6 (DB6) |
PC13 |
14 |
Bit dữ liệu 7 (DB7) |
PC14 |
15 |
LED tích cực |
5V |
16 |
LED âm bản |
Mặt đất (G) |
Sau khi kết nối xong, chúng ta có thể mở Arduino IDE và bắt đầu lập trình nó.
Lập trình STM32 cho LCD bằng Arduino
Như đã nói trong hướng dẫn này, chúng tôi sẽ sử dụng Arduino IDE để lập trình Vi điều khiển STM32 của chúng tôi. Tuy nhiên, Arduino IDE theo mặc định sẽ không được cài đặt bảng STM32, do đó chúng ta phải tải xuống một gói và chuẩn bị Arduino IDE cho cùng. Đây chính xác là những gì chúng tôi đã làm trong hướng dẫn trước đây để bắt đầu với STM32F103C8T6 bằng Arduino IDE. Vì vậy, nếu bạn chưa cài đặt các gói yêu cầu, hãy quay lại hướng dẫn này và làm theo nó trước khi bạn tiếp tục ở đây.
Khi Board STM32 được cài đặt trong Arduino IDE, chúng ta có thể bắt đầu lập trình. Chương trình rất giống với bảng Arduino, điều duy nhất sẽ thay đổi là tên pin vì các ký hiệu khác nhau đối với STM32 và Arduino. Chương trình hoàn chỉnh được đưa ra ở cuối trang này, nhưng để giải thích chương trình, tôi đã chia nó thành các đoạn nhỏ có ý nghĩa như hình dưới đây.
Một lợi thế đáng chú ý của việc sử dụng Arduino để lập trình vi điều khiển của chúng tôi là Arduino có các thư viện được tạo sẵn cho hầu hết các cảm biến và bộ truyền động nổi tiếng. Vì vậy, ở đây chúng ta bắt đầu chương trình của mình bằng cách bao gồm thư viện LCD giúp việc lập trình dễ dàng hơn rất nhiều.
#include
Trong dòng tiếp theo, chúng ta phải chỉ định chân GPIO nào của STM32 mà chúng ta đã kết nối điều khiển màn hình LCD và các đường dữ liệu. Để làm điều này, chúng tôi phải kiểm tra phần cứng của mình, để dễ dàng, bạn cũng có thể tham khảo bảng ở trên cùng liệt kê tên chân của LCD so với chân GPIO của STM32. Sau khi đề cập đến các chân, chúng ta có thể khởi tạo màn hình LCD bằng chức năng LiquidCrystal . Chúng tôi cũng đặt tên cho màn hình LCD của chúng tôi là “ lcd ” như hình dưới đây.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // đề cập đến các tên pin với LCD được kết nối với LiquidCrystal lcd (rs, en, d4, d5, d6, d7); // Khởi tạo màn hình LCD
Tiếp theo chúng ta bước vào bên trong chức năng thiết lập . Ở đây đầu tiên chúng tôi đề cập đến loại LCD mà chúng tôi đang sử dụng. Vì nó là màn hình LCD 16 * 2 nên chúng tôi sử dụng dòng lcd.begin (16,2). Mã bên trong hàm thiết lập void chỉ được thực thi một lần. Vì vậy, chúng tôi sử dụng nó để hiển thị văn bản giới thiệu xuất hiện trên màn hình trong 2 giây và sau đó bị xóa. Để đề cập đến vị trí mà văn bản phải xuất hiện, chúng ta sử dụng hàm lcd.setcursor và để in văn bản, chúng ta sử dụng hàm lcd.print . Ví dụ: lcd.setCursor (0,0) sẽ đặt con trỏ ở hàng đầu tiên và cột đầu tiên nơi chúng ta in “ Interfacing LCD ” và hàm lcd.setCursor (0,1) di chuyển con trỏ đến cột đầu tiên hàng thứ hai, nơi chúng tôi in dòng “ CircuitDigest ”.
void setup () {lcd.begin (16, 2); // Chúng tôi đang sử dụng màn hình LCD 16 * 2 lcd.setCursor (0, 0); // Tại hàng đầu tiên cột đầu tiên lcd.print ("Giao diện LCD"); // In this lcd.setCursor (0, 1); // Tại dòng thứ nhất, cột đầu tiên lcd.print ("- CircuitDigest"); // In ra delay này (2000); // đợi hai giây lcd.clear (); // Xóa màn hình}
Sau khi hiển thị văn bản giới thiệu, chúng tôi giữ chương trình trong 2 giây bằng cách tạo độ trễ để người dùng có thể đọc thông báo giới thiệu. Độ trễ này được tạo ra bởi độ trễ dòng (2000) trong đó 2000 là giá trị độ trễ tính bằng mili giây. Sau độ trễ, chúng tôi xóa màn hình LCD bằng cách sử dụng hàm lcd.clear () để xóa màn hình LCD bằng cách xóa tất cả văn bản trên màn hình LCD.
Cuối cùng bên trong vòng lặp void, chúng tôi hiển thị “STM32 –Blue Pill” trên dòng đầu tiên và giá trị của giây trên dòng thứ hai. Giá trị của giây có thể được lấy từ hàm millis () . Các millis () là một bộ đếm thời gian mà được incrementing ngay từ thời điểm MCU được cung cấp. Giá trị có dạng mili giây vì vậy chúng tôi chia nó cho 1000 trước khi hiển thị trên màn hình LCD.
void loop () { lcd.setCursor (0, 0); // Tại hàng đầu tiên cột đầu tiên lcd.print ("STM32 -Blue Pill"); // In this lcd.setCursor (0, 1); // Tại dòng thứ nhất, cột đầu tiên lcd.print (millis () / 1000); // In giá trị của secounds }
Tải chương trình lên STM32F103C8T6
Như đã thảo luận trong đoạn trên, bạn sẽ có thể nhận thấy kết quả đầu ra ngay sau khi mã được tải lên. Nhưng chương trình này sẽ không hoạt động vào lần tiếp theo khi bạn cấp nguồn cho bo mạch, vì bo mạch vẫn đang ở chế độ lập trình. Vì vậy, khi chương trình được tải lên, jumper khi khởi động 0 sẽ được thay đổi trở lại vị trí 0 như hình dưới đây. Ngoài ra, vì chương trình đã được tải lên bảng STM32 nên chúng tôi không cần bảng FTDI và toàn bộ thiết lập có thể được cấp nguồn bằng cổng micro-USB của bảng STM32 như hình dưới đây.
Đây chỉ là một dự án giao diện đơn giản để giúp sử dụng màn hình LCD với bảng STM32, nhưng xa hơn nữa, bạn có thể sử dụng nó để xây dựng các dự án thú vị. Hy vọng bạn đã hiểu hướng dẫn và học được điều gì đó hữu ích từ nó. Nếu bạn gặp bất kỳ vấn đề nào trong quá trình làm việc, vui lòng sử dụng phần bình luận để đăng vấn đề hoặc sử dụng diễn đàn cho các câu hỏi kỹ thuật khác. Hoạt động hoàn chỉnh của màn hình LCD với STM32 cũng có thể được tìm thấy dưới dạng video dưới đây.