HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
KHOA ĐIỆN TỬ 1
MÔN HỌC ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG
Đề tài: Máy tính bỏ túi sử dụng STM32F1
Giảng viên hướng dẫn:
Nguyễn Ngọc Minh
Nhóm tín chỉ:
02
Nhóm bài tập lớn:
17
Sinh viên thực hiện:
Lê Việt Bắc
B18DCDT020
Đặng Hà Phong
B18DCDT268
Hà Nội – 2022
MỤC LỤC
LỜI NÓI ĐẦU
4
Chương 1: Giới thiệu
5
1.
Lý do chọn đề tài
5
2.
Tìm hiểu STM32F103C8T6
5
3.
Tìm hiểu bàn phím 4x4
6
4.
Tìm hiểu chung LCD 16x2 tích hợp I2C
8
Chương 2: Cơ sở lý thuyết
10
1.
Cấu hình chi tiết STM32F103C8T6
10
2.
Cấu trúc bộ nhớ
11
Chương 3: Mô tả thiết kế phần cứng
1.
2.
Sơ đồ khối
12
12
1.1 Khối nhập dữ liệu
12
1.2 Khối xử lý dữ liệu
12
Nguyên lý tổng quát
12
Chương 4: Thiết kế chương trình
13
1.
Giới thiệu về Free RTOS
13
2.
Giới thiệu về I2C
16
3.
2.1 Giới thiệu về giao tiếp I2C
16
2.2 Đặc điểm của I2C
16
2.3 Giao thức truyền dữ liệu
17
Chương trình máy tính
19
TÀI LIỆU THAM KHẢO
21
LỜI CẢM ƠN
22
LỜI NÓI ĐẦU
Lời đầu tiên em xin trân thành cảm ơn trường Học viện cơng nghệ Bưu chính viễn
thơng đặc biệt là các thầy cô ngành Điện – Điện tử nói chung và thầy Nguyễn Ngọc
Minh nói riêng đã giúp chúng em hồn thành tốt bộ mơn “ Đồ án thiết kế hệ thống
nhúng”.
“Đồ án thiết kế hệ thống nhúng” là một môn học cần thiết cho mỗi sinh viên kĩ thuật
nói chung và sinh viên ngành Điện – Điện tử nói riêng. Nó giúp mỗi sinh viên rèn
luyện lại kĩ năng chuyên ngành trước khi bước vào làm đồ án tốt nghiệp và tiến tới
một môi trường làm việc mới. Với nền công nghiệp phát triển 4.0 hiện nay, ta sẽ khơng
ngạc nhiên gì khi những thiết bị điện tử ngày càng trở nên đa dạng, hiện đại hơn, chất
lượng tốt hơn. Đi theo những thiết bị điện tử đó là những u cầu địi hỏi về kiến thức,
chun môn chuyên ngành cao. Trên cơ sở đã được học các môn như hệ thống nhúng,
kĩ thuật vi xử lý… qua đó chúng em xin chọn thực hiện đề tài: “ Thiết kế máy tính bỏ
túi thực hiện phép tính đơn giản”.
Chương 1: Giới thiệu
1. Lý do chọn đề tài
Máy tính bỏ túi là một công cụ học tập quen thuộc của học sinh, sinh viên, đặt biệt
là sinh viên kỹ thuật. Trong đời sống hàng ngày, nó là một vật cần thiết cho việc tính
tiền trong các vụ mua bán. Trong sản xuất, nó được dùng để tính tốn số sản phẩm làm
ra. Và còn rất nhiều ứng dụng khác của máy tính bỏ túi, cho thấy sự phổ biến, cần thiết
của nó.
Từ đó nhóm thực hiện đề tài đã đưa ra đề tài “máy tính điện tử cá nhân”, chức năng
chính là tính tốn các phép tính cộng +,trừ -, nhân x, chia / căn bản với hệ thống số
nguyên và hiển thị trên LCD.
2. Tìm hiểu STM32F103C8T6
STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông dụng
như F0,F1,F2,F3,F4….. Stm32f103 thuộc họ F1 với lõi là ARM COTEX M3.
STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz. Giá thành cũng khá rẻ so
với các loại vi điều khiển có chức năng tương tự. Mạch nạp cũng như công cụ lập trình
khá đa dạng và dễ sử dụng.
Một số ứng dụng chính: dùng cho driver để điều khiển ứng dụng, điều khiển ứng
dụng thông thường, thiết bị cầm tay và thuốc, máy tính và thiết bị ngoại vi chơi game,
GPS cơ bản, các ứng dụng trong công nghiệp, thiết bị lập trình PLC, biến tần, máy in,
máy quét, hệ thống cảnh báo, thiết bị liên lạc nội bộ…
Phần mềm lập trình: có khá nhiều trình biên dịch cho STM32 như IAR Embedded
Workbench, Keil C… Ở đây mình sử dụng Keil C nên các bài viết sau mình chỉ đề cập
đến Keil C.
Thư viện lập trình: có nhiều loại thư viện lập trình cho STM32 như:
STM32snippets, STM32Cube LL, STM32Cube HAL, Standard Peripheral Libraries,
Mbed core. Mỗi thư viện đều có ưu và khuyết điểm riêng, ở đây mình xin phép sử
dụng Standard Peripheral Libraries vì nó ra đời khá lâu và khá thơng dụng, hỗ trợ
nhiều ngoại vi và cũng dễ hiểu rõ bản chất của lập trình.
Mạch nạp: có khá nhiều loại mạch nạp như: ULINK, J-LINK, CMSIS-DAP,
STLINK… ở đây mình sử dụng Stlink vì giá thành khá rả và debug lỗi cũng tốt.
Hình 1
Các thơng số kỹ thuật
● Điện áp cấp 5VDC qua cổng Micro USB sẽ được chuyển đổi thành 3.3VDC qua
IC nguồn
● Tích hợp sẵn thạch anh 8Mhz.
● Tích hợp sẵn thạnh anh 32Khz cho các ứng dụng RTC.
● Ra chân đầy đủ tất cả các GPIO và giao tiếp: CAN, I2C, SPI, UART, USB,...
● Tích hợp Led trạng thái nguồn, Led PC13, Nút Reset.
● Kích thước: 53.34 x 15.24mm.
3. Tìm hiểu bàn phím 4x4
● Giới thiệu:
Ma trận phím 4x4 gồm có 16 nút bấm được sắp xếp theo ma trận 4 hàng, 4 cột.
Các nút bấm trong cùng một hàng và một cột được nối với nhau, vì vậy ma trận
phím 4x4 sẽ có tổng cộng 8 ngõ ra.
● Sơ đồ giải thuật bàn phím 4x4:
Hình 2
● Sơ đồ nguyên lý:
Hình 3
4. Tìm hiểu chung LCD 16x2 tích hợp I2C
● Giới thiệu chung
LCD là một màn hình nhiều điểm ảnh, có thể coi là một Led ma trận dạng lớn,
tuy nhiên chúng ta không cần đi vào điều khiển từng Pixel hay là từng chấm
nhỏ mà chúng ta sẽ điều khiển qua lệnh, con trỏ… để hiển thị thông tin một
cách dễ dàng hơn. Trước tiên chúng ta tìm hiểu về cầu tạo của nó.
● Sơ đồ chân
Hình 3
● Thơng số kỹ thuật của LCD16x2
LCD 16x2 được sử dụng để hiện thị trạng thái hoặc các thơng số.
LCD16x2 có 16 chân trong đó 8 chân dữ liệu (D0-D7) và 3 chân điều khiển
(RS,RW,EN) và 5 chân còn lại dùng để cấp nguồn và đèn nền cho LCD16x2.
Các chân điều khiển giúp ta dễ dàng cấu hình LCD ở chế độ lệnh hoặc chế độ
dữ liệu. Có thể cấu hình ở chế độ đọc hoặc ghi.
LCD 16x2 có thể sử dụng chế độ 4 bit hoặc 8 bit tùy theo ứng dụng chúng ta
làm.
● Sau khi gửi các lệnh vào LCD (qua các chân D0 – D7) để nó biết sẽ phải làm gì
(bật màn hình, hiển thị hay tắt con trỏ, di chuyển con trỏ …), chúng ta sẽ phải
gửi lệnh chứa các kí tự mà chúng ta muốn hiển thị.
● Các thông số kỹ thuật
Điện áp hoạt động: 2.5-6V DC.
Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780).
Giao tiếp: I2C.
Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2).
Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt.
Chương 2: Cơ sở lý thuyết
1. Cấu hình chi tiết STM32F103C8T6
STM32F103C8T6 là vi điều khiển 32bit, thuộc họ F1 của dòng chip STM32 hãng
ST.
o Lõi ARM COTEX M3.
o Tốc độ tối đa 72Mhz.
o Clock, reset và quản lý nguồn
Điện áp hoạt động từ 2.0 → 3.6V.
Sử dụng thạch anh ngoài từ 4Mhz → 20Mhz.
Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40Khz.
- Chế độ điện áp thấp:
Có các mode: ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ.
Cấp nguồn ở chân Vbat bằng pin ngoài để dùng bộ RTC và sử dụng dữ liệu
được lưu trữ khi mất nguồn cấp chính.
- 2 bộ ADC 12 bit với 9 kênh cho mỗi bộ
Khoảng giá trị chuyển đổi từ 0 – 3.6 V
Có chế độ lấy mẫu 1 kênh hoặc nhiều kênh.
- DMA:
7 kênh DMA
Có hỗ trợ DMA cho ADC, UART, I2C, SPI.
- 7 bộ Timer:
3 Timer 16 bit hỗ trợ các mode Input Capture/ Output Compare/ PWM.
1 Timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ ngắt Input,
dead-time.
2 Watchdog Timer để bảo vệ và kiểm tra lỗi.
1 Systick Timer 24 bit đếm xuống cho hàm Delay,….
- Có hỗ trợ 9 kênh giao tiếp:
2 bộ I2C.
3 bộ USART
2 SPI
1 CAN
USB 2.0 full-speed interface
- Kiểm tra lỗi CRC và 96-bit ID.
Hình 3
Sơ lược về Board trên:
●
1 cổng Mini USB dùng để cấp nguồn, nạp cũng như debug.
●
2 MCU bao gồm 1 MCU nạp và 1 MCU dùng để lập trình.
●
Có chân Output riêng cho các chân mạch nạp trên MCU1.
●
Có chân Output đầy đủ cho các chân MCU2.
2. Cấu trúc bộ nhớ
− 64 kbytes bộ nhớ Flash
− 20 kbytes SRAM
Chương 3: Mô tả thiết kế phần cứng
1. Sơ đồ khối
1.1 Khối nhập dữ liệu
Là khối có chức năng nhập dữ liệu là các ký tự số, đưa ra các lệnh điều khiển,
các phép toán… đưa đến khối xử lý để thực hiện cơng việc tính tốn và xuất ra
màn hình kết quả tính tốn. Khối này được chia ra làm 3 nhóm phím với chức
năng như sau:
⮚ Nhóm phím số: Nhập dữ liệu dưới dạng các ký tự số để phục vụ các
phép tính đại số. Nhóm phím này gồm các phím từ 0-9.
⮚ Nhóm phím chức năng: Nhập giá trị đưa ra các phép tính đại số đơn giản
như cộng, trừ nhân, chia đưa đến khối xử lý để thực hiện.
Khối nhập dữ liệu luôn ở trạng thái để người dùng có thể thối mái nhập dữ liệu
qua bàn phím.
1.2 Khối xử lý dữ liệu
Là khối quan trọng nhất, thực hiện chức năng quan trọng nhất là xử lý dữ liệu từ
khối nhập đưa tới, tính tốn các phép tính, thực hiện các lệnh và xuất dữ liệu hiển
thị trên khối hiển thị.
1.3 Khối xuất dữ liệu
Khối xuất dữ liệu có nhiệm vụ nhận dữ liệu là các bit nhị phân qua các chân dữ
liệu và sau đó kiểm tra nó với bảng mã dữ liệu hay mã lệnh để thực hiện mã lệnh
hay cho hiển thị ra màn hình.
2. Nguyên lý tổng quát
● Sau khi người dùng bấm các phím nhập dữ liệu từ bàn phím, khối nhập dữ liệu
ma trận bàn phím 4x4 sẽ nhận dữ liệu và đẩy dữ liệu đó đến khối xử lý dữ liệu
VDK STM32.
● Lúc này STM32 sẽ xử lý và tiếp nhận dữ liệu, mọi các phép tính tốn tại đây
được xử lý để cho ra đáp án chính xác với kết quả trên lý thuyết thực tế. Và
toàn bộ những dữ liệun đó được đi đến khối xuất dữ liệu LCD.
● Tại màn hình LCD sẽ hiển thị cho người dùng biết mọi dữ liệu từ hai khối nhập
dữ liệu từ ma trận bàn phím 4x4 và kết quả được xử lý từ khối xử lý STM32.
Chương 4: Thiết kế chương trình
1. Giới thiệu về Free RTOS
FreeRTOS là hệ điều hành nguồn mở thời gian thực dành cho các bộ vi điều
khiển, cho phép dễ dàng lập trình, triển khai, bảo mật, kết nối và quản lý các thiết
bị ngoại biên nhỏ, công suất thấp.
Các chức năng cơ bản của RTOS:
●
Bộ lập lịch (Scheduler)
●
Dịch vụ thời gian thực (Real Time Services)
●
Đồng bộ và thông điệp (Synchronization and Messaging)
Trong Scheduler sẽ có 3 trạng thái mặc định:
Ready to run: Trạng thái chuẩn bị của tác vụ
● Running: Trạng thái tác vụ đang thực thi
● Blocked: Các tác vụ không đủ tài nguyên xử lý sẽ được về trạng thái khóa
Dịch vụ thời gian thực
●
●
Dịch vụ xử lý ngắt (Interrupt handling services)
●
Dịch vụ thời gian (Time services)
●
Dịch vụ quản lý thiết bị (Device management services).
●
Dịch vụ quản lý bộ nhớ (Memory management services)
●
Dịch vụ quản lý kết nối (IO services)
✔ Tải thư viện Free RTOS
Tiếp theo là chờ tải xong và giải nén.
2. Giới thiệu về I2C
2.1 Giới thiệu về giao tiếp I2C
I2C là tên viết tắt của cụm từ tiếng anh “Inter-Integrated Circuit”. Nó là một giao
thức giao tiếp được phát triển bởi Philips Semiconductors để truyền dữ liệu giữa
một bộ xử lý trung tâm với nhiều IC trên cùng một board mạch chỉ sử dụng hai
đường truyền tín hiệu.
Đây là một loại giao thức giao tiếp nối tiếp đồng bộ. Nó có nghĩa là các bit dữ
liệu được truyền từng bit một theo các khoảng thời gian đều đặn được thiết lập
bởi một tín hiệu đồng hồ tham chiếu.
2.2 Đặc điểm của I2C
● Chỉ cần có hai đường bus (dây) chung để điều khiển bất kỳ thiết bị / IC nào trên
mạng I2C
● Không cần thỏa thuận trước về tốc độ truyền dữ liệu như trong giao tiếp UART.
Vì vậy, tốc độ truyền dữ liệu có thể được điều chỉnh bất cứ khi nào cần thiết
● Cơ chế đơn giản để xác thực dữ liệu được truyền
● Sử dụng hệ thống địa chỉ 7 bit để xác định một thiết bị / IC cụ thể trên bus I2C
● Các mạng I2C dễ dàng mở rộng. Các thiết bị mới có thể được kết nối đơn giản
với hai đường bus chung I2C
2.3 Giao thức truyền dữ liệu
Giao thức sau đây (tập hợp các quy tắc) được theo sau bởi thiết bị Master và các
thiết bị Slave để truyền dữ liệu giữa chúng.
Dữ liệu được truyền giữa thiết bị Master và các thiết bị Slave thông qua một
đường dữ liệu SDA duy nhất, thơng qua các chuỗi có cấu trúc gồm các số 0 và 1
(bit). Mỗi chuỗi số 0 và 1 được gọi là giao dịch (transaction) và dữ liệu trong mỗi
giao dịch có cấu trúc như sau:
Điều kiện bắt đầu (Start Condition)
Bất cứ khi nào một thiết bị chủ / IC quyết định bắt đầu một giao dịch, nó sẽ chuyển
mạch SDA từ mức điện áp cao xuống mức điện áp thấp trước khi đường SCL chuyển
từ cao xuống thấp.
Khi điều kiện bắt đầu được gửi bởi thiết bị Master, tất cả các thiết bị Slave đều hoạt
động ngay cả khi chúng ở chế độ ngủ (sleep mode) và đợi bit địa chỉ.
Khối địa chỉ
Nó bao gồm 7 bit và được lấp đầy với địa chỉ của thiết bị Slave đến / từ đó thiết bị
Master cần gửi / nhận dữ liệu. Tất cả các thiết bị Slave trên bus I2C so sánh các bit địa
chỉ này với địa chỉ của chúng.
Bit Read / Write
Bit này xác định hướng truyền dữ liệu. Nếu thiết bị Master / IC cần gửi dữ liệu đến
thiết bị Slave, bit này được thiết lập là ‘0’. Nếu IC Master cần nhận dữ liệu từ thiết bị
Slave, bit này được thiết lập là ‘1’.
Bit ACK / NACK
ACK/NACK là viết tắt của Acknowledged/Not-Acknowledged. Nếu địa chỉ vật lý của
bất kỳ thiết bị Slave nào trùng với địa chỉ được thiết bị Master phát, giá trị của bit này
được set là ‘0’ bởi thiết bị Slave. Ngược lại, nó vẫn ở mức logic ‘1’ (mặc định).
Khối dữ liệu
Nó bao gồm 8 bit và chúng được thiết lập bởi bên gửi, với các bit dữ liệu cần truyền
tới bên nhận. Khối này được theo sau bởi một bit ACK / NACK và được set thành ‘0’
bởi bên nhận nếu nó nhận thành cơng dữ liệu. Ngược lại, nó vẫn ở mức logic ‘1’.
Sự kết hợp của khối dữ liệu theo sau bởi bit ACK / NACK được lặp lại cho đến quá
trình truyền dữ liệu được hoàn tất.
Điều kiện kết thúc (Stop condition)
Sau khi các khung dữ liệu cần thiết được truyền qua đường SDA, thiết bị Master
chuyển đường SDA từ mức điện áp thấp sang mức điện áp cao trước khi đường SCL
chuyển từ cao xuống thấp.
3. Chương trình máy tính
Gọi 2 hàm để setup cho LCD 16x2 I2C. Ở đây nhóm chúng em đã tìm hiểu và bổ sung
thêm để chương trình có thể thực thi khi gắn LCD 20x4,…
Khởi tạo các chân keypad để nhận dữ liệu nút bấm. Nguyên lý của keypad đã được nói
ở mục trên.
Trong hàm main, khởi tạo 3 stack thay phiên nhau thực hiện chương trình. Do chương
trình chạy rất nhanh( cỡ ms) nên sẽ khơng thể nhận thấy chương trình nào đang thực
thi. 3 chương trình gần như chạy đồng thời với nhau.
TÀI LIỆU THAM KHẢO
● />● />● />● />me_Kernel-A_Hands-On_Tutorial_Guide.pdf
LỜI CẢM ƠN
Lời đầu tiên nhóm thực hiện đề tài xin gửi lời cảm ơn chân thành đến thầy hướng
dẫn TS. Nguyễn Ngọc Minh, người đã tận tình chỉ bảo để nhóm thực hiện đề tài.
Nhóm thực hiện đề tài này cũng xin cảm ơn các bạn, những người đã đóng góp ý
kiến, động viên nhóm hồn thành đề tài. Do còn là sinh viên đang học trên ghế nhà
trường nên nhóm chúng em vẫn chưa thể lĩnh hội hết các kiến thức về lĩnh vực này. Do
đó, có thể đề tài vẫn cịn nhiều điểm thiếu sót, rất mong quý thầy cô chỉ dẫn để đề tài
này ngày một hồn thiện hơn.
Nhóm thực hiện đề tài
Lê Việt Bắc – Đặng Hà Phong