STM32F103C8T6+SD/Micro TF卡+SFATS+软SPI+硬SPI
生活随笔
收集整理的這篇文章主要介紹了
STM32F103C8T6+SD/Micro TF卡+SFATS+软SPI+硬SPI
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用環境(藍色粗體字為特別注意內容)
1、軟件環境:Keil MDK 5.15
2、硬件環境:STM32F103C8T6最小系統,Micro TF卡
在一個項目中需要用到SD卡,于是在某寶買了一塊Micro TF卡插槽,SPI驅動:
貌似不用那個小芯片好像可以用IO口直接驅動TF卡,不知道那個小芯片干嘛用的,也沒工夫去追究了,廢話少說,先來看接線:
TF卡模塊 ? STM32單片機 GND ? ? -> ? ?GND CS ? ? ?-> ? ?PB12/SPI2_NSS SCK ? ? -> ? ?PB13/SPI2_SCK MISO ? -> ? ?PB14/SPI2_MISO MOSI ? -> ? ?PB15/SPI2_MOSI
關于CS/NSS管腳,即我們熟知的片選信號,作為主設備NSS管腳為高電平,從設備NSS管腳為低電平。
一開始為了性能考慮,打算使用硬件SPI2,后來發現速度太快了,SD/TF卡的速度跟不上,調了半天調不出來,必須降低APB總線速率:
//配置APB1(PCLK1)鐘=AHB 1/2時鐘
?RCC_PCLK2Config(RCC_HCLK_Div4); //72/4=18MHz ,會降低總線頻率,導致串口不正常!慎用!
但是總線速率一下降,延時函數,串口通信函數都會受影響,于是考慮使用兩種方式實現即硬件SPI+軟件模擬SPI。
最終使用軟件模擬SPI并且移植SFATS,讀取2G的SD卡成功,
?
main函數如下?
/******************************************************************************** @file SDFatFS/source/main.c* @author Pang* @version V1.0.2* @date 1/1/2019* @brief******************************************************************************/#include "common.h" #include "led.h" #include "delay.h" #include "usart_printf.h"char path[10] = "0:";// SD卡根目錄 FATFS fs;char wbuff[] = "This is FATFS function test\r\n * f_open\r\n * f_write\r\n * f_close\r\n"; char wbuff2[512 * 26];// ******************************************************************************* // Function Name : main // Description : // Input : None // Output : None // Return : None // ******************************************************************************* int main(void) {u16 i, j;LED_Init();Hardware_Configuration();ffext_mount(0, &fs);ffext_scanfiles (path);for(i = 0; i < 26; i++){for(j = 0; j < 512; j++){wbuff2[i * 512 + j] = 'A' + i;}}ffext_read("0:/test/test.ini", wbuff2, (512 * 26), FA_OPEN_ALWAYS | FA_READ);ffext_write("0:/test/out.ini", wbuff2, (512 * 26), FA_OPEN_ALWAYS | FA_WRITE);printu(">%s", wbuff2);// ffext_write("0:CardInfo.txt", wbuff, sizeof(wbuff)-1, FA_OPEN_ALWAYS | FA_WRITE);// ffext_write("0:ffext2.ini", wbuff2, (512*26), FA_OPEN_ALWAYS | FA_WRITE);for(i = 0; i < 26; i++){for(j = 0; j < 512; j++){wbuff2[i * 512 + j] = 0;}}ffext_read("0:ffext2.ini", wbuff2, (512 * 26), FA_OPEN_ALWAYS | FA_READ);ffext_write("0:ffext1.txt", wbuff2, (512 * 26), FA_OPEN_ALWAYS | FA_WRITE);while (1){} }?
總結
以上是生活随笔為你收集整理的STM32F103C8T6+SD/Micro TF卡+SFATS+软SPI+硬SPI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机基础 英语名称,计算机英语词汇:计
- 下一篇: GNSS第十一周作业