Sử dụng Printf để debug dự án | Báo cáo thực tập Vi xử Lí | Đại học Bách Khoa Hà Nộ
Báo cáo thực tập Vi xử Lí với đề tài: "Sử dụng Printf để debug dự án" của sinh viên trường Đại học Bách Khoa Hà Nội. Tài liệu được biên soạn dưới dạng file PDF giúp bạn tham khảo và hoàn thành tốt bài tập của mình đạt kết quả cao. Mời bạn đọc đón xem!
Preview text:
BÁO CÁO THỰC TẬP VI XỬ LÝ
Sinh viên: Trần Thái Bảo MSSV: 20146054 Phòng học: E1- 306 Ngày báo cáo:27/01/2024
Nội dung: Sử dụng printf để debug dự án Tuần học: tuần 2
1. Khảo sát sơ đồ nguyên lý:
Sinh viên vẽ sơ đồ nguyên lý khối RS232 UART PA2/UART2_TX RXD STM32F205VCT6 ESP 8266 PA3/UART2_TX RXD
2. Bảng kết nối input - output STT Tên phần cứng Vị trí chân vi điều Trạng thái phần Mức logic tại chân khiển tương ứng cứng vi điều khiển RS232_TX PA2 Output (truyền) 1 RS232_RX PA3 Input (nhận) 1
3. Bảng cấu hình UART:
Trên vi điều khiển: Trên máy tính: • BAUD RATE = 9600 • BAUD RATE = 9600 • Word length = 8 bits • Word length = 8 bits • Parity = None • Parity = None
4. Tham khảo lệnh printf: T r a n g 1 / 7
5. Báo cáo dự án Lập trình Yêu cầu 1: -
Khởi tạo dự án và lập trình sử dụng printf in (liên tục, lặp lại) lên Terminal UART mã số sinh
viên của bạn. Trì hoãn giữa 2 lần truyền dữ liệu là 500ms.
Lưu đồ giải thuật từ lúc khởi tạo dự án Start Thêm thư viện chứa hàm printf While(1){ Print(“19146276”); Delay(“500”) } End
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chỉnh sửa từ code dự án) T r a n g 2 / 7 #include "stdio.h" struct __FILE { int handle; };
/* FILE is typedef’d in stdio.h. */ FILE __stdout; /* USER CODE END PV */ int fputc(int ch, FILE *f) {
/* Your implementation of fputc(). */
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,100); return ch; } int main(void) { while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ printf(" 19146276 "); HAL_Delay(500); } } Yêu cầu 2: -
In lên Terminal từng dòng sau. Ghi kết quả hiển thị trên Terminal ngay bên dưới
1. printf ("Integers: %i %u \n", -3456, 3456); Interger: -3456 3456 Interger: -3456 3456 …
2. printf ("Characters: %c %c \n", 'z', 80); T r a n g 3 / 7
Characters: z P Character:z P Character:z P
3. printf ("Decimals: %d %ld\n", 1997, 32000L); Decimals: 1997 32000 Decimals: 1997 32000 Decimals: 1997 32000 …
4. printf ("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
Some different radices: 100 64 144 0x64 0144
Some different radices: 100 64 144 0x64 0144 …
5. printf ("floats: %4.2f %+.0e %E \n", 3.14159, 3.14159, 3.14159);
float: 3.14 +3e+00 3.141590E+00
float: 3.14 +3e+00 3.141590E+00 …
6. printf ("Preceding with empty spaces: %10d \n", 1997);
Preceding with empty spaces: 1997
Preceding with empty spaces: 1997 …
7. printf ("Preceding with zeros: %010d \n", 1997);
Preceding with zeros: 0000001997
Preceding with zeros: 0000001997 …
8. printf ("Width: %*d \n", 15, 140); Width: 140 Width: 140 …
9. printf ("%s \n", " A string "); A string A string … 10. Đoạn chương trình int ch;
for( ch = 75 ; ch <= 100; ch++ ) {
printf("ASCII value = %d, Character = %c\n", ch , ch ); }
ASCII value = 75, Character = K Yêu cầu 3:
Tạo dự án và lập trình debug để in ra Terminal đồng hồ đếm giờ : phút : giây Ví dụ: T r a n g 4 / 7 08:59:56 08:59:57 08:59:58 08:59:59 09:00:00 09:00:01 ... Lưu đồ giải thuật Start Dữ liệu giờ ,phút , giây
In ra màn hình Giờ, phút, giây End
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chỉnh sửa từ code dự án) char ch[]="11:30:30"; printf("%s\n", ch ); T r a n g 5 / 7 Yêu cầu 4:
Tạo dự án và lập trình debug để điều khiển đèn D1 như sau: -
Mỗi lần nhấn nút B1 đèn D1 đảo trạng thái. (từ tắt sang sáng và ngược lại) -
Mỗi khi đèn sáng, sử dụng printf gởi số lần nhấn nút lên Terminal Lưu đồ giải thuật Start B1= False ; D1= False; PressCount= 0; - Hàm đọc trạng thái B1 -
Hàm mô phỏng bật/tắt D1 Vòn g lặp (while (1)) Đọc trạng thái nút nhấn B1 sai Kiểm tra nút nhấn B1 có được nhấn chưa ? Đúng Điều khiển đèn D1 dựa trên trạng thái nút nhấn B1 In số lần nhấn lên terminal Cập nhật trạng thái nút nhấn B1 cho vòng End lặp T r a n g 6 / 7
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chỉnh sửa từ code dự án) #include
// Giả sử sử dụng mô phỏng nút B1 và đèn D1
bool B1= false; // Trạng thái nút B1
bool D1 = false; // Trạng thái đèn D1
int pressCount = 0; // Số lần nhấn nút
// Hàm mô phỏng đọc trạng thái nút B1 bool readButtonState() { return ; }
// Hàm mô phỏng việc bật/tắt đèn D1
void controlLED(bool state) { } int main() { while (1) {
// Đọc trạng thái nút B1
bool currentButtonState = readButtonState();
// Kiểm tra xem nút B1 có được nhấn hay không
if (currentButtonState && !B1) { // Nút B1 được nhấn
pressCount++; // Tăng số lần nhấn
// Đảo trạng thái đèn D1 ledState = !D1; controlLED(D1);
// In số lần nhấn lên Terminal
printf("Press count: %d\n", pressCount); }
// Cập nhật trạng thái nút B1 cho vòng lặp tiếp theo B1= currentButtonState; } return 0; } T r a n g 7 / 7