T r a n g 1 / 7
BÁO CÁO THC TP VI X
Sinh viên: Trn Thái Bo
MSSV: 20146054
Phòng hc: E1- 306
Ngày báo cáo:27/01/2024
Ni dung: S dụng printf để debug d án
Tun hc: tun 2
1. Khảo sát sơ đồ nguyên lý:
Sinh viên v sơ đ nguyên lý khi RS232 UART
2. Bng kết ni input - output
STT
Tên phn cng
V trí chân vi điều
khiển tương ứng
Trng thái phn
cng
Mc logic ti chân
vi điều khin
RS232_TX
PA2
Output (truyn)
1
RS232_RX
PA3
Input (nhn)
1
3. Bng cu hình UART:
Trên máy tính:
BAUD RATE = 9600
Word length = 8 bits
Parity = None
4. Tham kho lnh printf:
PA2/UART2_TX
PA3/UART2_TX
RXD
RXD
STM32F205VCT6
ESP8266
T r a n g 2 / 7
5. Báo cáo d án Lp trình
Yêu cu 1:
- Khi to d án và lp trình s dng printf in (liên tc, lp li) lên Terminal UART mã s sinh
viên ca bn. Trì hoãn gia 2 ln truyn d liu là 500ms.
Lưu đồ gii thut t lúc khi to d án
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chnh sa t code d án)
Start
While(1){
Print(“19146276”);
Delay(“500”) }
Thêm thư viện
cha hàm printf
End
T r a n g 3 / 7
Yêu cu 2:
- In lên Terminal tng dòng sau. Ghi kết qu hin 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);
#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);
}
}
T r a n g 4 / 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 );
}
Yêu cu 3:
To d án và lập trình debug để in ra Terminal đồng h đếm gi : phút : giây
Ví d:
ASCII value = 75, Character = K
T r a n g 5 / 7
08:59:56
08:59:57
08:59:58
08:59:59
09:00:00
09:00:01
...
Lưu đồ gii thut
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chnh sa t code d án)
Start
D liu gi ,phút ,
giây
In ra màn hình Gi, phút, giây
End
char ch[]="11:30:30";
printf("%s\n", ch );
T r a n g 6 / 7
Yêu cu 4:
To d án và lập trình debug để điu khiển đèn D1 như sau:
- Mi ln nhấn nút B1 đèn D1 đảo trng thái. (t tắt sang sáng và ngược li)
- Mỗi khi đèn sáng, sử dng printf gi s ln nhn nút lên Terminal
Lưu đồ gii thut
Đúng
Start
- Hàm đọc trng thái B1
- Hàm mô phng bt/tt D1
B1= False ;
D1= False;
PressCount= 0;
Vòng lp
(while (1))
Kim tra nút nhn B1
có được nhấn chưa ?
Điu khiển đèn D1
da trên trng thái
nút nhn B1
In s ln nhn lên
terminal
End
Đọc trng thái nút
nhn B1
Cp nht trng thái
nút nhn B1 cho vòng
lp
sai
T r a n g 7 / 7
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chnh sa t code d án)
#include <stdbool.h>
// Gi s s dng mô phỏng nút B1 và đèn D1
bool B1= false; // Trng thái nút B1
bool D1 = false; // Trạng thái đèn D1
int pressCount = 0; // S ln nhn nút
// Hàm mô phỏng đc trng thái nút B1
bool readButtonState() {
return ;
}
// Hàm mô phng vic bt/tắt đèn D1
void controlLED(bool state) { }
int main() {
while (1) {
// Đọc trng thái nút B1
bool currentButtonState = readButtonState();
// Kiểm tra xem nút B1 có được nhn hay không
if (currentButtonState && !B1) {
// Nút B1 được nhn
pressCount++; // Tăng số ln nhn
// Đảo trạng thái đèn D1
ledState = !D1;
controlLED(D1);
// In s ln nhn lên Terminal
printf("Press count: %d\n", pressCount);
}
// Cp nht trng thái nút B1 cho vòng lp tiếp theo
B1= currentButtonState;
}
return 0;
}

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