Cấu hình chức năng phải vừa đủ sử dụng, không cấu Yêu cầu 3: Trong báo cáo trình bày rõ và chi tiết lưu đồ giải thuật và mã Yêu cầu 4: Nạp chương trình vào vi điều khiển và thực hiện
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM KHOA CÔNG NGHỆ ĐIỆN TỪ
BÁO CÁO
VI ĐIỀU KHIỂN VÀ ỨNG DỤNG
BÀI 2:
LẬP TRÌNH MÔ-ĐUN GPIO OUTPUT
Giáo viên hướng dẫn: Phạm Quang Trí Sinh viên thực hiện: Nhóm 3
Nguyễn Minh Đức - 21104031
Hồ Ngọc Dũng - 21104131 Đinh Quốc Lập – 21133301
Thành phố Hồ Chí Minh, tháng 8 năm 2023
Trang 2Mục lục
Yêu cầu 1: Dựa vào yêu cầu của bài tập đã chọn, vẽ sơ đồ nguyên lý kết nối phần cứng tối thiểu của toàn hệ thống điều khiển dùng STM32 1
Yêu cầu 2: Trong báo trình bày rõ và chi tiết cách thiết lập các chức năng trong phần mềm CubeMX Cấu hình chức năng phải vừa đủ sử dụng, không cấu
Yêu cầu 3: Trong báo cáo trình bày rõ và chi tiết lưu đồ giải thuật và mã
Yêu cầu 4: Nạp chương trình vào vi điều khiển và thực hiện cho chạy thử trên kit phát triển trong phòng thực hành Quay video minh chứng kết quả thực hiện, tải lên Youtube và ghi liên kết vào báo cáo Trong video phải có mô tả thí nghiệm, kết quả thí nghiệm và nhận xét về kết quả thí nghiệm 9
Trang 3BÁO CÁO KẾT QUẢ THỰC HÀNH
Bài tập mức độ 3: Viết chương trình điểu khiển 2 LED đơn nối vào chân bất kỳ
của STM32, đồng thời hoạt động lặp lại như sau LED 0 sáng 3s và tắt 9s; LED 1 sáng 7s và tắt 1s
Yêu cầu 1: Dựa vào yêu cầu của bài tập đã chọn, vẽ sơ đồ nguyên lý kết nối phần cứng tối thiểu của toàn hệ thống điều khiển dùng STM32
CẤP NGUỒN:
- Để điều khiển STM32 ta cần cung cấp nguồn điện ổn định có giá trị là 3,3V cho vào tất cả các chân VDD và nối đất(0V) cho các chân VSS Chú ý, tuyệt đối không được đung nguồn có giá trị lớn hơn 3,3V nối trực tiếp vào các chân VDD
- Ngoài ra để vi điều khiển vận hành ổn định thì chúng ta cũng cần phải cấp thêm nguồn +3,3V và 0V cho các chân:
o Chân VBAT nối +3,3V, là nguồn dành cho mô-đun đồng hồ thời gian thực(Real Time Clock) được nhà sản xuất tích hợp sẵn Chúng ta có thể bỏ qua chân này nếu không sử dụng mô đun đồng hồ thời gian thực
o Chân VDDA nối +3,3V và VSSA nối đất (0V), là nguồn đanh cho mô-đun ADC được tích hợp sẵn Việc chúng ta kết nối nguồn cho các chân này là bắt buộc cho dù chúng ta có sử dụng hay không mô-đun ADC
- Ngoài ra, khi cần lọc nhiều cho các chân nguồn thì chúng ta cần phải gắn thêm các tụ điện
MẠCH RESET: được dùng để khởi động lại các hoạt động của vi điều
khiển trong trường hợp lúc mới cấp nguồn cho hệ thống (sử dụng mạch điện gồm điện trở R3 và tụ điện C1) hoặc trong trường hợp khi người dùng mong muốn thực hiện bằng tay (sử dụng mạch điện gồm nút RESET
và điện trở R3) Mạch reset này được nối vào vi điều khiển thông qua chân NRST[7]
1
Trang 4 MẠCH DAO ĐỘNG :
- Chúng ta có thể lấy từ mạch dao động bên trong hoặc chúng ta có thể lấy từ mạch dao động bên ngoài, khi đó cần phải gắn thêm thạch anh tại hai chân OSCIN[5] và OSCOUT[6], thạch anh này có giá trị tần số được tham khảo thêm bên trong datasheet (đối với vi điều khiển STM32F103RCT6 thì từ 4 – 16MHz)
- Xung cung cấp cho mô=đun đồng hood thời gian thực thì chúng ta có thể lấy từ mạch dao động bên ngoài, khi đó cần phải gắn thêm thạch anh tại hai chân OSC32[3] và OSC32[4] có giá trị tần số được tham khảo thêm trong datasheet (đối với vi điều khiển STM32F103RCT6 thì từ 0 – 1000KHz, thông thường là 32,768KHz)
MẠCH NẠP: Hôm nay chúng ta nạp chương trình vào vi điều khiển
STM32 bằng hình thức JTAG Ta sẽ sử dụng các chân JTRST/PB4[56], JTDO/PB3[55], JTDI/PA15[50], JTCK/PA14[49] và JTMS/PA13[46]
LED: Ta sử dụng hai led được nối vào chân LED/PA8[41] và chân
LED1/PD2[54]
2
Trang 5Yêu cầu 2: Trong báo trình bày rõ và chi tiết cách thiết lập các chức năng trong phần mềm CubeMX Cấu hình chức năng phải vừa đủ sử dụng, không cấu hình các chân và chức năng không sử dụng
- Bước 1: Mở phần mềm CubeMX và tạo một Project mới.
- Bước 2: Tìm kiếm từ mã số của vi điều khiển là
STM32F103RCT6[1], chọn chính xác vào vi điều khiển[2] và cuối cùng chọn vào Start Project[3]
- Bước 3: Chọn bộ dao động và chọn loại mạch nạp.
3
Trang 6- Bước 4: Cấu hình GPIO Output cho chân PA8/LED0 và PD2/LED1
4
Trang 7- Bước 5: Chọn tần số hoạt động theo mong muốn.
5
Trang 8- Bước 6: Lưu tên Project[1] lưu ý không dấu không khoảng cách, chọn
thư mục muốn lưu vào[2], chọn STM32CubeIDE[3] để kết nối với phần mêm CubeIDE để ta code và cuối cùng ta bấm GENERATE CODE[4]
Yêu cầu 3: Trong báo cáo trình bày rõ và chi tiết lưu đồ giải thuật và mã nguồn của chương trình điều khiển
Lưu đồ giải thuật:
6
Trang 9 Giải thích lưu đồ giải thuật:
Begin: bắt đầu chương trình 2 led sáng tắt theo yêu cầu( LED0 sáng 3s
và tắt 9s, LED1 sáng 7s và tắt 1s)
Hàm main:
led=0, led1=0 : nhập dữ liệu kiểu số nguyên cho hai biến led và led1 Vòng lặp while
Bắt đầu câu lệnh rẽ nhánh đầu tiên:
Ở LED0:
Nếu điều kiện đúng thì LED0 sáng thời gian trễ là 1000ms tăng biến led lên 1 lần (VD từ 0 lên 1 từ 1 lên 2) sau đó trờ về và xét lại điều kiện đầu tiên trong vòng lặp while Nếu sai thì thực hiện tiếp điều kiện thứ hai
Điều kiện thứ hai đúng thì LED0 tắt thời gian trễ là 1000ms tăng biến led lên 1 lần sau đó trờ về và xét lại điều kiện đầu tiên trong vòng lặp while Nếu sai thực hiện tiếp điều kiện thứ ba
Điều kiện thứ ba đúng thì LED0 tắt sau đó reset biến led về bằng -1 thời gian trễ là 1000ms và tăng biến led lên 1 lần, sau đó quay trở về xét lại điều kiện ban đâu tròn vòng lặp while
7
Trang 10Ở LED1:
Nếu điều kiện đúng thì LED1 sáng thời gian trễ là 1000ms tăng biến led1 lên 1 lần( VD từ 0 lên 1 từ 1 lên 2) sau đó trờ về và xét lại điều kiện đầu tiên Nếu sai thì thực hiện tiếp điều kiện thứ hai
Điều kiện thứ hai đúng thì LED1 tắt trong reset biến led1 về bằng -1 thời gian trễ là 1000ms và tăng biến led1 lên 1 lần, sau đó quay về xét lại điều kiện ban đầu trong vòng lặp while
Ghi chú: Cả 2 led thực hiện song song với nhau xong mỗi led đều có chế độ sáng tắt khác nhau ( LED0 sáng 3s và tắt trong 9s, LED1 sáng 7s và tắt trong 1s)
Mã nguồn của chương trình:
int main(void)
{
int led=0, led1=0;
While(1)
{
if(led>=0 && led<3)
{
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, 0); // Bật LED0
}
else if (led>=3 && led <11)
{
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, 1); // Tắt LED0
}
else if(led=11)
{
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, 1); // Tắt LED0
8
Trang 11}
// Kiếm tra và điểu khiển LED1
if (led1 >= 0 && led1 < 7)
{
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, 0); // Bật LED1
}
else if (led1 = 7)
{
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, 1); //Tắt LED1
led1=-1;
}
HAL_Delay(1000); // Đợi 1 giây
led++;
led1++;
}
}
Yêu cầu 4: Nạp chương trình vi đều khiển và thực hiện cho chạy thử trên kit phát triển trong phòng thực hành Quay video clip minh chứng kết quả thực hiện, tải lên Youtube và ghi kết liên kết vào báo cáo Trong video clip phải có mô tả thí nghiệm, kết quả thí nghiệm và nhận xét về kết quả thí nghiệm
Link Youtube: Lập trình mô-đun GPIO Output - YouTube
Link dự phòng: https://youtu.be/UenJXxaBBF0
9