You are on page 1of 7

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 ESP8266

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:

Trang 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)

Trang 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);


Trang 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ụ:
Trang 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 );

Trang 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òng lặp

(while (1))

Đọc trạng thái nút


nhấn B1

Kiểm tra nút nhấn B1 sai


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
Trang 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 <stdbool.h>

// 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;

Trang 7/7

You might also like