Các thao tác xử lý file trên thẻ nhớ micro SD sử dụng STM32F103

Bài viết này sẽ hướng dẫn bạn cách để:

– Giao tiếp với thẻ nhớ micro SD qua giao tiếp SPI (cụ thể là SPI1)

– Sử dụng bộ thư viện FATFS để tạo ra file .txt trong thẻ nhớ

– Đọc ghi file .txt đã được lưu

Và một số chức năng xử lý file khác.

Project này được thực hiện trên phần mềm STM32CubeMX 5.2.0 và KeilC uVision 5.26.2.0

Kết nối phần cứng

STM32 Micro SD Card
PA5 SCK
PA7 MOSI
PA6 MISO
5V VCC
GND GND
GND CS

– Ngoài ra nên có thêm 1 USB TTL để quan sát dữ liệu:

STM32 USB TTL
PA10 TX
PA9 RX

[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]

Tạo project với CubeMx

Bước 1: Chọn các chức năng cho ví dụ này: Serial wire (nạp code và debug), FATFS (mô-đun hệ thống tập tin FAT / exFAT chung), SPI1 (giao tiếp module thẻ nhớ), USART2 (hiển thị dữ liệu lên màn hình máy tính).

– Cấu hình clock cho project

Bước 2: Kích chọn ô Configuration và thay đổi các thông số đã được highlight như các hình dưới đây:

– Cấu hình FatFs:

– Cấu hình cho SPI1:

– Cấu hình cho UART2:

Bước 3: Generate code

– Đặt tên cho project, chọn Toolchain là MDK-ARM V5

– Kích chọn Generate code

Bước 4: Thêm thư viện sd vào Keil C project

– Copy các file fatfs.c, sd.c và user_diskio.c (được đính kèm cuối bài viết) vào thư mục Src của project

– Copy các file fatfs.h, sd.huser_diskio.h vào thư mục Inc của project

Bước 5: Add file sd.c trong thư mục Src vào project bằng cách kích chuột phải vào thư mục Application/User -> Add Existing Files to Group Application/User -> sd.c

Chương trình code trên KeilC

Trở lại file main.c, ta thêm thư viện sd.h vào project:

Ở mục /* USER CODE BEGIN PV */

Ở mục /* USER CODE BEGIN 0 */

Mô tả 1 số hàm cần dùng trong thư viện sd.h:

SD_List_File: Liệt kê tất cả file hoặc thư mục có trong thẻ nhớ.

SD_Write_File: Ghi dữ liệu vào file, nếu file chưa tồn tại thì hàm này sẽ tạo file và ghi file, dữ liệu sẽ được ghi đè vào lần ghi tiếp theo.

SD_Read_File: Đọc tất cả dữ liệu có trong file.

SD_createSubDir: hàm tạo thư mục con

SD_deleteAllFile: Xóa tất cả file hoặc thư mục có trong thẻ nhớ.

Link tải các file thư viện ở đây

* Lưu ý: Nếu các bạn thực hiện thay đổi cấu hình bên STM32CubeMX rồi sinh code thì các bạn thực hiện lại Bước 4 như ở trên vì khi sinh code mới các thư viện fatfs, user_diskio sẽ bị mất đi và thay bằng thư việc gốc do nhà sản xuất cung cấp.

Xem thêm: Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32 tại đây.