STM32cubemx成功搭建SD卡和FATFS 对STM32F1

关于设置,网上很多例子,但是有些地方没有说清楚,

1. 我用的是最新的cube,库也是最新的,我相信这些基础的库一定是越更新越好。

  • NVIC,我设置的2bits与2bits,也就是原子历程里常用的group2,SDIO与DMA的中断分别为3,3、3,0;也就是DMA的中断更高;
  • RCC就不用说了、晶振这些也不说了、SYS也不用说了 ,
  • SDIO设置开启,SD卡1bit或者4bits,关键是在于分频的设置,因为我失败了很多次最后解决的办法就是 设置分频,虽然软件提示要默认0,用24MHZ,但是实际不行,各种错误,原子教程里说的是72M/(分频+2)
1bit 4bits
1 4
24MHZ 12MHZ
  • 上一步非常关键,接下来就是DMA这些了,根据自己来,优先级高低也随意
  • FATFS,只需要勾选SD卡,选择simplelified chinese GBK、Enable with…STACK、VOLUMES 设置1或者2都行、
    关于设置FATFS的参数请自己查看官方文档UM1721
  • 同时在FATFS中Platform Settings设置SD_DETECT引脚,根据自己的原理图添加引脚,然后分配给Found Solutions
  • 生成工程的时候,需要将minimum Stack Size设置为0x1000

2. 程序的使用

  • 基本初始化完成了,但是你会发现SD卡并没有初始化,记住其他设置不需要动,我们直接开始用
  • FATFS_LinkDriver(&SD_Driver, SDPath)的作用是将SD—Driver中的初始化函数地址给SDPath,所以f_mount时必须用
void MX_FATFS_Init(void)
{
	retSD = FATFS_LinkDriver(&SD_Driver, SDPath);
	if(retSD  == FR_OK)
	{
	if( f_mount(&SDFatFS,(const TCHAR*)SDPath,1) == FR_OK)
	{
	if( f_open(&SDFile,"sdtest.txt",FA_READ|FA_OPEN_ALWAYS) == FR_OK)
  	  {
    	  f_read(&SDFile,buff,100,&CONT);
  	  }
	}
	}
}

如果出现各种错误,按照我的顺序每一步都确认一下,关键的就是分频的问题,原子的教程里也是1bit用24MHZ,4bits用12MHZ

你可能感兴趣的:(STM32cubemx成功搭建SD卡和FATFS 对STM32F1)