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.h và user_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:
0 1 |
/* USER CODE BEGIN Includes */ #include "sd.h" |
Ở mục /* USER CODE BEGIN PV */
0 1 2 |
/* Private variables ---------------------------------------------------------*/ volatile uint16_t Timer1; extern FATFS SDFatFs; //File system object structure (FATFS) |
Ở mục /* USER CODE BEGIN 0 */
0 1 |
/* USER CODE BEGIN 0 */ struct sd_data SD; |
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.