使用环境(蓝色粗体字为特别注意内容) 1、软件环境:Keil MDK 5.15 2、硬件环境:STM32F103C8T6最小系统,Micro TF卡 在一个项目中需要用到SD卡,于是在某宝买了一块Micro TF卡插槽,SPI驱动: 
貌似不用那个小芯片好像可以用IO口直接驱动TF卡,不知道那个小芯片干嘛用的,也没工夫去追究了,废话少说,先来看接线: 关于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 ******************************************************************************/ #include 'usart_printf.h' char path[10] = '0:';// SD卡根目录 char wbuff[] = 'This is FATFS function test\r\n * f_open\r\n * f_write\r\n * f_close\r\n'; // ******************************************************************************* // ******************************************************************************* Hardware_Configuration(); 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); // 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); 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);
|