Professional Documents
Culture Documents
Tài Liệu Lab Iot
Tài Liệu Lab Iot
Tài Liệu Lab Iot
------------------------
Hà Nội, 2022
1
MỤC LỤC
MỤC LỤC…………………………………………………………………………1
DANH MỤC HÌNH VẼ…………………………………………………………...8
I. GIỚI THIỆU LAB IoT………………………………………………………..10
1. Giới thiệu hệ thống thiết bị phòng lab IoT ………………………………….10
1.1 Sơ đồ khối hệ thống thiết bị phòng lab IoT.…………………………..........10
1.2 Danh mục thiết bị phần cứng phòng lab IoT....…………………………….11
2. Giới thiệu các thiết bị Kit IoT ………………………………………….……13
2.1 Giới thiệu Kit IoT STM32............................................................................13
2.2 Giới thiệu Kit IoT Zigbee.............................................................................27
2.3 Giới thiệu mạch nạp Kit IoT………………………………………………40
3. Giới thiệu thiết bị phần mềm IoT……………………………….……..........41
3.1 Phần mềm lập trình vi điều khiển STM32………………………………...41
3.2 Phần mềm lập trình vi điều khiển Kit IoT Zigbee…………………………54
3.3 Phần mềm nạp code vào Kit IoT STM32.....................................................66
3.4 Phần mềm nạp code vào Kit IoT Zigbee......................................................69
3.5 Giới thiệu giao thức truyền thông không dây Zigbee……………………...76
4. Quy trình kiểm tra thiết bị Kit IoT …………………………………………87
4.1 Quy trình kiểm tra phần cứng ……………………………………………...87
4.2 Quy trình kiểm tra phần mềm …………………………………………….88
5. Quy định về quản lý & bảo dưỡng thiết bị phòng lab……………………….94
5.1 Quy định về quản lý thiết bị ……………………………………………….94
5.2 Quy định về bảo dưỡng thiết bị....................................................................94
2
II. GIỚI THIỆU CÁC NỘI DUNG THỰC HÀNH LAB IoT…………………95
1.Thực hành lập trình nhúng với STM32………………………………………95
Bài 2: Thực hành nạp code vào Kit bằng phần mềm STM32CubeIDE...................110
Bài 3: Thực hành nạp code vào Kit bằng phần mềm Stlink Utility…………..........114
Bài 4: Thực hành giao tiếp hiển thị LCD: “Welcome to IoT LAB!”................…...121
Bài 5: Thực hành cấu hình các nguồn cấp xung nhịp của hệ thống HSI …..............126
Bài 6: Thực hành cấu hình các nguồn cấp xung nhịp của hệ thống HSE …............129
Bài 7: Thực hành cấu hình vào ra trạng thái trên các chân GPIO Led…................133
Bài 8: Thực hành cấu hình vào ra trạng thái trên các chân GPIO Buzzer...............138
Bài 9: Thực hành cấu hình vào ra trạng thái trên các chân GPIO Led_Red.............143
Bài 10: Thực hành lập trình xây dựng header file cho thư viện GPIO……………148
Bài 11: Thực hành lập trình xây dựng source file cho thư viện GPIO……………157
Bài 12: Thực hành lập trình xây dựng header file của MCU STM32......................168
Bài 13: Thực hành cài đặt và cấu hình GIT.............................................................188
Bài 14: Thực hành lập trình thư viện GIT..............................................................202
Bài 15: Thực hành debug chương trình cấu hình GPIO..........................................213
Bài 16: Thực hành cấu hình ngắt ngoài cho nút nhấn trên Board STM32F4..........222
Bài 17: Thực hành cấu hình ngắt ngoài cho nút nhấn trên Kit mở rộng…..............228
Bài 18: Thực hành truyền và nhận dữ liệu với ngoại vi SPI..................................234
Bài 19: Thực hành lập trình thư viện cho ngoại vi SPI: tạo file
stm32f041re_spi.h.................................................................................................248
Bài 20: Thực hành lập trình thư viện cho ngoại vi SPI: tạo file
stm32f041re_spi.c..................................................................................................257
3
Bài 21: Thực hành truyền và nhận dữ liệu với ngoại vi I2C...................................272
Bài 22: Thực hành lập trình thư viện cho ngoại vi I2C: tạo file
stm32f041re_i2c.h.................................................................................................284
Bài 23: Thực hành lập trình thư viện cho ngoại vi I2C: tạo file
stm32f041re_i2c.c.................................................................................................293
Bài 24: Thực hành truyền và nhận dữ liệu với ngoại vi USART............................306
Bài 25: Thực hành lập trình thư viện cho ngoại vi USART: tạo file
stm32f041re_usart.h..............................................................................................319
Bài 26: Thực hành lập trình thư viện cho ngoại vi USART: tạo file
stm32f041re_usart.c..............................................................................................327
Bài 27: Thực hành cấu hình ngoại vi TIMER ở chế độ Basic.................................340
Bài 28: Thực hành cấu hình ngoại vi TIMER ở chế độ Capture.............................344
Bài 29: Thực hành cấu hình ngoại vi TIMER ở chế độ PWM................................353
Bài 30: Thực hành lập trình thư viện cho ngoại vi TIMER: tạo file
stm32f041re_tim.h.................................................................................................358
Bài 31: Thực hành lập trình thư viện cho ngoại vi TIMER: tạo file
stm32f401re_tim.c.................................................................................................369
Bài 32: Thực hành cấu hình ngoại vi ADC ở chế độ quét liên tục...........................386
Bài 33: Thực hành cấu hình ngoại vi ADC ở chế độ DMA.....................................393
Bài 34: Thực hành lập trình thư viện cho ngoại vi ADC: tạo file
stm32f401re_adc.h................................................................................................401
Bài 35: Thực hành lập trình thư viện cho ngoại vi ADC: tạo file
stm32f401re_adc.c………………………………….............................................408
4
2.Thực hành lập trình mạng không dây Zigbee……………………………...431
Bài 1: Thực hành tạo project bằng phần mềm Simplicity Studio…………............431
Bài 2: Thực hành lập trình tạo folder áp dụng phân tầng cho thư viện Simplicity
Studio …………....................................................................................................442
Bài 3: Thực hành nạp firmware vào Kit IoT Zigbee thông qua phần mềm
Commander ………………………………...........................................................447
Bài 4: Thực hành xử lý các sự kiện của nút nhấn trên Kit IoT Zigbee và sử dụng giao
thức UART để hiển thị ra màn hình………………………………........................451
Bài 5: Thực hành xử lý Leds trên Kit IoT Zigbee …………………......................458
Bài 6: Thực hành giao tiếp với các cảm biến môi trường trên Kit IoT Zigbee và hiển
thị các thông số lên màn hình PC qua phần mềm Hercules
…………………...................................................................................................466
Bài 7: Thực hành tạo thiết bị Z3Coordinator và Zigbee Router để khởi tạo mạng
………………………...........................................................................................469
Bài 8: Thực hành quá trình khởi tạo mạng và gia nhập mạng IoT Zigbee...............472
Bài 9: Thực hành sử dụng CLI xử lý bài toán giao tiếp giữa các Kit IoT
Zigbee ……………………...................................................................................477
Bài 10: Thực hành xây dựng thiết bị Sleepy End
Device....................................................................................................................482
Bài 11: Thực hành xử lý bài toán Binding trong
Zigbee....................................................................................................................489
Project 1: Dự án mô phỏng thiết bị công tắc cảm ứng điều khiển đóng/mở rèm cửa
của Lab IoT
5
Project 2: Dự án giao tiếp với cảm biến nhiệt độ-độ ẩm và hiển thị các thông số lên
màn hình LCD
Project 3: Dự án giao tiếp vi điều khiển STM32F4 với phần mềm mô phỏng
PC_Simulator_KIT
Project 4: Dự án mô phỏng tính năng điều chỉnh độ sáng màn hình tự động trên điện
thoại
Project 5: Dự án giao tiếp với các cảm biến môi trường và hiển thị các thông số lên
màn hình PC
Project 6: Dự án kết hợp và sử dụng Command Line Interface để xử lý bài toán
Binding trong Zigbee
Project 8: Dự án xây dựng thiết bị công tắc 2 nút hoạt động với tính năng hoàn
chỉnh, tích hợp vào hệ thống Lumi Life
Project 9: Dự án xây dựng và điều khiển các thiết bị nhà thông minh tích hợp vào
hệ thống Lumi Life
6
TÀI LIỆU THAM KHẢO
PHỤ LỤC
1. Bố cục bài thực hành
7
DANH MỤC HÌNH VẼ
Hình 1.1: Sơ đồ khối hệ thống thiết bị phòng lab IoT ……………………………..6
Hình 1.2: 3D mặt trước Kit IOT STM……………………………….………..........8
Hình 1.3: 3D mặt sau kit IOT STM…………………………………………...........8
Hình 1.4: Layout mặt trước Kit IOT STM...…………………………….…………8
Hình 1.5: Layout mặt sau Kit IOT STM …………………………….……….........8
Hình 1.6: Sơ đồ khối Kit IOT STM 32 ………………………….…………............9
Hình 1.7: Sơ đồ nguyên lý Kit IOT STM 32 ………………………………..........10
Hình 1.8: Kit Nucleo STM32F401RE ……..………………………………..........12
Hình 1.9: Vi điều khiển STM32 trên Kit Nucleo STM32F401RE ……..…….......13
Hình 1.10: Chức năng vi điều khiển STM32 trên Kit Nucleo STM32F401RE ….13
Hình 1.11: Cấu trúc vi điều khiển STM32 ………………………….……..…......14
Hình 1.12: Cảm biến nhiệt độ - độ ẩm Si7020 …………………………….……..15
Hình 1.13: Sơ đồ nguyên lý cảm biến nhiệt độ, độ ẩm …………………………..15
Hình 1.14: Quang trở GL5537………………………….………….......................16
Hình 1.15: Sơ đồ nguyên lý quang trở…………………………….…………........16
Hình 1.17: Loa - Buzzer…………………………….………….............................17
Hình 1.17: Sơ đồ nguyên lý module loa…………………………….………….....17
Hình 1.18: Màn hình LCD…………………………….…………..........................18
Hình 1.19: Nguyên lý màn hình LCD……………………………….………........19
Hình 1.20: Sơ đồ nguyên lý chân kết nối…………………………….……….......19
Hình 1.21: LED RGB……………………………….…………….…………........19
Hình 1.22: Sơ đồ nguyên lý LED RGB…………………………….…………......20
Hình 1.23: 3D mặt trước Kit IOT ZIgbee…………………………….……….......20
Hình 1.24: 3D mặt sau Kit IOT Zigbee…………………………….…………......21
Hình 1.25: Layout mặt trước Kit IOT Zigbee…………………………….………21
Hình 1.26: Layout mặt sau Kit IOT Zigbee…………………………….…………22
8
Hình 1.27: Sơ đồ khối Kit IOT Zigbee…………………………….………….......23
Hình 1.28: Sơ đồ nguyên lý Kit IOT Zigbee …………………………….……….23
Hình 1.29: Sơ đồ nguyên lý khối cấp nguồn …………………………….……….26
Hình 1.30: Vi điều khiển EFR32MG21….………………………….………….....27
Hình 1.31: Sơ đồ nguyên lý vi điều khiển EFR32MG21…………………………27
Hình 1.32: Cảm biến nhiệt độ - độ ẩm Si7020…………………………….……...28
Hình 1.33: Sơ đồ nguyên lý cảm biến nhiệt độ, độ ẩm Si7020…………………...28
Hình 1.34: Cảm biến từ SI7210…………………………….…………..................29
Hình 1.35: Sơ đồ nguyên lý cảm biến từ SI7210…………………………….…...29
Hình 1.36: Nguyên lý hoạt động PIR…………………………….………….........30
Hình 1.37: Cảm biến chuyển động PIR…………………………….…………......30
Hình 1.38: Sơ đồ nguyên lý cảm biến PIR…………………………….……….....31
Hình 1.39: LED RGB…………………………….………….................................32
Hình 1.40: Sơ đồ nguyên lý LED RGB………………………….…………..........32
Hình 1.41: Sơ đồ nguyên lý USB to COM…………………………….………….42
Hình 1.42: Quang trở GL5537…………………………….…………....................42
Bảng 1.1 Danh mục thiết bị phần cứng phòng lab IoT …….....................................6
Bảng 1.2 Danh mục thiết bị trên KIT IOT STM32…………….…………............11
Bảng 1.3 Danh mục thiết bị phần cứng phòng KIT IOT ZIGBEE ……………….25
9
I. GIỚI THIỆU LAB IoT
1. Giới thiệu hệ thống thiết bị phòng lab IoT
1.1. Sơ đồ khối hệ thống thiết bị phòng lab IoT
Sơ đồ khối hệ thống thiết bị phòng lab IoT được minh họa tronh hình 1.1, bao
gồm khối nguồn, khối cảm biến, khối điều khiển, khối chấp hành và nền tảng điện
toán đám mây.
a) Khối nguồn: cấp nguồn điện cho hệ thống máy tính và các thiết bị khác như
điều hòa, đèn, máy chiếu, tivi, rèm cửa…
+ nguồn 220v
+ nguồn 5v cho vi điều khiển, IC, led…
b) Khối cảm biến: thu thập dữ liệu về môi trường, con người, sự kiệ để truyền
tới khối điều khiển, bao gồm các thiết bị:
+ cảm biến nhiệt độ, cảm biến độ ẩm, cảm biến ánh sáng, cảm biến hồng
ngoại, cảm biến chuyển động…
+ camera
+ micro
c) Khối điều khiển: thu nhận dữ liệu từ khối cảm biến, tính toán và đưa ra các
quyết định điều khiển tới khối chấp hành, bao gồm các thiết bị:
+ vi điều khiển, IC…
+ IoT gateway
+ AI camera hub
d) Khối chấp hành: thu nhận quyết định điều khiển từ khối điều khiển và chấp
hành, bao gồm các thiết bị:
+ hệ thống đèn chiếu sáng
+ tivi, điều hòa, máy chiếu, rèm cửa
+ hệ thống máy tính
10
e) IoT Cloud: lưu trữ dữ liệu hệ thống
Wifi
IoT App
Wifi
Khối nguồn
11
-LED RGB -Tính toán & hiển thị
-Cảm biến nhiệt độ, độ ẩm các tham số
-Cảm biến ánh sáng - Báo hiệu led
-Ngoại vi & cổng kết nối -Nạp code vào Kit
-Mạch nạp Kit -Đấu nối thiết bị Kit
- Bộ cáp nối chuyên dụng - IoT-máy tính
Type C, D, USB -Đấu nối thiết bị Kit
IoT-ngoại vi
Trung tâm điều khiển
4 AI camera hub 01 06 cổng IP camera
phòng lab
Thu thập dữ liệu, giám
5 Camera 02 IP Camera
sát điều khiển phòng lab
Hiển thị giám sát hệ
6 Tivi 01
thống lab tầng 8
7 Máy chiếu 01 Hiển thị
8 Điều hòa 01 Làm mát
9 Cục phát wifi 01 Viettel Cục phát wifi
12
2. Giới thiệu các thiết bị Kit IoT
2.1. Giới thiệu Kit IoT STM32
a) Khái niệm
+ IoT STM32 Board Kit là bộ board NUCLEO-F401RE của hãng
STMicroelectronics đi kèm với kit mở rộng (shield) do công ty
Lumi thiết kế giúp học viên dễ dàng học tập, phát triển ứng
dụng của mình trên board NUCLEO-F401RE
+ Kit mở rộng tương thích với các jumper header ST Morpho
của board NUCLEO-F401RE. Kit đã tích hợp đa dạng các
ngoại vi như màn hình LCD, led RGB, nút ấn, còi, cảm biến
nhiệt độ - độ ẩm, cảm biến ánh sáng …
13
Hình 1.4 Layout mặt trước Kit IOT STM32
14
b) Cấu tạo Kit IOT STM32
15
Bảng 1.2 Danh mục thiết bị trên KIT IOT STM32
Số Thông số
Stt Tên thiết bị Vai trò
lượng kỹ thuật
- Hỗ trợ kết nối
Arduino, đầu nối ST
- STMicroelectronics morpho giúp dễ dàng
- STM32F4 Serial mở
Board NUCLEO-
1 01 -STM32F401RE rộng chức năng của nền
F401RE
MCU tảng phát triển mở
NUCLEO với
nhiều lựa chọn shield
chuyên dụng
-Vi xử lý (Processor)
-Bộ nhớ(Memory)
-Thực hiện chức năng
-Input/output pins
vi điều khiển điều khiển và kết nối
2 01 -Ngoại vi (Peripheral)
STM32 thiết bị
-Clock (xung Clock)
-Bus interfaces
16
Điện áp hoạt động: 3.5V - 5.5V.
+ Dòng điện hoạt động: <
5 Còi – Buzzer 01 25mA. -Báo hiệu âm thanh
+ Tần số âm thanh: 2500 Hz.
17
Board NUCLEO - F401RE:
+ Board NUCLEO-F401RE do hãng STMicroelectronics phát triển dành cho dòng
STM32F4 Serial với STM32F401RE
MCU
+ Bo mạch NUCLEO STM32 mang lại sự linh hoạt, tiện lợi cho
người dùng tiếp cận các khái niệm mới, lập trình với vi điều
khiển STM32.
+ Hỗ trợ kết nối Arduino, đầu nối ST morpho giúp dễ dàng mở
rộng chức năng của nền tảng phát triển mở NUCLEO với
nhiều lựa chọn shield chuyên dụng.
+ Datasheet Kit NUCLEO-F401RE:
https://www.st.com/en/evaluation-tools/nucleo-f401re.html
18
Vi điều khiển STM32:
+ Khái niệm: Là một mạch tích hợp trên một bộ chip có thể lập trình được dùng để
điều khiển hoạt động của hệ thống, đóng vai trò như là “bộ não” điều hành tất cả các
hành vi của board mạch (thiết bị). Sinh viên có thể tham khảo chi tiết tại Datasheet
STM32
19
+ Cấu trúc vi điều khiển STM32
⚫ Vi xử lý (Processor)
⚫ Bộ nhớ(Memory)
⚫ Input/output pins
⚫ Ngoại vi (Peripheral)
⚫ Clock (xung Clock)
⚫ Bus interfaces
⚫ Rom: chứa chương trình, các dữ liệu ược fix hoặc những constant data. gày
nay, EEPROM hoặc FLASH để hay thế cho ROM vì chúng có chức ăng update
chương trình mới, có hả năng ghi xóa.
⚫ RAM: Đây là thành phần hỗ trợ lưu hương trình thực thi và các biến tạm.
⚫ MCU: Là bộ xử lý hỗ trợ tính toán trung âm.
⚫ Ngoài ra, còn một vài thiết bị ngoại vi hác như: ADC, DAC, I2C, UART,...
20
Cảm biến nhiệt độ - độ ẩm Si7020:
+ Cảm biến nhiệt độ, độ ẩm Si7020 là IC tích hợp đo nhiệt độ, độ ẩm với độ chính
xác cao, chuyển tín hiệu từ tương tự sang tín hiệu số, giao tiếp với vi điều khiển qua
chuẩn giao tiếp I2C gồm 2 chân SCL và SDA.
+ Dải đo độ ẩm: 0 - 80% RH, dung sai 土 4%RH.
21
Hình 1.13 Sơ đồ nguyên lý cảm biến nhiệt độ, độ ẩm
22
Hình 1.15 Sơ đồ nguyên lý quang trở
Còi – Buzzer:
+ Còi là thiết bị phát ra âm thanh thường được sử dụng trong các mạch điện tử.
+ Điện áp hoạt động: 3.5V - 5.5V.
+ Dòng điện hoạt động: < 25mA.
+ Tần số âm thanh: 2500 Hz.
+ Datasheet: http://www.farnell.com/datasheets/2171929.pdf
+ Tham khảo source code: Buzzer
23
Hình 1.17 Sơ đồ nguyên lý module còi
Màn hình LCD:
+ Kích thước: 1.44 inches.
+ Loại màn hình: TFT (Thin Film Transistor), sử dụng bóng bán dẫn loại film
mỏng, đèn nền phát sáng thông qua các điểm ảnh.
+ Dải nhiệt độ hoạt động: -20 - 70℃.
+ Điện áp hoạt động: 3V.
+ IC điều khiển: ST7735S.
+ Độ phân giải: 128*128 pixels.
+ Chuẩn giao tiếp: SPI gồm 4 chân MISO, MOSI, SS, SCK.
+ Tham khảo source code: LCD
24
Hình 1.18 Màn hình LCD
Connector:
+ Connector tương ứng với các jump ST Morpho của Kit NUCLEO-F401RE
25
Led RGB:
+ Led RGB gồm 3 led đỏ (RED), xanh lá (GREEN), xanh dương (BLUE). Để thay
đổi độ sáng, màu sắc của RGB, ta thay đổi độ sáng của từng led trong led RGB qua
việc xuất xung PWM từ vi điều khiển để điều chỉnh điện áp. Dựa trên hiện tượng
lưu ảnh của mắt, từ ba màu cơ bản của LED RGB, có thể tạo ra các màu theo ý
muốn.
+ Datasheet LED RGB: https://www.neumueller.com/en/artikel/spf0af0a
+ Source code: LED_RGB
26
Hình 1.22 Sơ đồ nguyên lý LED RGB
2.2. Giới thiệu Kit IoT Zigbee
a) Giới thiệu chung
+ IoT Zigbee board Kit với kích thước nhỏ gọn, tính năng phong phú được công ty
Lumi phát triển dựa trên dòng chip EFR32 Serial 2. Kit IOT Zigbee tích hợp sẵn
nhiều ngoại vi như: LED RGB, cảm biến nhiệt độ, độ ẩm, cảm biến từ, quang trở
đồng thời có khả năng truyền thông không dây qua mạng Zigbee.
27
Hình 1.24 3D mặt sau Kit IOT Zigbee
28
Hình 1.26 Layout mặt sau Kit IOT Zigbee
29
Hình 1.28 Sơ đồ nguyên lý của thiết bị KIT IOT ZIGBEE
30
Bảng 1.3 Danh mục thiết bị phần cứng phòng KIT IOT ZIGBEE
Số Thông số
Stt Tên thiết bị Vai trò
lượng kỹ thuật
- Hỗ trợ kết nối
Arduino, đầu nối ST
- STMicroelectronics morpho giúp dễ dàng
- STM32F4 Serial mở
Board NUCLEO-
1 01 -STM32F401RE rộng chức năng của nền
F401RE
MCU tảng phát triển mở
NUCLEO với
nhiều lựa chọn shield
chuyên dụng
-Vi xử lý (Processor)
-Bộ nhớ(Memory)
-Thực hiện chức năng
-Input/output pins
Vi điều khiển điều khiển và kết nối
2 01 -Ngoại vi (Peripheral)
EFR32MG21 thiết bị
-Clock (xung Clock)
-Bus interfaces
31
Điện áp hoạt động: 3.5V - 5.5V.
+ Dòng điện hoạt động: <
5 Còi – Buzzer 01 25mA. -Báo hiệu âm thanh
+ Tần số âm thanh: 2500 Hz.
32
+ Cổng Micro USB cung cấp điện áp 5V và hạ áp xuống 3.3V nhờ IC ổn áp
TLV70233. Ở chế độ bình thường, kit được cấp nguồn từ pin gồm 2 pin AA 1.5V
mắc nối tiếp. Khi cắm dây vào cổng Micro USB trên kit, mạch tự chuyển
khối cấp nguồn từ pin sang Micro USB.
+ Datasheet TLV70233:
https://www.ti.com/lit/ds/symlink/tlv702.pdf
33
+ Datasheet EFR32MG21:
https://www.silabs.com/wireless/zigbee/efr32mg21-series-2 -socs#
34
Khối cảm biến:
Cảm biến nhiệt độ - độ ẩm Si7020:
+ Cảm biến nhiệt độ, độ ẩm Si7020 là IC tích hợp đo nhiệt
độ, độ ẩm với độ chính xác cao, chuyển tín hiệu từ tương
tự sang tín hiệu số, giao tiếp với vi điều khiển qua chuẩn
giao tiếp I2C.
+ Dải đo độ ẩm: 0-80%RH, dung sai 土 4% RH.
35
Cảm biến từ SI7210:
+ Cảm biến từ Si7210 dựa trên nguyên lý của hiệu ứng Hall, với độ chính xác cao,
chuyển tín hiệu từ tương tự sang tín hiệu số, giao tiếp với vi điều khiển qua chuẩn
giao tiếp I2C.
+ Địa chỉ I2C: 0x33.
+ Điện áp hoạt động: 1.7-5.5V.
+ Datasheet Si7210: https://www.silabs.com/sensors/magnetic/si7210
36
+ Điện áp hoạt động: 2-3.6V.
+ Datasheet BS312:
https://www.senbasensor.com/products/ldr-switch-3pins-intelligent-pir-big-
windows.html
37
LED RGB:
+ LED RGB gồm 3 led đỏ (RED), xanh lá (GREEN), xanh dương (BLUE). Để thay
đổi độ sáng led RGB, ta thay đổi độ sáng của từng led trong led RGB qua việc xuất
xung PWM từ vi điều khiển để điều chỉnh điện áp. Dựa trên hiện tượng lưu ảnh của
mắt, từ 3 màu cơ bản của LED RGB, có thể tạo ra các màu theo ý muốn.
+ Datasheet led RGB: https://www.neumueller.com/en/artikel/spf0af0a
38
USB to COM:
+ USB to COM CP2102 là khối trung gian giao tiếp vi điều khiển EFR32MG21
với máy tính truyền và nhận dữ liệu thông qua chuẩn giao tiếp UART.
+ Datasheet CP2102: https://www.silabs.com/interface/usb-bridges/classic/device
.cp2102
39
2.3. Giới thiệu mạch nạp Kit IoT
+ Kết nối thiết bị KIT IOT ZIGBEE với nguồn USB trên máy tính thông qua dây
nạp J-Link V9. Pinout trên mạch nạp J-Link V9 (chỉ cần quan tâm tới chân SWDIO,
SWDCLK)
40
3. Giới thiệu thiết bị phần mềm IoT
3.1 Phần mềm lập trình vi điều khiển STM32
+ STM32CubeIDE là một phần mềm chứa tất cả các công cụ cần thiết để lập trình
cho kit STM32:
⚫ Chọn vi điều khiển hoặc board mạch phát triển để khởi tạo project
⚫ Khởi tạo và cấu hình ngoại vi thông qua giao diện đồ họa
⚫ Tạo ra mã nguồn từ chương trình C từ các cấu hình
⚫ Phát triển firmware
41
Hướng dẫn cài đặt và sử dụng phần mềm STM32CubeIDE
Bước1: Tải STM32CubeIDE cho Windows: https://www.st.com/en/development-
tools/stm32cubeide.html
42
Bước 5: Click Install để tiến hành cài đặt
Bước 6: Finish
43
Bước 7: File New-> STM32 Project
44
Bước 9: Thêm thư viện SDK_1.0.3_NUCLEO-F401RE vừa tải về vào project:
Chọn Properties
9.1. Chọn C/C++ General → Path and Symbols → Source Location → Link Folder
45
9.2. Chọn tích Link to folder in the system
46
9.4. Nhấn OK
Bước 10: Sau khi đã thêm thư viện SDK_1.0.3_NUCLEO-F401RE, các bạn cần phải
tạo đường dẫn đến thư mục: Chuột phải Project/Properties
47
10.1. Chọn C/C++ Build → Setting → Tool Setting → Include paths trong
MCU GCC Compiler → chọn Add → chọn Workspace
48
10.2. Chọn các đường dẫn sau:
+ SDK_1.0.3_NUCLEO-F401RE/shared/Drivers/CMSIS/Include
+ SDK_1.0.3_NUCLEO-F401RE/shared/Drivers/STM32F401RE_St
dPeriph_Driver/inc
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/button
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/rtos
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/serial
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/buzzer
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/led
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/sensor
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/ucglib
+ SDK_1.0.3_NUCLEO-F401RE/shared/Utilities
49
10.3. Trong C/C++ Build → Setting → Tool Setting → Libraries trong MCU
GCC Linker→ chọn Add → Workspace
50
10.4. Trong Library search paths (-L) thêm đường dẫn sau:
SDK_1.0.3_NUCLEO-F401RE\lib_stm.
51
Bước 11: Coding trong main.c file
Bước 13: Xem các thao tác báo lỗi và cảnh báo
52
Bước 14: Xem các thông tin về quá trình biên dịch
Bước 15: Thao tác tìm đến khai báo định nghĩa: Ctrl + click vào một hàm
53
Bước 16: Đi đến vị trí chỉnh sửa gần nhất: Ctrl + Q, Ctrl + Alt + Right
Bước 2: Trên cửa sổ New Project, lựa chọn Silicon Labs AppBuilder
Project => Next
54
Bước 3: Lựa chọn Silicon Labs Zigbee (chỉ lựa chọn được khi đã tải SDK) -->
Next
55
Bước 5: Lựa chọn Project mẫu mà bạn muốn khởi tạo, đối với mỗi project,
SDK đều cung cấp cho chúng ta các đoạn mô tả để biết được project đó
được sử dụng để làm gì.
Lưu ý: Đối với SDK 6.7, IDE sẽ gặp lỗi khi tạo blank project (blank application) vì
vậy không được tích vào phần Start with a blank application
Bước 6: Đặt tên và lựa chọn đường dẫn lưu trữ project
56
Bước 7:
- Nếu sử dụng Development Board được phát triển từ Silicon Labs, lựa chọn vào
mục Board - nhập tên board
- Nếu sử dụng module được phát triển từ Silicon Labs, lựa chọn vào Part –nhập tên
module (VD: EFR32MG21A010F512IM32)
- Lựa chọn Compiler cho chương trình (VD: GNU, IAR,…). Finish
Bước 8: Mở file Z3LightSoc.isc để cấu hình. Trong Tab ZCL Cluster xóa
endpoint 2 và 3 đi vì không sử dụng
57
Kết quả
58
Bước 9: Trong mục ZCL device type => ZigBee Custom
59
Bước 11: Trong Tab HAL chọn None cho mục Bootloader vì chưa sử dụng
Bước 12: Trong Tab Plugin search green và bỏ chọn Green Power, Green
Power Library, provides API:
60
Bước 14: Search color và bỏ tích
61
Bước 16: Sử dụng Callback Hal Button Isr để dùng hàm xử lý nút nhấn với tham
số là
button: xác định xem nút nào được nhấn
state: xác định trạng thái của nút nhấn là nhấn hay nhả. Sử dụng Main Init để biết
khi nào thiết bị được khởi động lại
Bước 17: Chọn Generate để Simplicity Studio tạo ra các file cần thiết sau khi đã
cấu hình xong
62
Bước 18: Cấu hình chân trong file Hardware configurator
63
18.2. Trong mục UART0 =>Chân TX-PA5, Chân RX-PA6
18.3. Chọn Flow control mode => No flow control TX Pin: PA5
RX Pin: PA6
18.4. Trong mục Button, cấu hình chân cho nút nhấn
SW1-PD4, SW2-PD3
64
Bước 19: Sau đó tiến hành build chương trình bằng biểu tượng cây búa
Xuất hiện một số lỗi về thư viện. Kích đúp chuột vào lỗi để di chuyển
đến dòng bị lỗi
Những thư viện này không được dùng vì vậy hãy xóa nó đi hoặc sử
dụng // để comment chúng lại
Nếu tiếp tục lỗi thì hãy comment lại những dòng đó
65
Đã hết lỗi => Hoàn tất quá trình cấu hình
File .bin và file .hex được sử dụng để nạp vào vi điều khiển
Cách thức nạp code vào Kit IoT bằng phần mềm STM32CubeIDE
66
Bước 2: Trên phần mềm STM32CubeIDE, chọn click phải chuột vào project
muốn nạp vào Kit, chọn Run As, sau đó chọn STM32 Cortex-M C/C++
Application
Bước 3: Lần đầu tiên nạp project sẽ xuất hiện bảng Configuration
67
Bước 4: Run As
68
3.4 Phần mềm nạp code vào vi điều khiển Kit IoT Zigbee
Bước 1: Chọn Generate để Simplicity Studio tạo ra các file.isc cần thiết
Bước 2: Trong file.isc được sinh ra trong project, lựa chọn Generate để
sinh ra các file thư viện, phục vụ cho quá trình nạp firmware vào Kit
Bước 3: Có thể sử dụng một trong 3 file để tiến hành nạp firmware vào Kit
69
Bước 5: Mở phần mềm Commander:
C:\SiliconLabs\SimplicityStudio\v4\developer\adapter_packs\commander
Bước 6: Sau khi cắm Jlink được kết nối với Kit IoT Zigbee
70
Bước 7: Nạp firmware: Lựa chọn J-Link Device sau đó nhấn Connect để kết nối
với Jlink
Kết quả:
71
Bước 8: Nhấn Connect để kết nối với Kit IoT Zigbee
Kết quả:
72
Bước 9: Lựa chọn mục Tab Flash => Chọn Browse để chọn đường dẫn đến file
firmware
Bước 10: Lựa chọn đường dẫn đến project cần nạp firmware
Ví dụ
C:\Users\TrungNT\SimplicityStudio\v4_workspace\SW_ZB_V1_0_0\GNU
ARM v7.2.1 – Default
Lưu ý: Thư mục GNU ARM v7.2.1 - Default là nơi lưu trữ firmware để nạp
vào Kit
73
Bước 11: Nhấn Erase chip để xóa dữ liệu trong Flash
74
Bước 12: Nhấn Flash để nạp firmware
75
3.5. Giới thiệu giao thức truyền thông không dây Zigbee
+ Tần số sử dụng phụ thuộc vào dải băng tần ở quốc gia, chuẩn này xây
dựng trên ba băng tần, có tất cả 27 kênh:
• 868.0 – 868.6Mhz: Châu âu – 1 kênh, sử dụng kênh số 0
76
• 902.0 – 928.0Mhz: Mỹ - 10 kênh – từ kênh 1 – 10
• 2.40 – 2.48Ghz: Toàn thế giới – 16 kênh – từ 11 – 26.
77
• Zigbee Green Power
• Zigbee 3.0
+ Zigbee 3.0 là sự tổng hợp của cả 03 loại mô hình: Zigbee HA 1.2; Zigbee
Light Link; Zigbee Green Power.
d)Thành phần và vai trò thiết bị Zigbee 3.0
78
Router đặc biệt:
• Tìm kênh lựa chọn kênh tần phù hợp.
• Tạo mạng Centralized Network
• Địa chỉ mạng cố định: 0x0000
• Quy định thông tin mạng: PAN-ID, Extended PanID, Network Key
• Quản lý các hoạt động mạng: gia nhập, trao đổi thông tin
• Duy trì tổng thể bảo mật của mạng
+ Zigbee Router (ZR)
Có đầy đủ các chức năng như:
• Truyền bản tin
• Nhận bản tin
• Chuyển tiếp bản tin
• Cung cấp dịch vụ định tuyến cho hạ tầng mạng
• Chịu trách nghiệm về lưu thông trong mạng (routing traffic)
• Là thiết bị được thiết kế luôn thức
+ Zigbee End Device (ZED)
• KHÔNG tham gia giao thông mạng
• Giao tiếp với duy nhất với một thiết bị: ZR hoặc ZC
• Muốn truyền bản tin đến ZED, phải thông qua Parent
79
e) Các phương thức giao tiếp trong Zigbee
Beacon:
+ Là loại giao thức giao tiếp đồng bộ
● Sử dụng cấu trúc superframe:
○ Chia là 16 khe
○ Gồm 2 giai đoạn:
■ CAP – Giai đoạn tranh chấp truy cập
■ CFP - Giai đoạn tranh chấp tự do
Lưu ý: Trong giai đoạn tranh chấp truy cập, tất cả các thiết bị muốn truyền dữ liệu
trên kênh tần số cần phải sử dụng giao thức CSMA-CA.
80
● Giai đoạn tranh chấp tự do:
Zigbee Coordinator sẽ cung cấp những khe thời gian cụ thể đến cho từng thiết bị,
những khe này được gọi là Guaranteed time slot (GTS)
Lưu ý: Thiết bị được cung cấp GTS sẽ thoải mái thực hiện quá trình truyền – nhận
bản tin trong khoảng thời gian GTS mà KHÔNG CẦN phải sử dụng cơ chế CSMA-
CA.
82
+ Truyền từ thiết bị => ZC.
● Thiết bị phải đồng bộ xung thời gian
thường xuyên. Để gửi bản tin đến cho ZC
83
+ Truyền từ Coordinator => thiết bị.
84
85
+ Truyền từ thiết bị => thiết bị:
86
4. Quy trình kiểm tra thiết bị Kit IoT
4.1. Quy trình kiểm tra thiết bị phần cứng
Bảng 4.1 Quy trình kiểm tra thiết bị phần cứng Kit IoT STM32
87
Bảng 4.2 Quy trình kiểm tra thiết bị phần cứng Kit IoT Zigbee
88
Hình 3.1 Giao diện phần mềm STM32 ST-LINK Utility
Bước 2: Kết nối thiết bị KIT IOT STM (bao gồm BOARD STM và Kit
mở rộng) với nguồn USB trên máy tính thông qua dây cáp mini USB.
Bước 3: Mở phần mềm STM32 ST-LINK Utility, trên thanh công cụ
hãy click vào Target và chọn Connect để kết nối máy tính với BOARD
STM32. Kết nối thành công, phần mềm sẽ hiển thị như hình sau.
Hình 3.2 Phần mềm kết nối thành công với thiết bị
89
Bước 4: Click vào Binary File để lựa chọn file.bin cần nạp cho BOARD STM32.
90
Bước 6: Hoàn tất quá trình nạp phần mềm.
91
Bước 2: Kết nối thiết bị KIT IOT ZIGBEE với nguồn USB trên máy tính thông qua
dây nạp J-Link V9.
● Pinout trên mạch nạp J-Link V9 (chỉ cần quan tâm tới chân SWDIO, SWDCLK)
92
Bước 3: Xóa và nạp phần mềm
93
5. Quy định về quản lý & bảo dưỡng thiết bị phòng lab
5.1. Quy định về quản lý thiết bị
+ Thời gian mỗi buổi thực hành là từ 3-4 giờ, chia làm 10-12 nhóm nhỏ, mỗi nhóm
2 sinh viên/1 bộ kit/1 máy tính, 8 bộ kit dự phòng.
+ Trước mỗi buổi thực hành, mỗi nhóm sinh viên được cung cấp: 1 phiếu bàn giao
thiết bị thực hành bao gồm danh mục các thiết bị thực hành, cuối buổi thực hành
sinh viên kiểm tra và nộp lại phiếu bàn giao + thiết bị thực hành
5.2. Quy định về bảo dưỡng thiết bị
+ Sau khi sử dụng xong thiết bị, các bạn cần phải thực hiện các bước sau để bảo
dưỡng thiết bị:
Bước 1: Kiểm tra phần mềm trên máy tính có đang nạp phần mềm hay không, nếu
có thì dừng quá trình nạp và đóng phần mềm lại.
Bước 2: Tháo dây USB kết nối giữa thiết bị và máy tính. Riêng đối với thiết bị KIT
IOT ZIGBEE, các bạn phải tháo pin ra để đảm bảo pin vẫn còn năng lượng cho
quá trình thí nghiệm tiếp theo.
Bước 3: Thu gọn thiết bị và dây kết nối cho vào hộp đựng để nơi khô thoáng, dễ
tìm và quản lý.
94
II. GIỚI THIỆU CÁC NỘI DUNG THỰC HÀNH IoT
1.Thực hành lập trình nhúng với STM32
+ Sinh viên tra cứu tài liệu sử dụng phần mềm STM32CubeIDE,
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ cách thức tạo một project, thêm các thư viện, định nghĩa
các macro, xây dựng các hàm chức năng trên phần mềm STM32CubeIDE.
+ Sinh viên nắm rõ sơ đồ đấu nối chân của led và nút nhấn trên mạch Nucleo
F401RE
95
Bước 2: Giải nén chúng ta sẽ nhận được file cài đặt
96
Bước 5: Click Install để tiến hành cài đặt
Bước 6: Finish
97
Bước 7: File New-> STM32 Project
98
Bước 9: Thêm thư viện SDK_1.0.3_NUCLEO-F401RE vừa tải về vào project:
Chọn Properties
99
9.1. Chọn C/C++ General → Path and Symbols → Source
Location → Link Folder
100
9.4. Nhấn OK
101
Bước 10: Sau khi đã thêm thư viện SDK_1.0.3_NUCLEO-F401RE, các bạn cần
phải tạo đường dẫn đến thư mục: Chuột phải Project/Properties
10.1. Chọn C/C++ Build → Setting → Tool Setting → Include paths trong
MCU GCC Compiler → chọn Add → chọn Workspace
102
10.2. Chọn các đường dẫn sau:
+ SDK_1.0.3_NUCLEO-F401RE/shared/Drivers/CMSIS/Include
+ SDK_1.0.3_NUCLEO-F401RE/shared/Drivers/STM32F401RE_St
dPeriph_Driver/inc
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/button
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/rtos
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/serial
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/buzzer
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/led
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/sensor
103
+ SDK_1.0.3_NUCLEO-F401RE/shared/Middle/ucglib
+ SDK_1.0.3_NUCLEO-F401RE/shared/Utilities
104
10.3. Trong C/C++ Build → Setting → Tool Setting → Libraries trong MCU
GCC Linker→ chọn Add → Workspace
10.4. Trong Library search paths (-L) thêm đường dẫn sau:
SDK_1.0.3_NUCLEO-F401RE\lib_stm.
105
10.5. Tiếp tục trong Libraries(-l) → viết Libraries và Add
106
107
Bước 13: Xem các thao tác báo lỗi và cảnh báo
Bước 14: Xem các thông tin về quá trình biên dịch
Bước 15: Thao tác tìm đến khai báo định nghĩa: Ctrl + click vào một hàm
108
Bước 16: Đi đến vị trí chỉnh sửa gần nhất: Ctrl + Q, Ctrl + Alt + Right
109
Bài 2: Thực hành nạp code vào Kit bằng phần mềm STM32CubeIDE
Thực hành tạo và nạp code vào Kit bằng phần mềm STM32CubeIDE
+ Sinh viên tra cứu tài liệu sử dụng phần mềm STM32CubeIDE
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project, thêm các thư viện, định nghĩa các
macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ cách thức tạo và nạp code vào Kit bằng phần mềm
STM32CubeIDE
110
Bước 3: Trên phần mềm STM32CubeIDE, chọn click phải chuột vào project
muốn nạp vào Kit, chọn Run As, sau đó chọn STM32 Cortex-M C/C++
Application
Bước 4: Lần đầu tiên nạp project sẽ xuất hiện bảng Configuration
111
Bước 5: Run As
112
113
Bài 3: Thực hành nạp code vào Kit bằng phần mềm Stlink Utility
Thực hành tạo và nạp code vào Kit bằng phần mềm Stlink Utility
+ Sinh viên tra cứu tài liệu sử dụng phần mềm Stlink Utility
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project, thêm các thư viện, định nghĩa các
macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ cách thức tạo và nạp code code vào Kit bằng phần mềm
Stlink Utility
114
Bước 3: Trên phần mềm Stlink Utility, chọn Target/Connect
Bước 4: Mở file cần nạp vào Kit (file .bin hoặc .hex)
115
Bước 5: Chọn file Bai2.bin/Open
Bước 6: Xóa các tham số của phiên chạy lần trước: chọn Target/Erase Sectors
(CTRL+ E)
116
Bước 7: Select all/Apply
117
Bước 8: Bắt đầu nạp code vào Kit: Target/Program&Verify (CTRL+P)
118
Bước 9: Chọn đúng file path/Start
119
Bước 10: Kết quả code đã được nạp vào Kit
120
Bài 4: Thực hành giao tiếp hiển thị LCD: “Welcome to IoT LAB!”
Viết chương trình hiển thị dòng text " WELCOME TO IoT LAB " ra màn
hình LCD sử dụng Kit mở rộng.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE để biết được sơ đồ chân của LCD và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project, thêm các thư viện, định nghĩa các
macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ cách thức giao tiếp hiển thị LCD trên Kit mở rộng.
+ Sinh viên nắm rõ nắm rõ cách thức tạo một project, thêm các thư viện, định
nghĩa các macro, xây dựng hàm để cấp clock, hàm để khởi tạo chức năng timer, hàm
để hiển thị chữ lên LCD trên phần mềm STM32CubeIDE.
121
Bước 3: Khai báo biến thuộc kiểu cấu trúc struct của LCD.
static ucg_t ucg;
122
Hãy thử sử dụng hàm ucg_SetFont để thay đổi font chữ và cỡ chữ
Lựa chọn một một font chữ và cỡ chữ để sử dụng/Thay thế font chữ vào hàm
và thử nghiệm kết quả.
123
124
Bước 6: Chạy kết quả & Kết thúc
125
Bài 5: Thực hành cấu hình các nguồn cấp xung nhịp của hệ thống HSI
Viết một chương trình cấu hình đầu ra output trên một chân của MCU là một
xung nhịp HSI
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project, thêm các thư viện, định nghĩa các
macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ nắm rõ viết một chương trình cấu hình đầu ra output trên
chân của MCU
+ Sinh viên nắm rõ nắm rõ cách thức tạo một project, thêm các thư viện, định
nghĩa các macro, xây dựng hàm điều khiển led, hàm đọc giá trị nút ấn, hàm Delay
để chống rung nút ấn trên phần mềm STM32CubeIDE.
Bước 2: Định nghĩa địa chỉ cơ bản cho ngoại vi clock RCC, địa chỉ offset của
thanh ghi cấu hình RCC và địa chỉ cơ bản của ngoại vi GPIOA như sau:
126
#define RCC_BASE_ADDR 0x40023800UL
Bước 3: Khai báo biến con trỏ kiểu dữ liệu uint32_t trỏ đến địa chỉ thanh ghi
cấu hình RCC như sau:
Bước 4: Cấu hình trường bit MCO1 của thanh ghi RCC_CFGR để lựa chọn
HSI làm nguồn clock.
Bước 6: Cài đặt chân PA8 ở chế độ alternate function để hoạt động như tín hiệu
MCO1
+ Cài đặt chế độ của chân PA8 làm chức năng alternate function.
uint32_t *pGPIOAModeReg = (uint32_t*)(GPIOA_BASE_ADDR + 00);
127
*pGPIOAModeReg &= ~( 0x3 << 16); //clear
*pGPIOAModeReg |= ( 0x2 << 16); //set
+ Cài đặt thanh ghi alternation function ở chế độ 0 tương ứng với chân PA8.
uint32_t *pGPIOAAltFunHighReg = (uint32_t*)(GPIOA_BASE_ADDR + 0x24);
*pGPIOAAltFunHighReg &= ~( 0x0f << 0);
128
Bài 6: Thực hành cấu hình các nguồn cấp xung nhịp của hệ thống HSE
Viết một chương trình cấu hình đầu ra output trên một chân của MCU là một
xung nhịp HSE
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project, thêm các thư viện, định nghĩa các
macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ nắm rõ viết một chương trình cấu hình đầu ra output trên
chân của MCU
+ Sinh viên nắm rõ nắm rõ cách thức tạo một project, thêm các thư viện, định
nghĩa các macro, xây dựng hàm điều khiển led, hàm đọc giá trị nút ấn, hàm Delay
để chống rung nút ấn trên phần mềm STM32CubeIDE.
129
Bước 2: Định nghĩa địa chỉ cơ bản cho ngoại vi clock RCC, địa chỉ offset của
thanh ghi cấu hình, điều khiển RCC và địa chỉ cơ bản của ngoại vi GPIOA
như sau:
#define
RCC_BASE_ADDR
#define
0x40023800UL
RCC_CFGR_REG_OFFSE
0x08UL
T
0x00UL
#define
(RCC_BASE_ADDR +
RCC_CR_REG_OFFSET
RCC_CFGR_REG_OFFSET)
#define
(RCC_BASE_ADDR +
RCC_CFGR_REG_ADDR
RCC_CR_REG_OFFSET )
#define
0x40020000UL
RCC_CR_REG_ADDR
#define
GPIOA_BASE_ADDR
Bước 3: Khai báo biến con trỏ kiểu dữ liệu uint32_t trỏ đến địa chỉ thanh ghi
cấu hình CFGR và thanh ghi điều khiển CR như sau:
Bước 4: Cho phép xung clock HSE hoạt động bằng cách sử dụng bit HSEON
của thanh ghi điều khiển CR
130
Bước 5: Đợi cho đến khi xung clock HSE từ bộ động thạch anh ổn định (chỉ khi
bộ dao động thạch anh được kết nối)
Bước 6: Chuyển xung nhịp của hệ thống System Clock sang nguồn cấp HSE
*pRccCfgrReg |= ( 1 << 0)
Bước 7: Cấu hình các trường bit RCC_CFGR MCO1 để chọn HSE làm nguồn
cấp xung clock
Bước 9: Cài đặt chân PA8 ở chế độ alternate function để hoạt động như tín
hiệu MCO1.
+ Cài đặt chế độ của chân PA8 làm chức năng alternate function.
uint32_t *pGPIOAModeReg = (uint32_t*)(GPIOA_BASE_ADDR + 00);
*pGPIOAModeReg &= ~( 0x3 << 16); //clear
*pGPIOAModeReg |= ( 0x2 << 16); //set
+ Cài đặt thanh ghi alternation function ở chế độ 0 tương ứng với chân
PA8
131
uint32_t *pGPIOAAltFunHighReg = (uint32_t*)(GPIOA_BASE_ADDR +
0x24);
*pGPIOAAltFunHighReg &= ~( 0x0f << 0);
132
Bài 7: Thực hành cấu hình vào ra trạng thái trên các chân GPIO Led
Viết chương trình đảo trạng thái đầu ra của Led trên Board STM32F4 khi nút ấn
trên Board được nhấn.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project, thêm các thư viện, định nghĩa các
macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ cách thức cấu hình vào ra trạng thái trên các chân GPIO
Led, truyền nhận dữ liệu giữa GPIO và MCU trên Kit mở rộng
+ Sinh viên nắm rõ nắm rõ cách thức tạo một project, thêm các thư viện, định
nghĩa các macro, xây dựng hàm điều khiển led, hàm đọc giá trị nút ấn, hàm Delay
để chống rung nút ấn trên phần mềm STM32CubeIDE.
133
Bước 3: Định nghĩa các macro với tên gọi dễ nhớ giúp bạn dễ dàng trong khi
bạn viết chương trình.
Bước 4: Cấu hình chân PA5 của led trên Board STM32 ở chế độ output.
+ Trạng thái ban đầu trên chân là kéo xuống GND Pull Down.
+ Khởi tạo tất cả các giá trị bên trên bằng cách sử dụng hàm GPIO_Init với
đối số truyền vào là GPIOA và GPIO_InitStructure.
134
Bước 5: Cấu hình chân PC13 của nút nhấn trên Board STM32F401 ở chế độ
input.
+ Khai báo biến thuộc kiểu dữ liệu struct GPIO.● Cấp xung clock cho Port C.
+ Tốc độ xử lý là 50MHz
+ Khởi tạo tất cả các giá trị bên trên bằng cách sử dụng hàm GPIO_Init với
đối số truyền vào là GPIOC và GPIO_InitStructure.
135
Bước 6: Xây dựng hàm điều khiển Led với tham số truyền vào là GPIO nào và
chân được kết nối để điều khiển led:
+ Khi muốn bật led cần ghi mức logic 1 vào bit tương ứng của thanh ghi
BSRRL.
+ Khi muốn tắt led cần ghi mức logic 1 vào bit tương ứng của thanh ghi
BSRRH.
136
Bước 7: Xây dựng hàm đọc giá trị nút ấn:
+ Muốn đọc trạng thái nút ấn cần dịch bit tương ứng với nút ấn trong thanh
ghi IDR về bit số 0.
+ Sau đó sử dụng phép toán tử (AND) nhân giá trị sau khi dịch với 0x01 để
đọc giá trị trên chân làm chức năng nút ấn
Bước 8: Trong hàm while(1), thực hiện thuật toán đảo trạng thái led khi được
ấn nút.
137
Bài 8: Thực hành cấu hình vào ra trạng thái trên các chân GPIO Buzzer
Viết chương trình đảo trạng thái đầu ra của Buzzer trên Kit mở rộng khi nút
ấn trên kit được nhấn nút B5 trên Kit mở rộng STM32F401.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project, thêm các thư viện, định nghĩa các
macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ cách thức cấu hình vào ra trạng thái trên các chân GPIO
Buzzer, truyền nhận dữ liệu giữa GPIO và CPU trên Kit mở rộng
+ Sinh viên nắm rõ nắm rõ cách thức tạo một project, thêm các thư viện, định
nghĩa các macro, xây dựng hàm điều khiển Buzzer, hàm đọc giá trị nút ấn, hàm
Delay để chống rung nút ấn trên phần mềm STM32CubeIDE.
138
Bước 3: Định nghĩa các macro với tên gọi dễ nhớ giúp bạn dễ dàng trong khi
bạn viết chương trình.
Bước 4: Cấu hình chân PC9 của Buzzer trên Kit mở rộng STM32 ở chế độ
output:
+ Trạng thái ban đầu trên chân là kéo xuống GND Pull Down.
+ Khởi tạo tất cả các giá trị bên trên bằng cách sử dụng hàm GPIO_Init với
đối số truyền vào là GPIOC và GPIO_InitStructure.
139
Bước 5: Cấu hình chân B5 (PB4) của nút nhấn trên Kit mở rộng STM32 ở chế
độ Input.
+ Tốc độ xử lý là 50MHz.
+ Khởi tạo tất cả các giá trị bên trên bằng cách sử dụng hàm GPIO_Init với
đối số truyền vào là GPIOB và GPIO_InitStructure.
140
Bước 6: Xây dựng hàm điều khiển Buzzer với tham số truyền vào là GPIO nào
và chân được kết nối để điều khiển led:
+ Khi muốn bật led cần ghi mức logic 1 vào bit tương ứng của thanh ghi
BSRRL.
+ Khi muốn tắt led cần ghi mức logic 1 vào bit tương ứng của thanh ghi
BSRRH.
+ Muốn đọc trạng thái nút ấn cần dịch bit tương ứng với nút ấn trong thanh
ghi IDR về bit số 0.
141
+ Sau đó sử dụng phép toán tử (AND) nhân giá trị sau khi dịch với 0x01 để
đọc giá trị trên chân làm chức năng nút ấn
Bước 8: Trong hàm while(1), thực hiện thuật toán đảo trạng thái led khi được
ấn nút.
142
Bài 9: Thực hành cấu hình vào ra trạng thái trên các chân GPIO Led Red
Viết chương trình đảo trạng thái đầu ra của Led Red trên Kit mở rộng khi nút
ấn B2 trên Kit được nhấn.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ cách thức cấu hình vào ra trạng thái trên các chân GPIO,
truyền nhận dữ liệu giữa GPIO và CPU trên Kit mở rộng
+ Sinh viên nắm rõ nắm rõ cách thức tạo một project, thêm các thư viện, định
nghĩa các macro, xây dựng hàm điều khiển Led, hàm đọc giá trị nút ấn, hàm Delay
để chống rung nút ấn trên phần mềm STM32CubeIDE.
143
Bước 3: Định nghĩa các macro với tên gọi dễ nhớ giúp bạn dễ dàng trong khi
bạn viết chương trình.
Bước 4: Cấu hình chân PB13 của Led_Red trên Kit mở rộng STM32 ở chế độ
output.
+ Trạng thái ban đầu trên chân là kéo xuống GND Pull Down.
+ Khởi tạo tất cả các giá trị bên trên bằng cách sử dụng hàm GPIO_Init với
đối số truyền vào là GPIOB và GPIO_InitStructure.
144
Bước 5: Cấu hình chân PB3 của nút nhấn B2 trên Kit mở rộng STM32 ở chế
độ input.
+ Tốc độ xử lý là 50MHz.
+ Khởi tạo tất cả các giá trị bên trên bằng cách sử dụng hàm GPIO_Init với
đối số truyền vào là GPIOB và GPIO_InitStructure.
145
Bước 6: Xây dựng hàm điều khiển Led với tham số truyền vào là GPIO nào và
chân được kết nối để điều khiển led:
+ Khi muốn bật led cần ghi mức logic 1 vào bit tương ứng của thanh ghi
BSRRL.
+ Khi muốn tắt led cần ghi mức logic 1 vào bit tương ứng của thanh ghi
BSRRH.
+ Muốn đọc trạng thái nút ấn cần dịch bit tương ứng với nút ấn trong thanh
ghi IDR về bit số 0.
146
+ Sau đó sử dụng phép toán tử (AND) nhân giá trị sau khi dịch với 0x01 để
đọc giá trị trên chân làm chức năng nút ấn
Bước 8: Trong hàm while(1), thực hiện thuật toán đảo trạng thái led khi được
ấn nút.
147
Bài 10: Thực hành lập trình xây dựng header file cho thư viện GPIO
Viết chương trình xây dựng header file cho thư viện GPIO
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được các địa chỉ cơ bản của đường bus AHB1, APB1,
APB2, cấu trúc GPIO handle
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi GPIO
148
149
Bước 3: Bắt đầu lập trình với file header: stm32f401re_gpio.h
150
Bước 5: Định nghĩa GPIO_Pin
Bước 6: Định nghĩa Config GPIO mode (Viết trên vị trí của struct GPIO Init)
151
Bước 7: Định nghĩa Config GPIO Output Type (Viết trên vị trí của struct GPIO
Init)
Bước 8: Định nghĩa Config GPIO Speed (Viết trên vị trí của struct GPIO Init)
Bước 9: Định nghĩa Config GPIO Pull-up/Pull-down (Viết trên vị trí của struct
GPIO Init)
Bước 10: Định nghĩa Config GPIO Bit Set and Reset (Viết trên vị trí của struct
GPIO Init)
152
Bước 11: Định nghĩa PinSource (Viết trên vị trí của struct GPIO Init)
153
154
Bước 12: Kết quả
Trong file.h ta sẽ khai báo các hàm nguyên mẫu cho file source để các file
155
156
Bài 11: Thực hành lập trình xây dựng source file cho thư viện GPIO
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được các địa chỉ cơ bản của đường bus AHB1, APB1,
APB2, cấu trúc GPIO handle
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi GPIO
157
Bước 3: Lập trình các hàm sử dụng GPIO
158
+ GPIO_Init : khởi tạo các thông số cho GPIO
159
Bước 5: Cấu hình mode cho GPIO
Reset bit trên thanh ghi MODER, sau đó mới ghi giá trị vào thanh ghi MODER
Lưu ý: pinpos * 2 vì thanh ghi MODE sử dụng 2 bit cho 1 chân
160
Lưu ý: SPEED và OTYPE chỉ cấu hình cho Output mode và Alternate
function.
161
Với chế độ Alternate Function đã được sử dụng mảng AFR[2] để lưu trữ đã
được khai báo là thành viên của struct trong file stm32f401re.h
162
Bước 9: GPIO_DeInit
163
Bước 11: GPIO_ReadInputDataBit
164
Bước 13: GPIO_ReadOutputData
165
Bước 15: GPIO_WriteBit and Write Bit
166
Bước 16: GPIO_ToggleBits
167
Bài 12: Thực hành lập trình xây dựng header file của MCU STM32F401RE
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được các địa chỉ cơ bản của đường bus AHB1, APB1,
APB2, cấu trúc GPIO handle
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi GPIO
168
Bước 2: Tải file thư viện cơ bản do ST cung cấp
Bước 3: Thêm thư viện cơ bản của stm32 vừa tải về vào project
Bước 4: Thêm các đường dẫn tới thư viện (Chọn Include, inc, Utilities).
169
Bước 5: Thêm đường dẫn đến thư viện (lib_stm) và Libraries
170
Bước 6: Theo dõi file header do nhà sản xuất cung cấp cho stm32 trong SDK
171
Bước 8: Địa chỉ của các Bus: AHB1, AHB2, APB1, APB2.
172
173
Bước 9: Lấy địa chỉ cơ bản rồi cộng với địa chỉ offset
174
Bước 11: Add thêm các ngoại vi trên Bus AHB1 dựa vào bảng 1 trong Reference
manual
175
Bus AHB2
Bus APB1
176
Bus APB2
177
Bước 12: Xây dựng GPIO peripheral
178
179
Sử dụng Mảng AFR[2] làm việc với AFRL và AFRH
Lưu ý: Khi làm việc với thanh ghi nên khai báo thanh ghi với volatile để
tránh trường hợp các biến lưu trữ giá trị thanh ghi bị thay đổi trong quá
trình tối ưu hóa (Hãy tìm hiểu về volatile nếu bạn chưa rõ).
180
Sử dụng Địa chỉ cơ bản của các PORT để làm việc với các thanh ghi
là thành viên trong struct
Tra cứu thông tin về các thanh ghi thông qua RCC register map
181
Thông qua RCC register map viết kiểu dữ liệu struct cho thanh ghi RCC
182
Định nghĩa kiểu cấu trúc cho RCC để có thể làm việc với các thanh ghi
183
Set các bit tương ứng trong thanh ghi lên 1.
184
185
Cấp xung Clock cho ngoại vi qua Bus AHB2ENR
186
Bước 14: Kết quả
187
Bài 13: Thực hành cài đặt và cấu hình GIT
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được các địa chỉ cơ bản của đường bus AHB1, APB1,
APB2, cấu trúc GPIO handle
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi GPIO
Bước 1: Vào trang web tải Git. Bạn lựa chọn mục Downloads
188
Bước 2: Bạn chọn phiên bản dành cho Windows
Bước 3: Mở file Git bạn vừa mới tải xuống chọn Run
189
Bước 4: Một cửa sổ cài đặt hiện ra bạn chọn Next
Bước 5: Lựa chọn vị trí lưu mà bạn mong muốn sau đó chọn Next
190
Bước 6: Cửa sổ tiếp theo đã có những lựa chọn mặc định cho bạn, bạn có thể
chọn thêm các mục khác theo nhu cầu bản thân. Hoặc cài đặt như bản mặc định
của nhà phát triển. Bạn chọn Next để tiếp tục cài đặt
Bước 7: Tiếp đến là lựa chọn đặt vị trí Git vào Start Menu trong mục Browse.
Bạn có thể chọn Don't create a Start Menu folder nếu không muốn tạo ra thư
191
mục của Git trên Start Menu hoặc bạn cũng có thể để mặc định, sau đó chọn
Next
Bước 8: Tiếp đến chương trình sẽ yêu cầu bạn lựa chọn một chương trình
soạn thảo để biên tập lệnh cho Git bash. Có rất nhiều chương trình khác nhau
để bạn lựa chọn, nhưng nếu sử dụng Win 10, bạn nên để trình mặc định Vim
mà phần mềm đã chọn sẵn, sau đó bạn chọn Next để tiếp tục cài đặt
192
Bước 9: Tiếp theo, phần cài đặt Git yêu cầu bạn lựa chọn cài đặt về biến môi
trường. Khi cài trên Windows 10 bạn nên sử dụng lựa chọn mặc định Git from
the command line and also from 3rd-party software (Git từ dòng lệnh và cả
từ phần mềm của bên thứ ba). Sau đó chọn Next
+ Nếu không cần dùng biến Path để là môi trường mặc định cho Git thì bạn
có thể lựa chọn Use Git from Git Bash only (chỉ sử dụng Git từ Git
Bash)
+ Hoặc chọn Use Git and optional Unix tools from the Command
Prompt nếu muốn sử dụng Git và các công cụ Unix tùy chọn từ
Command Prompt
193
Bước 10: Tiếp theo là lựa chọn phương thức bảo mật. Bạn có thể lựa chọn
phương thức mình mong muốn nhưng tốt nhất là nên giữ lại lựa chọn mặc định
là Use the OpenSSL library (sử dụng thư viện OpenSSL) của phần mềm.
Chọn Next để tiến hành bước tiếp theo.
Bạn có thể chọn Use the native Window Secure Channel library để sử dụng
thư viện gốc Window Secure Channel làm phương thức bảo mật
Tuy nhiên để có giao diện tiếng Việt đẹp mắt và dễ dàng sử dụng, thao tác
chúng ta nên giữ nguyên mục Use MinTTY the default terminal of MSYS2
(sử dụng MinTTY thiết bị mặc định của MSYS2). Sau đó chọn Next
194
Bước 11: Tiếp đến bạn sẽ lựa chọn hành vi mặc định của git. Bạn để nguyên
lựa chọn mặc định là Default (fast- forward or merge) là chế độ mặc định của
phần mềm. Chọn Next.
Bạn cũng có thể lựa chọn các mục khác như:
+ Rebase
195
Bước 12: Chọn mục trợ giúp chứng chỉ, để nguyên lựa chọn mặc định là Git
credential Manager (Trình quản lý thông tin xác thực Git). Sau đó chọn Next.
Bạn cũng có thể lựa chọn các mục khác như:
+ None: Không cần
+ Git credential Manager Core: Trình quản lý thông tin xác thực Git Core
196
Bước 13 : Tiếp đến bạn sẽ lựa lựa chọn cấu hình tùy chọn bổ sung, bạn để
mặc định là Enable file system caching. Chọn Next.
Bước 14: Cuối cùng bạn lựa chọn Install để kết thúc quá trình cài đặt. Bạn có
thể chọn Enable experimental support for pseudo consoles (bật hỗ trợ thử
nghiệm cho bảng điều khiển giả)
197
Bước 15: Cuối cùng bạn sẽ có 2 mục để bạn lựa chọn:
+ Mục Launch Git Bash: để mở cửa sổ dòng lệnh của Git lên ngay sau đó.
+ Mục View Release Notes: để xem ghi chú về các thay đổi của phiên bản
này so với các phiên bản trước đó.
Các bạn có thể lựa chọn tùy theo nhu cầu của bản thân. Và chọn Finish để
hoàn tất cài đặt.
198
Bước 16: Mở cửa sổ Git Bash: Click phải chuột -> chọn Git Bash Here
Sử dụng câu lệnh git version để kiểm tra xem git được cài đặt chưa
199
Bước 17: Cấu hình Git
Việc đầu tiên bạn nên làm khi cấu hình Git là chỉ định tên tài khoản và địa chỉ
email. Điều này rất quan trọng vì những thông tin này sẽ được sử dụng xuyên
suốt trong tất cả quá trình sau này của bạn.
Để cài đặt tên người sử dụng, sử dụng lệnh git config --global user.name "{Tên}"
Để cài đặt email người sử dụng, sử dụng lệnh git config --global user.email "{Địa
chỉ email}"
200
+ git config X (X là tên thuộc tính cần xem giá trị cấu hình)
+ git help X
+ git X –help
+ man git-x
201
Bài 14: Thực hành lập trình thư viện GIT
+ Sinh viên nắm rõ thao tác tạo một project, thêm các thư viện, định nghĩa các
macro trên phần mềm GIT
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ về lập trình lập trình thư viện GIT
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
Bước 1: Cài đặt và cấu hình Git như nội dung Bài 13.
202
Bước 3: Sử dụng câu lệnh: git init để khởi tạo Local Repository
Bước 4: Sử dụng câu lệnh git status để kiểm tra trạng thái các thư mục, tệp
tin trong Repository
203
Có một file.txt ở trạng thái Untracked
Bước 6: Sử dụng câu lệnh git add file.txt để đưa file.txt vào vùng Staging
Area
204
Sau đó dùng git status để kiểm tra. Chữ màu xanh => File đã vào vùng
Staging Area và đợi Commit
Lưu ý: Nếu muốn đưa tất cả các file vào vùng Staging Area thì sử dụng câu
lệnh: git add .
Bước 7: Sử dụng câu lệnh git commit -m ‘content’ để đưa các file ở vùng
Staging Area lên Local Repository
205
Sử dụng câu lệnh git status thấy được file.txt đang ở trạng thái bị thay đổi
+ git status
+ git add .
+ git status
+ Sử dụng câu lệnh git reset HEAD report.txt Hoặc git rm --cached
report.txt.
+ git status
206
+ Sử dụng .gitignore để không theo dõi các tập tin được chỉ định (Từ một số
file được thêm vào vùng Staged)
+ Nếu có một số tập tin bạn không muốn Commit hay không muốn đưa vào
Staging Area thì nên sử dụng gitignore
207
Thêm nội dung vào file .gitignore
Không còn 2 file content1 và content2 xuất hiện trong màn hình console
208
Sử dụng câu lệnh này để thêm Remote Repository
209
Bước 10: Đẩy Local Repository lên Remote Repository
210
git branch: xem các branch và branch hiện tại
211
Nếu bạn muốn có một bản sao của một kho chứa Git có sẵn, có thể là một dự
án mà bạn tham gia – thì bạn hãy thực hiện clone.
212
Bài 15: Thực hành debug chương trình cấu hình GPIO
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được các địa chỉ cơ bản của đường bus AHB1, APB1,
APB2, cấu trúc GPIO handle
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi GPIO
213
Bước 3: Cắm kết nối kit với máy tính. Biên dịch chương trình và đảm bảo
chương trình không có lỗi
214
Bước 4: Lựa chọn Switch: Chuyển đổi sang giao diện Debug
+ Khi mới khởi động giao diện debug thì chương trình dừng lại tại hàm
đầu tiên tiên trong hàm main.
+ Chương trình đang dừng ở câu lệnh nào thì câu lệnh đó chưa được thực
hiện
215
216
217
Bước 6: Xem giá trị các biến
Mở cửa sổ Live Expressions để theo dõi giá trị các biến trong quá trình Debug
218
+ Biến toàn cục (ví dụ biến globalVariable): Gõ tên biến toàn cục vào cửa
sổ Live Expressions trước khi thực thi các lệnh hoặc bất cứ khi nào trong quá trình
debug
+ Biến địa phương(ví dụ biến localVariable): Gõ tên biến địa phương vào
cửa sổ Live Expressions khi chương trình đã nhảy vào hàm chứa biến cục bộ đó
Lưu ý: Biến địa phương sẽ chỉ theo dõi được khi còn ở trong hàm của nó. Khi
thoát khỏi hàm thì biến địa phương sẽ được giải phóng, không thấy giá trị của
biến trong bảng Live Expressions
219
Lựa chọn Window => Show View => SFRs.
Mở cửa sổ SFRs để xem các thanh ghi ngoại vi
LED GREEN (GPIOA, Pin0) được bật lên tương ứng bởi Bit 0 trên thanh ghi ODR
được set lên 1
Lưu ý:
220
+ Giá trị thanh ghi sẽ được cập nhật mỗi khi dừng lại tại Breakpoint.
+ Nhấn vào RD (Force read selected register) để yêu cầu cập nhật
giá trị mới nhất của thanh ghi nếu không đặt Breakpoint.
Xem các thanh ghi được cập nhật tự động thông qua cửa sổ Live
Expressions
221
Bài 16: Thực hành cấu hình ngắt ngoài cho nút nhấn trên Board STM32F4
Viết chương trình cấu hình ngắt ngoài cho nút nhấn trên Board STM32F401
Nucleo. Khi có ngắt xảy ra trên chân PC13 thì led trên chân PA5 sẽ được bật và sau
đó sẽ trở lại trạng thái tắt như ban đầu.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được các địa chỉ cơ bản của đường bus AHB1, APB1,
APB2, cấu trúc GPIO handle
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi GPIO
Bước 3: Cấu hình chân PA5 của led trên Board STM32 ở chế độ output
+ Trạng thái ban đầu trên chân là kéo xuống GND Pull Down.
+ Khởi tạo tất cả các giá trị bên trên bằng cách sử dụng hàm GPIO_Init với
đối số truyền vào là GPIOA và GPIO_InitStructure
Bước 4: Xây dựng hàm Interruppt_Init cấu hình cho phép ngắt khi nút ấn kết
nối với chân PC13 khi được ấn như sau
223
4.1. Khai báo các biến thuộc kiểu dữ liệu cấu trúc của GPIO, EXTI và
NVIC
224
4.4. Cấu hình sử dụng ngắt
+ Sử dụng hàm EXTI_Init để khởi tạo tất cả các giá trị ở trên với đối số là
&EXTI_InitStructure
+ Sử dụng hàm NVIC_Init để cấu hình các giá trị ở trên với đối số là
&NVIC_InitStructure
225
Bước 5: Khai báo hàm phục vụ ngắt trên chân PC13 như sau
+ SystemCoreClockUpdate
+ Led_Init
+ Interruppt_Init
226
227
Bài 17: Thực hành cấu hình ngắt ngoài cho nút nhấn trên Kit mở rộng
Viết chương trình cấu hình ngắt ngoài cho nút nhấn trên Kit mở rộng. Khi ấn
nút B2 trên kit mở rộng thì Led Green trên kit mở rộng sẽ đảo trạng thái sau đó Led
sẽ quay về trạng thái ban đầu.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được các địa chỉ cơ bản của đường bus AHB1, APB1,
APB2, cấu trúc GPIO handle
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi GPIO
Bước 3: Cấu hình chân PA0 của led trên Kit STM32 ở chế độ output
+ Trạng thái ban đầu trên chân là kéo xuống GND Pull Down.
+ Khởi tạo tất cả các giá trị bên trên bằng cách sử dụng hàm GPIO_Init với
đối số truyền vào là GPIOA và GPIO_InitStructure.
Bước 4: Xây dựng hàm Interruppt_Init cấu hình cho phép ngắt khi nút nhấn
kết nối với chân B2 trên Kit STM32F401
229
4.1. Khai báo các biến thuộc kiểu dữ liệu cấu trúc của GPIO, EXTI và
NVIC
230
4.4. Cấu hình sử dụng ngắt
+ Sử dụng hàm EXTI_Init để khởi tạo tất cả các giá trị ở trên với đối số là
&EXTI_InitStructure.
+ Sử dụng hàm NVIC_Init để cấu hình các giá trị ở trên với đối số là
&NVIC_InitStructure.
Bước 5: Khai báo hàm phục vụ ngắt trên chân PB4 như sau
231
EXTI_ClearITPendingBit(EXTI_Line3) xóa cờ ngắt sau khi thực hiện
xong chương trình ngắt.
+ SystemCoreClockUpdate
+ Led_Init
+ Interruppt_Init
232
233
Bài 18: Thực hành truyền và nhận dữ liệu với ngoại vi SPI
Viết chương trình truyền dữ liệu có giá trị là 0xB1 từ SPI Master sang SPI
Slave sử dụng của STM32F401RE. Nhấn nút PC13 để gửi dữ liệu từ SPI2 => SPI1.
Nếu dữ liệu nhận được từ SPI Slave trùng với dữ liệu được truyền đi từ SPI Master
thì Led Green trên Kit (PA5) sẽ bật tắt 5 lần rồi trở lại trạng thái ban đầu.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được cách truyền và nhận dữ liệu với ngoại vi SPI
234
Bước 2: Kết nối phần cứng giữa ngoại vi SPI1 (Slave) và SPI2 (Master) trên
Board STM32 với nhau như sau:
Lưu ý: Khi thực hiện bài này phải tháo kit mở rộng ra chỉ sử dụng board
Nucleo-F401RE
Bước 4: Khai báo các Macro giúp quá trình lập trình dễ dàng hơn
Bước 5: Xây dựng hàm khởi tạo sử dụng SPI2 với chế độ Master:
5.1. Khai báo các kiểu dữ liệu thuộc kiểu cấu trúc GPIO, SPI.
236
5.2. Khởi tạo các chân GPIO với chức năng của các chân SS, SCK, MISO,
MOSI
+ Cho phép cấp clock cho các chân sử dụng với chức năng SPI
+ Chọn chế độ điều khiển trên chân là đẩy kéo Push Pull.
+ Chọn các chân trên vi điều khiển làm chức năng SPI.
+ Sử dụng hàm GPIO_Init với tham số truyền vào là GPIO nào, biến dữ
liệu thuộc kiểu dữ liệu Struct GPIO để cài đặt các tham số đã được gắn ở trên.
+ Sử dụng hàm GPIO_PinAFConfig cài đặt các chân GPIO với chức năng
Alternate Function với đối số truyền vào là GPIO nào, chân được sử dụng với chức
năng Alternate Function và chân GPIO thuộc AF mấy.
237
5.3. Khởi tạo sử dụng ngoại vi SPI với chế độ Master:
+ Chọn cực tính xung trên chân SCK là ở mức thấp (CPOL).
+ Sử dụng hàm SPI_Init với tham số truyền vào là SPI nào và biến dữ liệu
kiểu struct SPI để cài đặt các giá trị đã được khởi tạo bên trên.
238
+ Sử dụng hàm SPI_Cmd với tham số truyền vào là SPI đang sử dụng và
trạng thái kết nối để sử dụng SPI.
Bước 6: Xây dựng hàm khởi tạo sử dụng SPI1 ở chế độ Slave
6.1. Khai báo các kiểu dữ liệu thuộc kiểu cấu trúc GPIO, SPI, NVIC.
6.2. Khởi tạo các chân GPIO với chức năng của các chân SS, SCK, MISO,
MOSI
+ Cho phép cấp clock cho các chân sử dụng với chức năng SPI
239
+ Chọn chế độ điều khiển trên chân là đẩy kéo Push Pull.
+ Chọn các chân trên vi điều khiển làm chức năng SPI.
+ Sử dụng hàm GPIO_Init với tham số truyền vào là GPIO nào, biến dữ liệu
thuộc kiểu dữ liệu Struct GPIO để cài đặt các tham số đã được gắn ở trên.
+ Sử dụng hàm GPIO_PinAFConfig cài đặt các chân GPIO với chức năng
Alternate Function với đối số truyền vào là GPIO nào, chân được sử dụng
với chức năng Alternate Function và chân GPIO thuộc AF mấy.
240
6.3. Khởi tạo sử dụng ngoại vi SPI với chế độ Slave:
+ Chọn cực tính xung trên chân SCK là ở mức thấp (CPOL).
+ Sử dụng hàm SPI_Init với tham số truyền vào là SPI nào và biến dữ liệu
kiểu struct SPI để cài đặt các giá trị đã được khởi tạo bên trên.
+ Sử dụng hàm SPI_Cmd với tham số truyền vào là SPI đang sử dụng và
trạng thái kết nối để sử dụng SPI
242
6.4. Cấu hình sử dụng ngắt khi SPI Slave nhận được dữ liệu từ SPI Master.
+ Cấu hình sử dụng trình phục vụ ngắt NVIC cho SPI Slave.
+ Sử dụng hàm NVIC_Init để cài đặt các giá trị đã được khởi tạo ở trên.
+ Sử dụng hàm SPI_ITConfig với tham số truyền vào là SPI Slave sử dụng
ngắt, trạng thái xảy ra sự kiện ngắt, trạng thái kết nối.
Bước 7: Xây dựng hàm truyền dữ liệu từ SPI Master với tham số truyền vào là
dữ liệu cần truyền
+ Sử dụng hàm SPI_I2S_GetFlagStatus chờ cho đến khi dữ liệu truyền xong.
+ Kéo chân NSS lên mức cao khi đã truyền xong dữ liệu.
243
Bước 8: Xây dựng hàm nhận dữ liệu từ SPI Master với tham số là SPI ở chế độ
Slave
Bước 9: Sử dụng hàm SPI1_IRQHandler nhận dữ liệu khi SPI Slave nhận được
dữ liệu từ SPI Master
Trong hàm phục vụ ngắt, gán biến nhận dữ liệu với hàm Revice_Data để thực hiện
nhiệm vụ bật tắt Led.
244
Bước 10: Xây dựng hàm cấu hình chân PA0 của led trên Board STM32 ở chế
độ Output
Bước 11: Xây dựng hàm cấu hình chân PC13 của nút nhấn trên Board
STM32F401
245
Bước 12: Trong hàm main, trước hàm while (1) gọi các hàm:
+ Button_Init
+ Led_Init
+ SPI_InitMaste
+ SPI_InitSlave
Bước 13: Trong hàm While(1), xây dựng thuật toán khi ấn nút truyền thì truyền
dữ liệu, nếu dữ liệu nhận đúng với dữ liệu gửi thì Led trên kit nháy 5 lần rồi
trở về trạng thái ban đầu và sử dụng các hàm sau:
246
Bước 14: Kết quả
247
248
Bài 19: Thực hành lập trình thư viện cho ngoại vi SPI: tạo file
stm32f041re_spi.h
Viết chương trình lập trình thư viện cho ngoại vi SPI: tạo file stm32f041re_spi.h
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi SPI
+ Sinh viên biết được cách lập trình thư viện cho ngoại vi SPI: tạo file
stm32f041re_spi.h
249
Bước 2: Tạo file.h cho ngoại vi SPI:
+ stm32f041re_spi.h
250
Bước 5: Define các thông số cho SPI
Direction
251
Mode
Data Size
CPOL
CPHA
252
BaudRate_Prescaler
Lưu ý: Khi lập trình thư viện phải sử dụng tài liệu Reference Manual để
theo dõi lấy thông tin lập trình
MSB_LSB
253
DMA
254
SPI Interrupt
SPI Flags
CRC polynomial
255
Bước 6: Khai báo các hàm nguyên mẫu
256
Bài 20: Thực hành lập trình thư viện cho ngoại vi SPI: tạo file
stm32f401re_spi.c
Viết chương trình truyền lập trình thư viện cho ngoại vi SPI: tạo file
stm32f401re_spi.c
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi SPI
+ Sinh viên biết được cách lập trình thư viện cho ngoại vi SPI: tạo file
stm32f041re_spi.c
+ stm32f401re_spi.c
258
3.2. SPI_Cmd: Cho phép sử dụng SPIx
259
3.3. SPI_DataSizeConfig: Cấu hình kích thước dữ liệu
260
3.4. SPI_BiDirectionalLineConfig: Lựa chọn chế độ chỉ truyền hay
chỉ nhận
261
3.6. Hàm trả về dữ liệu nhận được từ ngoại vi SPIx
262
3.8. Một số hàm sử dụng CRC kiểm tra và phát hiện lỗi
Cyclic Redundancy Check thường viết tắt là CRC, là thuật ngữ tiếng Anh
trong kỹ thuật số, là phương pháp kiểm tra và phát hiện lỗi, được sử
dụng trong các mạng số và thiết bị lưu trữ để phát hiện sự thay đổi tình cờ
đối với dữ liệu được truyền đi hay lưu trữ
263
264
3.9. SPI DMA
Direct memory access là cơ chế của hệ thống máy tính cho phép một
thành phần phần cứng truy cập đến bộ nhớ dữ liệu chính một cách độc lập
với CPU
265
Bước 4: Sử dụng ngắt với SPI
266
4.2. SPI_GetFlagStatus: Kiểm tra cờ của SPI
267
4.3. SPI_ClearFlag: Xóa cờ
268
4.4. SPI_GetITStatus: Kiểm tra cờ ngắt của SPI
269
4.5. SPI_ClearITPendingBit: Xóa cờ ngắt của SPI
270
271
Bài 21: Thực hành truyền và nhận dữ liệu với ngoại vi I2C
Viết chương trình giao tiếp giữa hai ngoại vi I2C1 và I2C3 trên vi điều khiển
STM32F401RE khi nhấn nút USER trên Board STM32F401 thì dữ liệu sẽ được
truyền từ I2C3 đến I2C1 và dữ liệu sẽ được kiểm tra. Nếu dữ liệu truyền và nhận là
trùng khớp thì Led LD2 trên Board sẽ nhấp nháy 5 lần rồi trở lại trạng thái ban đầu.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được truyền và nhận dữ liệu với ngoại vi I2C
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi I2C
Lưu ý: Sử dụng thêm phần cứng là điện trở 10K (nếu có) và kết nối như
trong hình ảnh dưới đây. Nếu không có thì bạn có thể sử dụng điện trở nội
bên trong chip như hướng dẫn dưới đây.
Bước 4: Khai báo các macro giúp quá trình lập trình dễ dàng hơn
273
Bước 5: Xây dựng hàm khởi tạo sử dụng I2C3
5.1. Khai báo dữ liệu thuộc kiểu dữ liệu cấu trúc của GPIO và I2C đã được
định nghĩa trong file thư viện header stm32f401re_gpio.h và
stm32f401re_i2c.h
5.2. Cấu hình GPIO được dùng làm chân SCL và SDA.
+ Chọn chế độ trên 2 chân chọn làm SDA và SCL Alternate Function.
+ Chọn trạng thái trở trên hai 2 chân là trạng thái trở treo lên PULL_UP.
274
+ Sử dụng chân PA8 là chân SCL và PC9 là chân SDA.
+ Sử dụng hàm GPIO_Init với tham số truyền vào là GPIO đang được sử
dụng và biến thuộc kiểu cấu trúc GPIO để cấu hình các giá trị được khởi
tạo bên trên cho 2 chân PA8 và PC9.
275
+ Sử dụng 7 bit địa chỉ.
+ Sử dụng hàm I2C_Init với tham số truyền vào là I2C đang sử dụng và
biến thuộc kiểu cấu trúc I2C để cấu hình các giá trị đã khởi tạo bên trên
của I2C.
6.1. Khai báo dữ liệu thuộc kiểu dữ liệu cấu trúc của GPIO và I2C, NVIC
6.2. Cấu hình GPIO được dùng làm chân SCL và SDA.
+ Chọn chế độ trên 2 chân chọn làm SDA và SCL Alternate Function.
276
+ Sử dụng hàm GPIO_Init với tham số truyền vào là GPIO đang được sử
dụng và biến thuộc kiểu cấu trúc GPIO để cấu hình các giá trị được khởi
tạo bên trên cho 2 chân PB8 và PB9.
277
+ Sử dụng hàm I2C_Init với tham số truyền vào là I2C đang sử dụng và
biến thuộc kiểu cấu trúc I2C để cấu hình các giá trị đã khởi tạo bên trên
của I2C.
+ Cho phép ngắt khi nhận các bit địa chỉ và bit Stop.
+ Sử dụng hàm NVIC_Init để cấu hình các khởi tạo trên cho trình phục vụ
ngắt I2C.
278
Bước 7: Sử dụng hàm I2C1_EV_IRQHandler để thực hiện ngắt
+ Sử dụng I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED
kiểm tra địa chỉ truyền đến đúng hay không?
Bước 8: Xây dựng các hàm truyền bit start và địa chỉ.
280
Bước 11: Xây dựng hàm cấu hình chân PA5 của led green trên Board STM32
ở chế độ Output
Bước 12: Xây dựng hàm cấu hình chân PC13 của nút nhấn trên Board
STM32F401 ở chế độ Input
Bước 13: Trong hàm main, trước hàm while(1) gọi các hàm sau
+ SystemCoreClockUpdate();
+ Button_Init();
+ Led_Init();
281
+ I2C_InitMaster();
+ I2C_InitSlave();
Bước 14: Trong hàm while(1), thực hiện thuật toán bật tắt led khi nhận đúng
dữ liệu
282
283
Bài 22: Thực hành lập trình thư viện cho ngoại vi I2C: tạo file
stm32f041re_i2c.h
Viết chương trình lập trình thư viện cho ngoại vi I2C: tạo file stm32f041re_i2c.h.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của I2C
+ Sinh viên biết được lập trình thư viện cho ngoại vi I2C: tạo file
stm32f041re_i2c.h
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi I2C
284
Bước 1: Tạo một project như nội dung Bài 1
+ stm32f041re_i2c.h
File stm32f401re_i2c.h
285
Bước 5: define các thông số cho I2C
5.1. Mode
5.6. NACK
287
Lưu ý: Khi lập trình thư viện phải sử dụng tài liệu Reference Manual để
theo dõi lấy thông tin lập trình
5.7. Interrupt
288
5.8. Register Flag
289
5.9. Master mode
290
Bước 6: Khai báo các hàm nguyên mẫu
291
292
Bài 23: Thực hành lập trình thư viện cho ngoại vi I2C: tạo file
stm32f401re_i2c.c
Viết chương trình lập trình thư viện cho ngoại vi I2C: tạo file stm32f401re_i2c.c
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được lập trình thư viện cho ngoại vi I2C: tạo file
stm32f401re_i2c.c
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi I2C
293
Bước 2: Tạo file.c cho ngoại vi I2C
+ stm32f041re_i2c.c
294
295
3.2. I2C_Cmd: Cho phép sử dụng I2Cx
296
3.3. I2C_GenarateSTART : Đưa ra điều kiện START
297
3.5. I2C_Send7bitAddress: Gửi 7bit địa chỉ
298
3.6. Cho phép/Không cho phép sử dụng bit ACK
299
Bước 4: Sử dụng ngắt với I2C
300
4.3. I2C_GetLastEvent: Lấy event cuối cùng
301
4.4. I2C_GetFlagStatus: Kiểm tra cờ có được set hay không
302
4.5. I2C_ClearFlag: Xóa cờ
303
4.6. I2C_GetITStatus: Kiểm tra cờ ngắt
304
4.7. I2C_ClearITPendingBit: Xóa cờ ngắt
305
Bài 24: Thực hành truyền và nhận dữ liệu với ngoại vi USART
Viết chương trình khi nhấn nút trên Board (PC13) STM32 sẽ truyền dữ liệu từ
USART6 đến USART1 trên Board STM32. Khi dữ liệu truyền trùng khớp thì Led
màu xanh (Led - PA5 sau board) trên Kit STM32F401 sẽ nháy 5 lần sau đó trở lại
trạng thái ban đầu.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được truyền và nhận dữ liệu với ngoại vi USART
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi USART
307
Lưu ý: Khi thực hiện bài này phải tháo kit mở rộng ra chỉ sử dụng board
Nucleo-F401re
Bước 4: Khai báo các Macro giúp quá trình lập trình trở nên dễ dàng hơn
308
Bước 5: Xây dựng hàm để cấu hình chân PC13 của nút nhấn trên Board STM32
ở chế độ input.
+ Tốc độ xử lý là 100MHz
+ Khởi tạo tất cả các giá trị bên trên bằng cách sử dụng hàm GPIO_Init với
đối số truyền vào là GPIOC và GPIO_InitStructure.
309
Bước 6: Xây dựng hàm để cấu hình chân PA0 Làm trạng thái đầu ra để điều
khiển led Green trên Kit STM32F4
+ Trạng thái ban đầu trên chân là kéo xuống GND Pull Down.
+ Khởi tạo tất cả các giá trị bên trên bằng cách sử dụng hàm GPIO_Init với
đối số truyền vào là GPIOA và GPIO_InitStructure.
310
Bước 7: Cấu hình ngoại vi USART6 ở chế độ chỉ truyền dữ liệu.
7.1. Khai báo các kiểu dữ liệu thuộc các kiểu struct về GPIO, USART để cấu
hình sử dụng các ngoại vi.
+ Cho phép kết nối clock đến chân GPIO sử dụng cho USART6.
+ Chọn chế trên chân GPIO sử dụng cho USART6 là Alternate Function.
311
+ Chọn trạng thái trên chân ban đầu là kéo trở lên dương nguồn Pull Up.
+ Sử dụng hàm GPIO_Init với tham số truyền vào là GPIO nào được sử dụng,
Biến dữ liệu kiểu cấu trúc struct GPIO để tham chiếu đến các giá trị vừa khởi
tạo bên trên.
7.3. Cấu hình sử dụng USART6 với chức năng chỉ truyền dữ liệu với các bước
sau:
8.1. Khai báo các kiểu dữ liệu thuộc các struct của GPIO, USART, NVIC để
cấu hình sử dụng ngoại vi USART1
+ Cho phép kết nối clock đến chân GPIO sử dụng cho USART1.
+ Chọn chế trên chân GPIO sử dụng cho USART1 là Alternate Function.
+ Chọn trạng thái trên chân ban đầu là kéo trở lên dương nguồn Pull Up.
+ Sử dụng hàm GPIO_Init với tham số truyền vào là GPIO nào được sử dụng,
Biến dữ liệu kiểu cấu trúc struct GPIO để tham chiếu đến các giá trị vừa khởi
tạo bên trên.
313
+ Sử dụng hàm GPIO_PinAFConfig với tham số truyền vào là GPIO đang
sử dụng, chân sử dụng với chức năng AF và chân đó thuộc AF nào
8.3. Cấu hình sử dụng USART1 với chức năng chỉ nhận dữ liệu với các bước
sau:
+ Sử dụng hàm USART_Init để cài đặt các giá trị đã khởi tạo ở trên.
314
8.4. Cấu hình sử dụng USART1 với ngắt khi có dữ liệu truyền từ USART6 với
các bước sau:
315
+ Gọi hàm USART_ClearITPendingBit để thoát khỏi hàm xử lý ngắt
316
10.1.Trong hàm main gọi hàm Control_led_ReceiveData
317
Bước 11: Kết quả
318
Bài 25: Thực hành lập trình thư viện cho ngoại vi USART: tạo file
stm32f041re_usart.h
Viết chương trình lập trình thư viện cho ngoại vi USART: tạo file
stm32f041re_usart.h
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được lập trình thư viện cho ngoại vi USART
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi USART
319
Bước 2: Tạo file.h cho ngoại vi UART:
+ stm32f041re_usart.h
320
Bước 4: Định nghĩa struct cho ngoại vi UART
STM32F401RE sử dụng USART bao gồm chức năng cho UART. Khởi
tạo Clock khi muốn sử dụng chức năng USART
321
Bước 5: define các thông số cho UART
322
5.4. UART mode truyền hay nhận
Lưu ý: Khi lập trình thư viện phải sử dụng tài liệu Reference Manual để
theo dõi lấy thông tin lập trình
5.7. Sử dụng CPOL và CPHA khi muốn sử dụng USART cấu hình
chức năng truyền đồng bộ sử dụng xung Clock
323
5.8. Last Bit
5.10. UART_DMA
324
5.11. UART Flag
325
326
Bài 26: Thực hành lập trình thư viện cho ngoại vi USART: tạo file
stm32f041re_usart.c
Viết chương trình lập trình thư viện cho ngoại vi USART: tạo file
stm32f041re_usart.c
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được lập trình thư viện cho ngoại vi USART
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi USART
327
Các bước thực hành:
328
329
330
3.2. USART_Cmd: Cho phép sử dụng UART
331
3.3. USART_SendData Hàm truyền dữ liệu
332
3.5. Hàm xử lý ngắt. Cho phép/ không cho phép ngắt UART
333
3.6. Hàm kiểm tra cờ ngắt xem có được set hay không
334
3.7. Xóa cờ UART
335
3.8. Hàm kiểm tra cờ ngắt
336
337
3.9. Hàm xóa cờ ngắt
338
339
Bài 27: Thực hành cấu hình ngoại vi TIMER ở chế độ Basic
Viết chương trình tạo độ trễ Delay để bật/tắt trạng thái led PA5 trên board
STM32F4 Nucleo sử dụng ngoại vi Timer 1.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ về lập trình driver cho ngoại vi, cấu hình ngoại vi TIMER
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi TIMER
340
Bước 3: Định nghĩa chân PA5 và mức logic 0/1 bằng các câu lệnh macro như
sau:
Bước 4: Xây dựng hàm cấu hình chân PA5 của led trên Board STM32 ở chế độ
Output
Bước 5: Xây dựng hàm điều khiển Led với tham số truyền vào là GPIO nào và
chân được kết nối để điều khiển led
Bước 6: Xây dựng hàm khởi tạo các giá trị của sử dụng timer chức năng base
341
tạo tần số 1Khz
+ Khai báo biến sử dụng kiểu dữ liệu cấu trúc của TIMER
342
+ Cho phép thanh ghi đếm bắt đầu đếm đến 999 thì giảm giá trị ms để tạo
delay
Bước 8: Trong hàm main, trước hàm while(1) gọi các hàm:
+ SystemCoreClockUpdate
+ Led1Control_Init
+ Time_Init
Bước 9: Trong Hàm While(1), bật tắt led theo delay 500ms tạo bởi Timer
343
Bài 28: Thực hành cấu hình ngoại vi TIMER ở chế độ Capture
Viết chương trình sử dụng Timer 2 với chức năng Input Capture để đọc số
lần ấn nút B2 trên kit STM32F401 và sau 1s sẽ gửi số lần ấn nút lên PC.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ về lập trình driver cho ngoại vi, cấu hình ngoại vi TIMER
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi TIMER
3.1. Khai báo các biến thuộc kiểu dữ liệu cấu trúc GPIO, Timer, Timer Input
Capture, NVIC
+ Sử dụng hàm GPIO_Init với các tham số truyền vào là GPIO đang
được sử dụng và biến thuộc kiểu cấu trúc GPIO để cấu hình các giá trị
đã được khởi tạo ở trên.
345
3.3. Khởi tạo sử dụng Timer Base
3.4. Cấu hình sử dụng chức năng Input Capture trên chân PB3
346
+ Chọn hệ số chia tần là 1.
+ Sử dụng hàm NVIC_Init với tham số truyền vào là địa trị biến dữ liệu
thuộc kiểu cấu trúc NVIC để cấu hình các giá trị đã được khởi tạo ở
trên.
347
Bước 4: Sử dụng hàm TIM2_IRQHandler để thực hiện ngắt khi nút ấn trên
chân PB3 được ấn và nhả và sử dụng hàm Check_Tim_Press kiểm tra số lần
ấn nút
Bước 5: Xây dựng hàm Check_Tim_Press kiểm tra số lần ấn và lưu thời gian
trong quá trình ấn và nhả nút
+ Sử dụng biến Status1 để kiểm tra lúc ấn nút và lúc nhả nút
+ Biến Number_Press sẽ được tăng lên khi phát hiện sườn xuống
+ Biến Tim_Rising sẽ lưu thời gian khi phát hiện sườn lên để so sánh
Bước 6: Xây dựng hàm Send_NumberPress để gửi dữ liệu sau 1s lên máy tính
348
+ Kiểm tra xem nút ấn đã được ấn chưa bằng biến Status.
+ Nếu giá trị thời gian đếm trên thanh ghi CNT bị tràn và đếm lại từ đầu thì
thời gian kiểm tra xem đã đủ 1s để gửi dữ liệu được tính bằng công thức
+ Nếu giá trị thời gian đếm trên thanh ghi CNT lớn hơn thời gian khi nút ấn
được nhả thì thời gian kiểm tra xem đã đủ 1s để gửi dữ liệu được tính bằng công
thức:
+ Nếu thời gian là lớn hơn 1s sẽ gửi số lần ấn nút lên máy tính
349
Bước 7: Xây dựng hàm cấu hình USART2 hoạt động để truyền giá trị nhiệt lên
PC
7.1. Khai báo các kiểu dữ liệu thuộc các kiểu struct về GPIO, USART để cấu
hình sử dụng các ngoại vi
+ Cho phép kết nối clock đến chân GPIO sử dụng cho USART2.
+ Chọn chế trên chân GPIO sử dụng cho USART2 là Alternate Function.
+ Chọn trạng thái trên chân ban đầu là kéo trở lên dương nguồn Pull Up.
+ Sử dụng hàm GPIO_Init với tham số truyền vào là GPIO nào được sử
dụng, Biến dữ liệu kiểu cấu trúc struct GPIO để tham chiếu đến các giá
trị vừa khởi tạo bên trên.
350
7.3. Cấu hình sử dụng USART2 với chức năng chỉ truyền dữ liệu với các bước
sau:
+ Sử dụng hàm USART_Init để cài đặt các giá trị đã khởi tạo ở trên.
351
Bước 8: Trong hàm While(1), Sử dụng hàm Send_NumberPress để gửi số lần
ấn nút lên PC
352
Bài 29: Thực hành cấu hình ngoại vi TIMER ở chế độ PWM
Viết chương trình sử dụng Timer 1 với chức năng PWM điều khiển
độ sáng trên led ở chân PA11 với tần số là 10KHz.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên nắm rõ về lập trình driver cho ngoại vi, cấu hình ngoại vi TIMER
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi TIMER
353
Bước 3: Khai báo macro Period cho timer 1 để tạo tần số 10khz.
#define Tim_Period 8399
Bước 4: Xây dựng hàm TimPwm_Init cấu hình chế độ Timer với chức năng
PWM trên chân PA11.
4.1. Khai báo các kiểu dữ liệu thuộc các kiểu dữ liệu GPIO, Timer Base và
Timer Output Compare.
4.2. Cấu hình chân GPIO sử dụng cho chức năng PWM.
+ GPIO_PuPd: Chọn trạng thái ban đầu trên chân GPIO là thả treo.
354
4.3. Cấu hình sử dụng Timer base tạo tần số 10khz
355
4.4. Cấu hình sử dụng chức năng PWM trên chân PA11
Bước 5: Xây dựng hàm thay đổi độ sáng led bằng PWM với tham số truyền vào
là % độ sáng từ 0 đến 100
356
Bước 6: Trong hàm main, trước hàm while(1) gọi các hàm:
+ SystemCoreClockUpdate.
+ TimPwm_Init.
Bước 7: Trong hàm while(1), gọi hàm LedControl_PWM để thay đổi độ sáng
led
357
Bài 30: Thực hành lập trình thư viện cho ngoại vi TIMER: tạo file
stm32f041re_tim.h
Viết chương trình lập trình thư viện cho ngoại vi TIMER: tạo file
stm32f041re_tim.h
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được lập trình thư viện cho ngoại vi TIMER: tạo file
stm32f041re_tim.h
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi TIMER
+ stm32f041re_tim.h
359
Bước 4: Định nghĩa struct cho ngoại vi TIMER
4.1. Time Basic.
360
4.3. Timer Input Capture
361
5.2. Clock Division
362
6.2. Lựa chọn Timer Pulse Mode
363
6.6. Output compare Preload State
364
7.3. Input capture Selection
Bước 8: Interrupt
365
Bước 9: Khai báo các hàm nguyên mẫu
366
9.3. Input Capture
367
368
Bài 31: Thực hành lập trình thư viện cho ngoại vi TIMER: tạo file
stm32f401re_tim.c
Viết chương trình lập trình thư viện cho ngoại vi TIMER: tạo file stm32f401re_tim.c
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được lập trình thư viện cho ngoại vi TIMER: tạo file
stm32f041re_tim.c
369
+ stm32f401re_tim.c
+ Timer Basic Initialization: Khởi tạo Timer. Đầu tiên là cấp xung
clock cho ngoại vi Timer, chọn hệ số chia tần, chế độ đếm ... và cuối
cùng là cho phép ngoại vi Timer hoạt động.
370
+ Timer Get Capture: Lấy được khoảng thời gian giữa hai lần có sườn
lên hoặc sườn xuống hoặc sườn lên và xuống.
+ Timer Set Capture: Thiết lập hệ số chia cho chế độ Input Capture
+ Timer Error Interrupt handling: Hàm sử dụng ngắt kiểm tra lỗi khi
sử dụng ngoại vi Timer.
371
Bước 5: TIM_ICInit: Khởi tạo timer chế độ Input Capture
372
Bước 6: Hàm cấu hình chế độ Input Capture sử dụng cho hàm khởi tạo Input
Capture
373
374
Bước 7: Timer Output Compare
375
376
Bước 8: Hàm GetCapture
377
Bước 9: Hàm SetCapture Prescaler
378
379
Bước 10: Hàm cấu hình sử dụng ngắt Cho phép/ không cho phép ngắt
TIMER
380
Bước 11: Hàm kiểm tra cờ ngắt
381
Bước 12: Hàm xóa cờ ngắt
382
Bước 13: Hàm kiểm tra cờ
383
Bước 14: Hàm xóa cờ
384
385
Bài 32: Thực hành cấu hình ngoại vi ADC ở chế độ quét liên tục
Viết chương trình đọc giá trị ADC của cảm biến nhiệt độ bên trong vi điều
khiển STM32F401 sau đó hiển thị giá trị nhiệt độ lên phần mềm hercules.
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi ADC
386
Bước 2: Thêm các thư viện cần thiết như "stm32f401re_rcc.h",
"stm32f401re_gpio.h", "stm32f401re_adc.h", "stm32f401re_usart.h",
"timer.h" bằng câu lệnh #include.
Bước 3: Xây dựng hàm khởi tạo các giá trị để sử dụng ngoại vi Timer
3.1. Khai báo các biến thuộc kiểu dữ liệu cấu trúc ADC chung và ADC riêng
3.3. Sử dụng hàm ADC_DeInit() để khởi lại các giá trị của ADC về mặc định.
387
+ Cho phép ghi dữ liệu từ bên phải.
Bước 4: Xây dựng hàm chuyển đổi giá trị nhiệt độ đọc từ ADC ra giá trị độ C.
388
+ Gán biến TemperatureValue với giá trị Digital đọc được của cảm biến
nhiệt độ sau khi chuyển đổi xong.
+ Thực hiện chuyển đổi giá trị đọc được từ ADC ra giá trị nhiệt độ theo công
thức
Bước 5: Xây dựng hàm cấu hình USART2 hoạt động để truyền giá trị nhiệt
lên PC
5.1. Khai báo các kiểu dữ liệu thuộc các kiểu struct về GPIO, USART để cấu
hình sử dụng các ngoại vi
389
+ Cho phép kết nối clock đến chân GPIO sử dụng cho USART2.
+ Chọn chế trên chân GPIO sử dụng cho USART2 là Alternate Function.
+ Chọn trạng thái trên chân ban đầu là kéo trở lên dương nguồn Pull Up.
+ Sử dụng hàm GPIO_Init với tham số truyền vào là GPIO nào được sử
dụng, Biến dữ liệu kiểu cấu trúc struct GPIO để tham chiếu đến các giá
trị vừa khởi tạo bên trên.
5.3. Cấu hình sử dụng USART2 với chức năng chỉ truyền dữ liệu với các bước
sau:
390
+ Khung truyền 8 bit dữ liệu.
+ Sử dụng hàm USART_Init để cài đặt các giá trị đã khởi tạo ở trên.
391
Bước 7: Kết quả
392
Bài 33: Thực hành cấu hình ngoại vi ADC ở chế độ DMA
Viết chương trình đọc giá trị ADC chế độ DMA của cảm biến ánh sáng trên
kit vi STM32F401 sau đó hiển thị giá trị nhiệt độ lên PC
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi ADC
393
Bước 2: Thêm các thư viện cần thiết như "stm32f401re_rcc.h",
"stm32f401re_gpio.h", "stm32f401re_adc.h", "stm32f401re_usart.h",
"timer.h","stm32f401re_dma.h" bằng câu lệnh #include.
Bước 3: Khai báo các macro và biến sử dụng trong khi lập trình
Bước 4: Xây dựng hàm khởi tạo các giá trị để sử dụng ngoại vi Timer
4.1. Khai báo các biến thuộc kiểu dữ liệu cấu trúc GPIO, ADC chung và
ADC riêng, DMA
394
4.3. Sử dụng hàm ADC_DeInit() để khởi lại các giá trị của ADC về mặc định.
395
+ Sử dụng hàm ADC_Init với tham số là bộ ADC đang sử dụng và biến
dữ liệu thuộc kiểu cấu trúc ADC để cài đặt các giá trị đã khởi tạo ở
trên.
+ DMA_DeInit: Khởi tạo mặc định cho DMA bằng hàm DMA_DeInit.
+ DMA_PeripheralBaseAddr: Cấu hình địa chỉ của thanh ghi chứa Data
trong bộ ADC.
+ DMA_Memory0BaseAddr: Cấu hình địa chỉ của biến chứa giá trị ADC
đọc về.
+ DMA_PeripheralInc: Không cho phép tăng địa chỉ của ngoại vi vì data
chỉ có 1.
+ DMA_MemoryInc: Không cho phép tăng địa chỉ của bộ nhớ vì data chỉ
có 1.
396
+ DMA_PeripheralDataSize:Chọn kích thước mảng dữ liệu ADCValue
gồm : Byte, Haftword và Word
+ DMA_Init: Cấu hình các giá trị đã được khởi tạo ở trên.
4.7. Cấu hình kênh chuyển đổi, cho phép ADC1 hoạt động và chuyển đổi
Bước 5: Xây dựng hàm đọc ADC từ cảm biến ánh sáng
Bước 6: Xây dựng hàm khởi tạo USART để truyền giá trị đọc được từ cảm biến
ánh sáng lên PC
397
Bước 7: Xây dựng hàm đọc và truyền dữ liệu nhiệt độ
398
Bước 8: Trước hàm while(1), gọi các hàm
+ SystemCoreClockUpdate
+ TimerInit
+ LightSensor_Init1
+ USART1_Init
399
400
Bài 34: Thực hành lập trình thư viện cho ngoại vi ADC: tạo file
stm32f401re_adc.h
Viết chương trình lập trình thư viện cho ngoại vi ADC: tạo file stm32f401re_adc.h
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được lập trình thư viện cho ngoại vi ADC: tạo file
stm32f401re_adc.h
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi ADC
401
Bước 2: Tạo file.h cho ngoại vi ADC:
+ stm32f041re_adc.h
402
Bước 5: define các thông số cho I2C
403
5.4. Thời gian giữa 2 lần chuyển đổi
404
5.7. Data Align
405
5.9. Số lần lấy mẫu
5.11. Interrupt
406
407
Bài 35: Thực hành lập trình thư viện cho ngoại vi ADC: tạo file
stm32f401re_adc.c
Viết chương trình lập trình thư viện cho ngoại vi ADC: tạo file stm32f401re_adc.c
+ Sinh viên tra cứu tài liệu nguyên lý mạch Schematic của board
Nucleo F401RE tại đây để biết được sơ đồ chân của led và nút nhấn trên mạch.
+ Sinh viên nắm rõ thao tác tạo một project tạo một project, thêm các thư viện,
định nghĩa các macro trên phần mềm STM32CubeIDE như nội dung Bài 1
Thiết bị thực hành: Máy tính, Board Nucleo F401RE, dây cáp đấu nối
+ Sinh viên biết được cách tạo file device header, cách viết cơ bản cho các
phân vùng ngoại vi của MCU
+ Sinh viên biết được lập trình thư viện cho ngoại vi ADC: tạo file
stm32f401re_adc.h
+ Sinh viên biết được cách xây dựng các hàm cần thiết cho ngoại vi ADC
408
Bước 2: Tạo file.c cho ngoại vi ADC:
+ stm32f401re_adc.c
409
Bước 4: Hàm quan trọng sử dụng cho ngoại vi ADC
410
+ DC Common Initialization: Khởi tạo ngoại vi ADC như chọn chế độ,
chọn hệ số chia tần sử dụng cho ngoại vi ADC
+ ADC Advance Initialization: Khởi tạo ngoại vi ADC riêng như cấp
xung clock cho ADCx, chọn giá trị chuyển đổi, cho phép chuyển đổi
liên tục ... và cuối cùng là cho phép ngoại vi ADCx hoạt động.
+ ADC Get Conversion Value: Hàm có chức năng đọc giá trị chuyển
đổi của ngoại vi ADC.
+ ADC DMA Initialization: Khởi tạo sử dụng DMA. Đầu tiên cấp xung
clock cho DMA, tiếp theo chọn kênh DMA ... và cuối cùng là cho
phép sử dụng DMA.
+ ADC Interrupt Configuration: Khởi tạo ngắt của ngoại vi ADC. Đầu
tiên cho phép sử dụng ngắt của ngoại vi ADC, tiếp theo cho phép
411
ngoại vi ADC sử dụng bộ quản lý ngắt NVIC ... và cuối cùng cho
phép NVIC hoạt động
+ ADC Error Interrupt handling: Hàm sử dụng ngắt kiểm tra lỗi trong quá
trình chuyển đổi ADC.
+ ADC Even Interrupt handling: Hàm sử dụng ngắt thông báo quá
trình chuyển đổi ADC đã xong.
412
4.2. ADC_CommonInit : Khởi tạo tham số cho ADC
413
4.3.ADC_Cmd: Cho phép sử dụng ADCx
414
4.4. ADC_RegularChannelConfig Cấu hình lựa chọn kênh
415
416
4.5. Cho phép/Không cho phép sử dụng cảm biến
417
4.6. Cho phép, Bắt đầu chuyển đổi
418
4.7. Chế độ chuyển đổi liên tục
419
4.8. Chế độ chuyển đổi không liên tục
420
421
4.9. Hàm đọc dữ liệu nhận được
Direct memory access là cơ chế của hệ thống máy tính cho phép một
thành phần phần cứng truy cập đến bộ nhớ dữ liệu chính một cách độc lập
với CPU
422
423
424
Bước 5: Sử dụng ngắt với ADC
425
5.2. ADC_GetITStatus: Kiểm tra cờ ngắt
426
5.3. Xóa cờ ngắt
427
5.4. ADC_GetFlagStatus: Kiểm tra các cờ của ADC
428
429
5.5. ADC_ClearFlag: Xóa cờ
430
2.Thực hành lập trình mạng không dây Zigbee
Bài 1: Thực hành viết chương trình tạo project bằng phần mềm Simplicity
Studio
Bước1: Trong giao diện của Simplicity Studio IDE, lựa chọn
File => New => Project
Bước 2: Trên cửa sổ New Project, lựa chọn Silicon Labs AppBuilder
Project => Next
Bước 3: Lựa chọn Silicon Labs Zigbee (chỉ lựa chọn được khi đã tải
SDK) --> Next
431
Bước 4: Lựa chọn EmberZNet x.x.x.x GA SoC x.x.x.x (với x là số phiên
bản SDK sử dụng) => Next
Bước 5: Lựa chọn Project mẫu mà bạn muốn khởi tạo, đối với mỗi project,
SDK đều cung cấp cho chúng ta các đoạn mô tả để biết được project đó
được sử dụng để làm gì.
Lưu ý: Đối với SDK 6.7, IDE sẽ gặp lỗi khi tạo blank project (blank
application) vì vậy không được tích vào phần Start with a blank application
Bước 6: Đặt tên và lựa chọn đường dẫn lưu trữ project
432
Bước 7:
- Nếu sử dụng Development Board được phát triển từ Silicon Labs, lựa chọn vào
mục Board - nhập tên board
- Nếu sử dụng module được phát triển từ Silicon Labs, lựa chọn vào Part –nhập tên
module (VD: EFR32MG21A010F512IM32)
- Lựa chọn Compiler cho chương trình (VD: GNU, IAR,…). Finish
433
Bước 8: Mở file Z3LightSoc.isc để cấu hình. Trong Tab ZCL Cluster xóa
endpoint 2 và 3 đi vì không sử dụng
Kết quả
434
Bước 10: Chọn HA devices => Chọn HA On/Off Light
Bước 11: Trong Tab HAL chọn None cho mục Bootloader vì chưa sử dụng
435
Bước 12: Trong Tab Plugin search green và bỏ chọn Green Power, Green
Power Library, provides API: gp
436
Bước 16: Sử dụng Callback Hal Button Isr để dùng hàm xử lý nút nhấn với tham
số là
button: xác định xem nút nào được nhấn
state: xác định trạng thái của nút nhấn là nhấn hay nhả. Sử dụng Main Init để biết
khi nào thiết bị được khởi động lại
Bước 16: Chọn Generate để Simplicity Studio tạo ra các file cần thiết sau khi
đã cấu hình xong
437
Bước 17: Cấu hình chân trong file Hardware configurator
438
17.1. Trong mục PA => Chọn PA Voltage 1000
PA Selection Medium Power Vì MCU là dòng EFR32MG21 Series 2
17.3. Chọn Flow control mode => No flow control TX Pin: PA5
RX Pin: PA6
17.4. Trong mục Button, cấu hình chân cho nút nhấn
SW1-PD4, SW2-PD3
439
Bỏ tích LED vì chưa sử dụng
Bước 18: Sau đó tiến hành build chương trình bằng biểu tượng cây búa
Xuất hiện một số lỗi về thư viện. Kích đúp chuột vào lỗi để di chuyển đến
dòng bị lỗi
Những thư viện này không được dùng vì vậy hãy xóa nó đi hoặc sử dụng
// để comment chúng lại
440
Sau đó sử dụng cây búa để build lại chương trình
Nếu tiếp tục lỗi thì hãy comment lại những dòng đó
441
Bài 2: Thực hành lập trình tạo folder áp dụng phân tầng cho thư viện Simplicity
Studio
Bước1: Tạo một project như nội dung Bài 1
Bước 2: Click phải chuột vào project => Chọn New => Folder
442
Bước 4: Tiếp tục tạo folder App, Mid, Driver trong folder Source
Bước 6: Đặt tên là main.c rồi nhấn Finish để hoàn tất tạo file.c
443
Bước 7: Tạo file header main.h
Bước 8: Tương tự như vậy hãy tạo những file còn lại với kết quả như dưới
444
Bài 3: Thực hành nạp firmware vào Kit IoT Zigbee thông qua phần mềm
Commander
Bước 1: Tạo một project như nội dung Bài 1
Bước 2: Trong file.isc được sinh ra trong project, lựa chọn Generate để
sinh ra các file thư viện, phục vụ cho quá trình nạp firmware vào Kit
Bước 3: Có thể sử dụng một trong 3 file trên để tiến hành nạp firmware vào Kit
445
Bước 5: Mở phần mềm Commander:
C:\SiliconLabs\SimplicityStudio\v4\developer\adapter_packs\commander
Bước 6: Sau khi cắm Jlink được kết nối với Kit IoT Zigbee
Bước 7: Nạp firmware: Lựa chọn J-Link Device sau đó nhấn Connect để kết
nối với Jlink
446
Kết quả:
448
Bước 9: Lựa chọn mục Tab Flash => Chọn Browse để chọn đường dẫn đến file
firmware
Bước 10: Lựa chọn đường dẫn đến project cần nạp firmware
Ví dụ
C:\Users\TrungNT\SimplicityStudio\v4_workspace\SW_ZB_V1_0_0\GNU
ARM v7.2.1 – Default
Lưu ý: Thư mục GNU ARM v7.2.1 - Default là nơi lưu trữ firmware để nạp vào
Kit
Bước 11: Nhấn Erase chip để xóa dữ liệu trong Flash
449
Bước 12: Nhấn Flash để nạp firmware
452
3.4. Trong file button.c: khai báo con trỏ hàm
Bước 4: Cấu hình chân PD04, PD03 ở chế độ Input, cho phép ngắt sườn lên và
sườn xuống
453
5.2. Khai báo data sử dụng Event cho nút nhấn
Ví dụ: emberEventControlSetActive(buttonPressAndHoldEventControl);
Thì chương trình sẽ chạy vào hàm buttonPressAndHoldEventHandle để xử lý
Bước 6: Sau khi khai báo Event hay chỉnh sửa trong file.isc cần phải Generate
để sinh ra các file thư viện, phục vụ cho quá trình nạp firmware vào Kit
Bước 7: Nạp firmware vào Kit: thao tác như bước 2-12 của Bài 3
Bước 8: Mở phần mềm Hercules
454
Bước 9: Kết nối với Kit thông qua cổng COM
Tag Serial chọn cổng COM#Open
455
Tham khảo: Lưu đồ thuật toán tín hiệu ngắt nút nhấn
456
457
Bài 5: Viết chương trình tạo hàm xử lý Led trên Kit IoT Zigbee cho các trường
hợp nút nhấn sau:
458
3.2. Trong led.h
3.3. Trong file led.c: khai báo một mảng chứa thông tin về các led RGB
3.4. Trong file led.c: Init các chân cho led RGB
459
Bước 4: Xây dựng các hàm bật, tắt, blink led
4.1. onLed():
4.2.offLed():
4.4. toggleLed(): Trong hàm ledInit() thêm các câu lệnh sau
460
4.6. Xử lý timer event của toggleLed
461
Bước 5: Xây dựng chương trình
5.1. Cấu trúc phân tầng
462
5.3. Xây dựng chương trình
463
Bước 6: Sau khi khai báo hay chỉnh sửa trong file.isc cần phải Generate để sinh
ra các file thư viện, phục vụ cho quá trình nạp firmware vào Kit
Bước 7: Nạp firmware vào Kit: thao tác như bước 2-12 của Bài 3.
Bước 8: Kết quả
464
465
Bài 6: Thực hành giao tiếp với các cảm biến môi trường trên Kit IoT Zigbee
và hiển thị các thông số lên màn hình PC qua phần mềm Hercules
Bước 1: Tạo một project như nội dung Bài 1
Bước 2: Thêm các thư viện cần thiết vào project như sau
Bước 3: Xây dựng hàm khởi tạo ngoại vi ADC của chip EFR32MG21 để
giao tiếp với cảm biến ánh sáng
void LightSensor_AdcPollingReadHandler(void)
Bước 4: Xây dựng hàm khởi tạo ngoại vi I2C của chip EFR32MG21 để
giao tiếp với cảm biến nhiệt độ - độ ẩm
emberEventControlSetInactive(readValueSensorLightControl);
Bước 5: Xây dựng hàm đọc giá trị cường độ ánh sáng của cảm biến ánh
sáng
uint32_t lux = LightSensor_AdcPollingRead();
Bước 7: Xây dựng hàm đọc giá trị độ ẩm của cảm biến Si7020
KalmanHumi = Si7020_MeasureHumi();
466
+ Si7020_Init: Khởi tạo cảm biến Si7020
+ LDRInit: Khởi tạo cảm biến ánh sáng
+ emberEventControlSetDelayMS: tạo timer với chu kỳ 5 s cập nhật
giá trị cường độ ánh sáng. Trong hàm callback sử dụng hàm debug
emberAfCorePrintln để hiển thị giá trị cường độ ánh sáng lên màn
hình PC.
+ emberEventControlSetDelayMS: tạo timer với chu kỳ 10 s cập nhật
các giá trị nhiệt độ và độ ẩm. Trong hàm callback sử dụng hàm
debug emberAfCorePrintln để hiển thị giá trị nhiệt độ và độ ẩm lên
màn hình PC.
void emberAfMainInitCallback(void)
{
emberAfCorePrintln("Main Init");
buttonInit(User_buttonPressAndHoldingEventHandler,
User_buttonPressAndHoldEventHandler);
ledInit();
LDRInit();
initI2C();
Si7020_Init();
KalmanFilterInit(2, 2, 0.001); // Initialize Kalman filter
emberEventControlSetDelayMS(readValueSensorLightControl, 1000);
emberEventControlSetDelayMS(ReadValueTempHumiControl,1000);
}
Bước 9: Sau khi khai báo hay chỉnh sửa trong file.isc cần phải Generate để sinh
ra các file thư viện, phục vụ cho quá trình nạp firmware vào Kit
Bước 10: Nạp firmware vào Kit: thao tác như bước 2-12 của Bài 3.
Bước 11: Mở phần mềm Hercules
467
Bước 12: Kết nối với Kit thông qua cổng COM
Tag Serial chọn cổng COM#Open
468
Bài 7: Thực hành tạo thiết bị Z3Coordinator và Zigbee Router để khởi tạo
mạng
Bước 1: Tạo một project với tên Z3Coordinator như nội dung Bài 1
Bước 2: Tab ZCL Clusters: lựa chọn endpoint cho Coordinator, thông thường,
ZC chỉ sử dụng 1 endpoint duy nhất với ZCL device type là “Zigbee Custom”,
và tick vào hết những clusters muốn ZC hỗ trợ
Bước 3: Tab Zigbee Stack: “Zigbee Device Type” lựa chọn “Coordinator or
Router”, “Security Type” lựa chọn “Zigbee 3.0 Security”
469
Bước 4: Tab Plugins: Tick vào những plugins để phục vụ chính cho ZC như
Lưu ý: Bỏ tích những plugin không dùng như ZLL, Zigbee Green Power
và một số khác giống như đã thực hành trong tài liệu project đầu tiên
+ Network Creator: lựa chọn những kênh tần muốn ZC hỗ trợ
+ Network Creator Security
Bước 6: Sau khi khai báo hay chỉnh sửa trong file.isc cần phải Generate để sinh
ra các file thư viện, phục vụ cho quá trình nạp firmware vào Kit
Bước 7: Nạp firmware vào Kit: thao tác như bước 2-12 của Bài 3.
Bước 8: Thao tác tương tự từ Bước 1-7 để tạo thiết bị Zigbee Router
Có thể sử dụng luôn project mẫu Z3LightSoC với CLI được kích hoạt.
Mở Tab Callback
+ Enable PreCommandReceived CallBack để nhận và xử lý bản tin
cluster on/off
470
+ Gọi hàm callback này ra sử dụng phục vụ cho việc xử lý bạn tin On/Off
nhận được
471
Bài 8: Thực hành khởi tạo và gia nhập mạng Zigbee gồm Z3Coordinator và
Zigbee Router
Bước 1: Tạo thiết bị Z3Coordinator và Zigbee Router như nội dung Bài 8
Bước 2: Kết nối thiết bị Z3Coordinator và Zigbee Router với máy tính qua cổng
COM
Bước 3: Mở phần mềm Hercules
Kết quả:
472
Bước 5: Mở phần mềm Hercules cho Zigbee Coordinator
Bước 6: trên Zigbee Coordinator: khởi tạo mạng Zigbee sử dụng CLI plugin
network-creator form
473
Bước 7: trên Zigbee Coordinator: dùng câu lệnh info để kiểm tra xem thiết bị
ZC đã tạo mạng thành công hay chưa, và những thông tin mạng
474
Bước 8: trên Zigbee Coordinator: mở gia nhập mạng Zigbee thông qua câu
lệnh: plugin network-creator-security open-network
Bước 9: trên Zigbee Router: cho thiết bị thực hiện công việc tìm kiếm mạng
Zigbee thông qua câu lệnh: plugin network-steering start 0
475
Bước 10: trên Zigbee Router: thực hiện câu lệnh info để kiểm tra thông tin
mạng của thiết bị này, có thể thấy được các thông tin mạng đã trùng với thông
tin mạng được tạo từ Z3Coordinator
476
Bài 9: Thực hành sử dụng CLI xử lý bài toán giao tiếp giữa các Kit IoT
Zigbee
Bước 1: Tạo một project như nội dung Bài 1
Bước 2: Tạo thiết bị Z3Coordinator và Zigbee Router như nội dung Bài 8
Bước 3: Xây dựng thêm thiết bị thuộc type HA-Dimmer Switch-2
endpoint: xử lý on/off, level control
477
4.2. Ngắt timer và PWM led RGB
478
Bước 5: Điều khiển led khi nhận được bản tin
479
Sơ đồ thuật toán
Bước 6: Sau khi khai báo hay chỉnh sửa trong file.isc cần phải Generate để sinh
ra các file thư viện, phục vụ cho quá trình nạp firmware vào Kit
480
Bước 7: Nạp firmware vào Kit: thao tác như bước 2-12 của Bài 3.
Bước 8: Kết nối thiết bị Z3Coordinator và Zigbee Router với máy tính qua cổng
COM
Bước 9: Khởi tạo mạng: thao tác như bước 5-11 của Bài 8
Bước 10: Kết quả
481
Bài 10: Thực hành xây dựng thiết bị Sleepy End Device
Bước 1: Tạo một project như nội dung Bài 1
Bước 2: Tạo thiết bị Z3Coordinator và Zigbee Router như nội dung Bài 8
Bước 3: Tạo thiết bị 1 Endpoint kiểu sleepy-end-device
3.1. Cảm biến PIR
482
Bước 4: Xây dựng chương trình
483
4.2. Xử lý timer cho phép phát hiện chuyển động sau 5s
484
4.3. Xử lý timer phát hiện hết chuyển động
485
4.4. Init PIR
486
4.6. Xử lý tín hiệu ngắt từ chân cảm biến chuyển động Delay 200ms để tránh
nhiễu
4.8. pirHardHandle()
487
Bước 6: Sau khi khai báo hay chỉnh sửa trong file.isc cần phải Generate để sinh
ra các file thư viện, phục vụ cho quá trình nạp firmware vào Kit
Bước 7: Nạp firmware vào Kit: thao tác như bước 2-12 của Bài 3.
488
Bài 11: Thực hành xử lý bài toán Binding trong Zigbee: truyền dữ liệu từ
Zigbee Coordinator tới Zigbee Router – Initiator, sau đó Router – Initiator
đồng bộ tới Zigbee Router – Target.
Bước 1: Tạo một project như nội dung Bài 1
Bước 2: Tạo 3 thiết bị như nội dung Bài 8
+ Kit thứ 1: Kit làm nhiệm vụ là Zigbee Coordinator
+ Kit thứ 2: Kit làm nhiệm vụ là Zigbee Router – Initiator
+ Kit thứ 3: Kit làm nhiệm vụ là Zigbee Router - Target
Bước 3: Sử dụng phần mềm Hercules để sử dụng CLI
Bước 4: Zigbee Coordinator tiến hành tạo mạng sử dụng câu lệnh:
plugin network-creator form 1 0xABCD 10 11
489
Bước 5: Zigbee Coordinator tiến hành mở mạng cho các thiết bị gia nhập mạng
bằng câu lệnh: plugin network-creator-sercurity open-network
Lưu ý: Nếu muốn đóng mạng không cho phép các thiết bị gia nhập thì
sử dụng câu lệnh: plugin network-creator-security close-network
Bước 6: Cho thiết bị Zigbee Router-Initiator vào mạng dùng câu lệnh:
plugin network-steering start 0
490
Bước 7: Zigbee Coordinator sử dụng câu lệnh: plugin address-table print hiển
thị thông tin các thiết bị trong mạng với node ID và địa chỉ MAC của
từng thiết bị
Ví dụ: Thiết bị 1 Node ID là 0x1C91, địa chỉ MAC: 588E81FFFE970DBE
Bước 8: Cho thiết bị Zigbee Router-target vào mạng dùng câu lệnh:
plugin find-and-bind target 1
491
Bước 9: Khởi tạo thiết bị Initiator tìm kiếm thiết bị Target bằng câu lệnh:
492
Bước 11: Để Initiator có thể tìm được target của mình
Đầu tiên nó sẽ phải gửi bản tin broadcast có tên là Identify Query
Request
Sau khi Target nhận được bản tin Identify Query Request
Nó sẽ phản hồi lại Initiator bản tin Identify Query Response
Complete: 0x00 => Quá trình binding thành công
Sử dụng câu lệnh: option binding-table print
Xem thông tin về bảng binding table
493
Sử dụng câu lệnh:
+ zcl on-off on
+ bsend 1: là câu lệnh sử dụng send trong binding
494
Bài 12: Thực hành xử lý bài toán Groups trong Zigbee: tạo group trong mạng
bao gồm 3 thiết bị Zigbee Coordinator, Zigbee Router – Initiator và Zigbee
Router – Target, Zigbee Coordinator truyền dữ liệu từ đồng thời cho cả
Router – Initiator và Zigbee Router – Target.
Bước 1: Tạo một project như nội dung Bài 1
Bước 2: Tạo 3 thiết bị như nội dung Bài 8
+ Kit thứ 1: Kit làm nhiệm vụ là Zigbee Coordinator
+ Kit thứ 2: Kit làm nhiệm vụ là Zigbee Router – Initiator
+ Kit thứ 3: Kit làm nhiệm vụ là Zigbee Router - Target
Bước 3: Sử dụng phần mềm Hercules để sử dụng CLI
Bước 4: Zigbee Coordinator tiến hành tạo mạng sử dụng câu lệnh:
plugin network-creator form 1 0xABCD 10 11
495
Bước 5: Zigbee Coordinator tiến hành mở mạng cho các thiết bị gia nhập mạng
bằng câu lệnh: plugin network-creator-sercurity open-network
Lưu ý: Nếu muốn đóng mạng không cho phép các thiết bị gia nhập thì
sử dụng câu lệnh: plugin network-creator-security close-network
Bước 6: Tạo group zcl groups add 1 “test” trên Zigbee Coordinator
496
7.2. Lấy node ID của thiết bị để thêm vào nhóm
497
Bước 13: Kết quả Zigbee Coordinator để gửi lệnh cho Initiator và Target
498
TÀI LIỆU THAM KHẢO
[1] Tài liệu giới thiệu Kit IoT STM 32: https://drive.google.com/file/ Kit IoT STM32
[2] Tài liệu giới thiệu Kit IoT Zigbee: https://drive.google.com/file/ Kit IoT Zigbee
[3] Tài liệu giới thiệu vi điều khiển STM 32: https://drive.google.com/file/ STM32
[4] Tài liệu giới thiệu phần mềm STM 32: https://drive.google.com/file/ STM 32
[5] Tài liệu hướng dẫn nạp code vào Kit IoT STM32:
https://drive.google.com/file/nạp Kit IoT STM32
[6] Tài liệu giới thiệu phần mềm Simple Studio: https://drive.google.com/file/
Simple Studio
[7] Tài liệu hướng dẫn nạp code vào Kit IoT Zigbee:
https://drive.google.com/file/nạp Kit IoT Zigbee
499
PHỤ LỤC
- Đánh giá
500
2. Phiếu bàn giao thiết bị thực hành
………………………………………………………………..……………………...
Nhóm…………………..Lớp……………… ..Ngày…..tháng…..năm…………..
501
3. Phiếu báo cáo kết quả thực hành (Sinh viên)
………………………………………………………………..……………………...
Nhóm…………………..Lớp……………… ..Ngày…..tháng…..năm…………..
Sinh viên
502
4. Phiếu đánh giá kết quả thực hành (Giảng viên)
Nhóm…………………..Lớp…………………Ngày…..tháng…..năm…………..
Giảng viên
503