Thông báo

Collapse
No announcement yet.

giao tiếp thẻ nhớ MICRO SD với STM32f103 qua giao tiếp SPI

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • giao tiếp thẻ nhớ MICRO SD với STM32f103 qua giao tiếp SPI

    Là người mới học nên thường xuyên xin xỏ các bạn, các anh đi trước trên mạng, hôm nay mạnh dạn chia sẻ coi như trả bài. Mong rằng nó có thể hỗ trợ cho các bạn mới học và tiếp xúc với thẻ nhớ Micro SD và STM32.
    Chương trình của mình thực hiện
    • Giao tiếp với thẻ nhớ 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ơ( thực ra mình thấy thay đổi cái đuôi .txt bằng cái gì bạn thích thì nó sẽ tạo ra file đó ví dụ như .love chẳng hanh :v)
    • Đọc ghi file .txt mà mình tạo ra( các bạn tìm hiểu các hàm trong ff.c). Ở đây mình dùng giap tiếp UART với máy tính ( dùng phần mềm HerculesSetupUntility3.2.5) để truyền dữ liệu từ máy tính xuống arm sau đó ghi vào thẻ nhớ cũng như hiểu thị những dữ liệu từ thẻ nhớ đã được đọc bằng STM32.
    Chương trình đã chạy trên kit dùng STM32f103c8t6 và STM32f103VET6.
    Khi giao tiếp với thẻ nhớ với bộ thư viện FATFS mình thấy rằng đều có khai báo
    FATFS fsa; /* Work area (file system object) for logical drive */
    FIL fsrc; /* file objects */
    Ban đầu mình đọc ghi thẻ nhớ thì nghĩ rằng đây là địa chỉ của file trong thẻ và mỗi File .txt tạo ra thì sẽ khác nhau, nhưng sau đó thấy rằng đây là định danh cho thẻ nhớ( tức là nếu chỉ ghi vào 1 thẻ nhớ thì 2 mục này sẽ chung cho tất cả các file trong qua trình lập trình sau nay.
    FRESULT res;// sử dụng trả lại kết quả co các quá trình giao tiếp SD
    UINT br, bw; /* File read/write count */
    char path[512]="0:";// đây là bufe sẽ lưu tên File bạn mở khi thao tác với thẻ nhơ
    res = f_open(&fsrc , "0:/write.TXT" , FA_CREATE_ALWAYS | FA_WRITE);
    trong chương trình của mình có 3 chương trình con

    void USART1_IRQHandler(void)// Chuong trinh ngat voi uart1//
    mình giao tiếp UART sử dụng ngắt thu, và sẽ thực hiên thu dữ liêu( ở đây là dạng kí tự) để ghi vào buffer_rx[ ] : bộ đệm nhận dữ liệu trước khi ghi vào thẻ nhớ và path[512] như giải thich ở trên
    để phân biệt quá trình đọc, ghi mình sử dụng flag2.
    flag2 = 0 không thực hiện đọc hay ghi
    flag2=2 (else if (c==0x5c) flag2=2;// khi kí tự nhận được là "" ) thực hiện ghi
    flag2=3 (else if (c==0x2a) flag2=3;// khi kí tự nhận được là "*" ) thực hiện đọc
    sau mỗi quá trình đọc hay ghi thì đều xóa flag2 về 0
    để phân biệt chuỗi kí tự truyền xuống sẽ là tên file hay dữ liệu được ghi vào file mình sử dụng Flag1. Khi Flag1 ==1 thì dữ liệu nhận được là tên file.
    void write_sd( const XCHAR*path)// XCHAR*path ten file can doc du lieu – là chương trình ghi dữ liệu nhận được từ máy tính qua uart.
    void read_sd( const XCHAR*path)// XCHAR*path ten file can doc du lieu – là chương trình đọc dữ liệu từ thẻ nhớ sau đó gửi lên máy tính qua uart.
    Còn có một số biến khác các bạn đọc trong chương trình sẽ hiểu
    Chú ý khi kiểm tra chương trình,
    Để mở một file mới hay đọc dữ liệu từ 1file bạn gửi như sau: /read.txt*
    Khi đó trong path[ ] sẽ có 0:read.txt. và quá trình truy cập thẻ nhớ mới thành công
    Dấu “ *” là đánh dấu cho quá trình đọc
    Để ghi vào 1 file thì bạn thực hiện 2 bước
    Đầu tiên gửi tên file ví dụ /read.txt\ khi đó trong path[ ] sẽ có 0:read.txt ( dấu “ \ ” là đánh dấu cho quá trình ghi)
    Sau đó bạn gửi dữ liệu mà bạn muốn ghi vào file vừa mở ra. Ví dụ như dòng
    Toi dang kiem tra ghi SD\( chú ý là phải có dấu “ \ ” ở cuối)
    Trong chương trình thì sau tên file sẽ chi ghi được 2 lần rồi lại phải nhập lại tên. Các bạn có thể điều chình bằng đoạn
    n++;
    if( n==3)// cho phep ghi 2 dong 1 lan vao 1 file
    {
    flag1=1;
    for (i=2; i<=50; i++)// xoa buffer_rx, path
    {
    path[i]=0;
    }
    Bài viết dựa trên tài liệu của các bạn đi trươc, cũng như đưa ra ở gọc độ của người mới học nên kiến thức còn chưa sâu. Rất mong được trao đổi với mọi người
    Last edited by silent_eagle; 07-02-2015, 10:10.

  • #2
    không hiểu sao mình không thể tải chương trình lên được, toàn ghi là" invail..." khi tải lên.

    Comment


    • #3
      các bạn vào
      http://mcu.banlinhkien.vn/threads/gi...tiep-spi.4014/
      lấy link và file use.rar của mình về rồi kiểm tra nhe

      Comment


      • #4
        Mình cũng đang tìm hiểu làm máy nghe nhạc này trên kit stm32f103c8t6 và kit stm32f103Rbt6 nhưng do mới tìm hiểu và kiến thức còn hạn chế mình vẫn chưa giao tiếp để đọc thẻ nhớ được bạn có thể cho mình xin sơ đồ mạch và code được không.
        mail minh là vandt2@gmail.com
        cảm ơn bạn nhiều!

        Comment


        • #5
          code mình không tải lên được, toàn báo lỗi, mình tải code mẫu về
          bạn vào cái link mình gửi ở trên rồi tải về, chương trình mới chỉ dừng lại ở đọc ghi thẻ File TXT thôi
          cái kit c8t6 mình mua của họ và làm thêm cái mạch để đọc SD thôi

          Comment

          Về tác giả

          Collapse

          silent_eagle Tìm hiểu thêm về silent_eagle

          Bài viết mới nhất

          Collapse

          Đang tải...
          X