5.1. Phần mềm lập trình:
STM32CubeMX là một phần mềm được cung cấp miễn phí giúp nhiều cho việc cầu hình ngoại vi, clock, tính toán dòng tiêu thụ, tao project voi nhiéu déng chip ARM STM22... Việc tạo project trở nên đơn giản bằng việc lựa chọn các ngoại vi cần thiết, cấp lock tùy chỉnh mà không cần liên quan đến code.
Việc tạo project với thư viện chuan (standard library) là khá khó khăn vì cần nhiều
bước để tạo ra proJect mới. ŠTM32CubeMX ra đời như một lựa chon dé thay thé diéu đó, với giao diện trực quan chúng ta sẽ dé dàng lập trinh va co cai nhin tong quan hon.
Thư viện đi kèm với phần mềm này là STM32Cube HAL, gọi tắt là thư viện HAL, bộ thư viện này được chuẩn hóa, giúp đồng nhất giữa các dòng F0, F1, F2, F3, F4... Nhà sản xuất cũng cung cấp đầy đủ các ví dụ mẫu đi kèm với thư viện này.
STM32CubeMX không phải là một trình biên dich, nó chỉ là công cụ đề sinh ra
code, chúng ta vẫn phải dùng các trình biên dịch thông thường để quan sát, debug, lập
trình, sửa lỗi.... Nếu bạn muốn tìm hiều sâu về vi điều khiển hãy bắt đầu nó bằng thư
viện chuẩn (standard library) và ngược lai, nêu bạn muốn sử dụng một cách nhanh chóng hãy su dung thu vién HAL (STM32Cube HAL).
Day đủ các công cụ phần mềm hỗ trợ chạy trên máy tính giúp giải quyết tat ca những nhu cầu trong một chu trình phát triển dự án hoàn chỉnh.
Các phần mềm nhúng được thiết kế để chạy trên các dòng vi điều khiên STM32 và các vi xử lý tương ứng với nhiều chức năng khác nhau từ các driver cho từng ngoại vi của vi điều khiến đến những tính năng định hướng ứng dụng nâng cao.
27
CHUONG 5: PHAN MEM LAP TRINH VÀ CHUONG TRINH DIEU KHIỂN
Embedded a
i?
Software
stua CubeMX 9 sru:> ®
CubeMCU Packages
sim:> ẹ
CubelDE
Development @
STMS5: x®
CubeProgrammer G
STM Cube Monitor-Power ‘Ge ae
Cube Monitor-RF iy
Cube Monitor-UCPD STM32 i
Cube.Expansion
IonItoring
Hinh 5.1: Cac hé sinh thai cua STM32 Cube
5.2. Chuong trinh diéu khién:
5.2.1. Cấu hình chân trên STM32CubeMX:
- Chon vi diéu khién STM32F103C8T6
In
| * ee, ơ
- Cc) mm Ị
$TM32F103 , ?2 MHz
om Tet CPU, motor control, USB and CAN
. ne rice or NEAL RIS: 2.7808 ‘ Ỉ
we “aerive) Presuctir m mane proocten s GP 481/714 =m eres The STM3ZF 103 medun-cersity pertormance ine fary econ ssi
frequency. hgh. a
Somme Lion SCS oO ae nowt cat |
28
CHUONG 5: PHAN MEM LAP TRINH VÀ CHUONG TRINH DIEU KHIỂN
- Nhan chon SYS chọn chế độ Debug bang Serial Wire ( nếu để chế độ No Debug thi khi nap xong sé bi khóa chip
Bi Sroal his ied ee Ốg
29
CHUONG 5: PHAN MEM LAP TRINH VÀ CHUONG TRINH DIEU KHIỂN
Cấu hình chan Input va Output
SYS_JTC K-Gwir Lk
GPR _reul
STM32F103C8Tx
0Pp_reul ee eee)
GPD_Oupul . L GP 0upul VẢ.
GPIO_Input — PAO — Button 1: là nút Start và Reset GPIO_Input — PA8 — Button 2: la mit Stop GPIO_Output — PA1 — diéu khién dén bao LED GPIO_Output — PA2 — diéu khién dong mé valve 2 GPIO_Output — PA3 — diéu khién dong mé valve 3 GPIO_ Output - PA4 - điều khiển đóng mở valve 4 GPIO_Output — PAS — diéu khién dong mé valve 5 GPIO_Output — PA6 — diéu khién dong mé valve 6 GPIO_Output — PA7 — diéu khién dong mé valve thoat nude 1
PAO va PA8 được cấu hình là đầu vào và được sử dụng để đọc trạng thái của nút nhấn, PA1 được cấu hình là đầu ra và được sử dụng để điều khiển đèn LED
PA2 đến PA7 được cấu hình là đầu ra và được sử dụng điều khiển các valve điện từ.
30
CHUONG 5: PHAN MEM LAP TRINH VÀ CHUONG TRINH DIEU KHIỂN
- Cau hinh ché d6 GPIO
o Vao GPIO chọn chân muốn cấu hình o_ Nếu chân là Output có 4 mục:
+ GPIO output level : trạng thái mặc định khi chưa tác động của nó. Có
2 chế độ là low (mức 0) và high (mức 1).
+ GPIO mode: Có 2 chế độ 1a Push Pull va Open Drain.
+ GPIO Pull up/ Pull down: lựa chọn trở kéo lên trên hay kéo xuống đất.
Có 3 chế độ: No pull up and no pull đown ( không dùng trở), Pull-up ( trợ kéo lên nguồn), và Pull-down( trở kéo xuống GND).
+ Maxium output speed: chinh tốc độ ta tôi đa của ngõ ra, có 3 mức: Low(
tốc độ tôi đa 10Mhz), Medium( tốc độ tối đa 20Mhz), High( tốc độ tối da 50Mhz).
TS Pea cd
Clock Configuration Project Manager cu.
o_ Nếu chân là Input, ta có 2 mục:
GPIO mode: chỉ có chế độ Input mode
GPIO Pull-up/ Pull-down: tương ty nhu Output
31
CHUONG 5: PHAN MEM LAP TRINH VÀ CHUONG TRINH DIEU KHIỂN
Sau, dé Generate code va mé img dung Kell c dé lap trinh :
(Dl stvezcubemx DA joc: STM32F 103¢8T
Project Settings
Project Name
Project Location I
Application Structure Ra Do not oad Toolchain Folder Location -DAIDAL
Teolcham / IDE [MOK-ARM Min Version [VŠ32 n
Linker Settings
Minimum Heap Size l2 Minimum Stack Size xan
Thread-safe Si Coftex-M3NS
[] Enable multrtheeaded suppert Thread-sate Locking Strategy |Deaut - Mai
Mcu and Femware Package
Meu Reference ETGZ10XSTx
Furmwrare Package Name and Version Use intesl
i Use Detauit Firmware Location
ĐH SIN2Cek 0Á6oc S7M32F10 o x
su @ tà Window Help ® HevoxGr
GENERATE
3 Pinout & Configuration onfiguratt Project Manager Tools Project Settings
Project Ni A
Proect oject Name b
Project Location
Application Structues: B== (Do net on
code Generation xt Toolchain Folder Lo,
The Code is successfully generated under :
Linker Settings — D.DA/DA Ề
Menimum Heap Sixt Project language - C
Menimum Stack Siz
Thread -sate Settings
Conex MINS
Enable mutt-threaded support
Thread-satte Locking Strategy [Detaux To dependin Meu and Firmware Package
Mcu Reference [STM32F 103C8Tx
Firmware Package Name and Versson Gi Use Default Furmware Location Hy Use ate
32
CHUONG 5: PHAN MEM LAP TRINH VÀ CHUONG TRINH DIEU KHIỂN
5.3. Chương trình điều khiến:
- _ Khai báo và khởi tạo một số biến được sử dụng trong chương trình uint8 t state
uint t uint ta uint16 t count uintl6 t countl
- Trang thai cua các nút nhắn GPIO trén vi diéu khién STM32
Trạng thái đầu và nhân nút PA0 được nhấn (giá trị là 0), thì thực hiện gan gia tri 1 cho biến ¡ và chuyến trạng thái sang 1 (state = 1).
Trạng thái 1 và nút nhắn PA0 được nhá ra (giá trị là 1), thì chuyến trạng thái sang 2 (state = 2).
Trạng thái 2 và nút nhấn PA§ được nhấn (giá trị là 0), thì chuyên trạng thái sang 3 (state = 3).
Trạng thái là 3 và nút nhân PA8 được nhá ra (giá trị là 1), thi chuyên trạng thái vé 0 (state = 0).
((state )&&(HAL GPIO ReadPin(GPIOA,GPIO PIN 0) ))qd
if ((state 1) && (HAL GPIO ReadPin(GPIOA,GPIO PIN 0) L))4
Lf ((state ==2) && (HAL GPIO ReadPin(GPIOA,GPIO PIN 8)==0)) { tat
(( 3) && (HAL GE ReadPin(GPIOA,GPIO PIN ) L)){
at
33
CHUONG 5: PHAN MEM LAP TRINH VÀ CHUONG TRINH DIEU KHIỂN
- _ Điều khiến đèn led chân GPIO PA1 ở state 1 và 2 khi nhắn và nhá ra thì đèn sáng lên
- Khié state 3 va state 4 điều khiên các chân GPIO (PA2, PA3, PA4, PA5, PA6) thì
khi nhắn nút stop thì nghĩa các valve sẽ được mở trừ PA7 do valve 7 được kết nối với một module relay 5v kích mức thấp (khác với 5 valve kia).
HHHHHHH~
- Néu bién i = 1, c6 nghĩa là chúng ta ấn vào nút Start két nói với chân PA0 mạch sẽ tiễn hành chạy vòng theo chương trình điều khiến valve bên dưới.
- _ Chương trình cho hệ thống chạy tự động:
o_ Mở valve 2&3&7 có nghĩa là 4 vòi phía ngoài sẽ chạy và ống xã nước dé giảm lực nước sẽ được kích hoạt
o_ Sử dụng vòng lặp while thay cho câu lệnh HAL,_Delay(2000) trong thư viện bởi vì khi câu lệnh đang chạy thì sẽ không thể tác động đến trạng thái đó và phải đợi đến khi câu lệnh hoàn thành thì mới có thế thao tác tiếp được, với câu lệnh while thì nó sẽ quét số lần bằng với thời gian delay là 2000ms và thời gian quét mỗi lần cách nhau 1ms thì khi chúng ta nhắn nút chắc chắn sẽ tác động được trong khi nó đang giữ trạng thái.
o_ Sau khi kết thúc vòng lặp thì biến đếm cho vòng while thay thế delay sẽ được reset vé 0 la sé đùng tương tự cho các trạng thái tiếp theo.
34
CHUONG 5: PHAN MEM LAP TRINH VÀ CHUONG TRINH DIEU KHIỂN
if (i==1) { i=0;
HAL GPIO WritePin(GPIOA, GPIO PIN 2,1);
HAL GP1O WritePin(GPLOA, GP1O_PIN 3,1);
HAL GPIO WritePin(GPIOA, GPIO PIN 4,0);
HAL GPIO WritePin(GPIOA, GPIO PIN 5,0);
HAL GPIO WritePin(GPIOA, GPIO PIN 6,0);
HAL GPIO WritePin(GPIOA, GPIO PIN 7,0);
while ((HAL GPIO ReadPin(GPIOA,GPIO PIN 2)==1)&&(HAL GPIO ReadPin(GPIOA,GPIO PIN 8) !=0)) { count += 1;
HAL Delay(1);
if (count == 2000){
count = 0;
break;
}
o_ Tiếp đến valve 6 sẽ được mở thêm và thời gian delay cũng là 2000ms và cách thức cũng tương tự như ở trên.
HAL GPIO WritePin(GPIOA, GPIO PIN 6,1);
while ((HAL GPIO ReadPin(GPIOA,GPIO PIN 6)==1)&&(HAL GPIO ReadPin(GPIOA,GPIO PIN 8) !=0)){
count += 1;
HAL Delay (1);
if (count == 2000) { count = 0;
break;
}
- Valve 4 va valve 5 m6, valve 6 dong.
HAL GPIO WritePin(GPIOA, GPIO PIN 4,1);
HAL GPIO WritePin(GPIOA, GPIO PIN 5,1);
HAL GPIO WritePin(GPIOA, GPIO PIN 6,0);
while ((HAL GPIO ReadPin(GPIOA,GPIO PIN 4)==1)&&(HAL GPIO ReadPin(GPIOA,GPIO PIN 8) !=0) a count += 1;
HAL Delay(1);
if (count 2000) { count = 0;
break;
}
o_ Cá 5 valve sẽ mở. Tuy nhiên, chỉ mở khi valve thoát nước 1 đóng. Khi tat cả valve chính đều hoạt động thì lưu lượng nước lúc này sẽ nhỏ lại nên chúng ta cần đóng valve xã PA7 đề độ cao của các tia nước được phù hợp hơn. Và thời gian delay cho trạng thái này là 4000ms. Sau đó biến count sẽ vấn về 0 nhưng lúc này sẽ dùng thêm | bién count!. Bién count! nay sé được bật lên 1 để chạy I trạng thái đặc biệt cho hệ.
35
CHUONG 5: PHAN MEM LAP TRINH VÀ CHUONG TRINH DIEU KHIỂN
HAL GPIO WritePin(GPIOA, GPIO PIN 2,1);
3PIO WritePin(GPIOA, GPIO PIN 3,1);
5PTO WritePin(GPIOA, GPIO PIN 4,1);
HAL GPIO WritePin(GPIOA, GPIO PIN 5,1);
HAL GPIO WritePin(GPIOA, GPIO PIN 6,1);
HAL GPIO WritePin(GPIOA, GPIO PIN 7,1);
while ((HAL GPIO ReadPin(GPIOA,GPIO PIN 7)==1)&&(HAL GPIO ReadPin(GPIOA,GPIO PIN 8) !=0)){
count + 1;
HAL Delay (1);
1£ (count == 4000) { count = 0;
countl = 1;
break;
o Trong trang thai dac biét nay, valve 45 sé được nhap nhay lién tuc dé cho cột nước nhún nhảy tạo ra sự hứng thú và vui vẽ cho người xem. 2 chân này sẽ dao trang thai sao mỗi vòng quét bằng lệnh TogglePin, thời gian giữ trạng thái mỗi lần tắt hoặc mở là 700ms. Và nó sẽ được chạy 100 lần như vậy.
unt1 1)&&(HAL GPIO ReadPin(GPIOA,GPIO PIN 8) !=0)) {
[IO WritePin(GPIOA, GPIO PIN 7,0);
IO TogglePin(GPI PIO PIN 4);
PIO PIN 5);
IO TogglePin (GPI lay( >
(countl l ){
intl H
break;
- - Sau khi hết tất cả các trạng thái thì nó sẽ tự động chạy lại từ đầu và cứ liên tục như vậy nếu không bị tát động đến.
- _ Chúng ta có thê thay đối cách thức hoạt động cho hệ thống bằng cách thay đối trình tự đóng ngắt của các valve trong câu lệnh ¡f ==1){} một cách đễ dàng nếu muôn đôi mới.
36