STM32CubeMX 5.2配置使用STM32F7 的 SD与FatFs

目录

一  配置STM32CubeMX

二 编写测试代码

三  将cc936.c文件中的uni2oem与oem2uni数组转换成bin文件


一  配置STM32CubeMX

1.配置Parameter Settings。(Tips:由于各种卡的品质有区别,有时候可以适当增加clock divide的值)

2 .配置DMA Settings。(Tips:使用FatFs必须开启DMA,在FATFS的Advanced Settings页面,Use dma template只有Enabled)

3. NVIC Settings 与 GPIO Settings

4. 勾选FATFS,一帮情况只需要配置Set Defines下的CODE_PAGE

二 编写测试代码

在自动生成的MX_FATFS_Init函数中添加测试代码。能够正常输出SD容量,则表示SD卡初始化成功。

void MX_FATFS_Init(void)
{
    /*## FatFS: Link the SD driver ###########################*/
    retSD = FATFS_LinkDriver(&SD_Driver, SDPath);

    /* USER CODE BEGIN Init */

    /* additional user code for init */
    retSD = f_mount(&SDFatFS, SDPath, 1); 					//挂载SD卡
    if(retSD)
    {
        Error_Handler();
    }
    sd_total_size = (hsd1.SdCard.BlockNbr >> 20) *  hsd1.SdCard.BlockSize;
    sd_total_size = (SDFatFS.csize * (SDFatFS.n_fatent - 2) / 2) >> 10;
    sd_free_size  = (SDFatFS.csize * SDFatFS.free_clst / 2) >> 10;
    printf("SD Capacity: = %d M", (hsd1.SdCard.BlockNbr >> 20) *  hsd1.SdCard.BlockSize);
    printf("SD Total Size = %d M", sd_total_size);
    printf("SD Free  Size = %d M", sd_free_size);

    /* USER CODE END Init */
}

三  将cc936.c文件中的uni2oem与oem2uni数组转换成bin文件

     由于cc936中的有700k左右,该文件主要是数组uni2oem与oem2uni占用空间大,我们可以将该数组转换成bin格式,烧录进SPI Flash,调用数组中的值改为调用对应SPI Flash中的值,这样可以节省大量的空间。

操作方式如下:

  • 下载C2B转换助手V1.1软件

  • 新建 UNIGBK.TXT文档,将两个数组 oem2uni 和 uni2oem 存放在该文档中
  • 使用C2B转换助手V1.1软件打开UNIGBK.TXT文档,点击转换生成UNIGBK.BIN文件
  • 将UNIGBK.BIN烧录进SPI FLASH(此过程省略,可参考博客:)
  • 修改cc936文件中的ff_convert函数如下(代码中的 ftinfo.ugbksize 为我们刚刚生成的 UNIGBK.bin 的大小,而 ftinfo.ugbkaddr 是我们存放 UNIGBK.bin 文件的首地址。):
WCHAR ff_convert (	/* Converted code, 0 means conversion error */
	WCHAR	src,	/* Character code to be converted */
	UINT	dir		/* 0: Unicode to OEMCP, 1: OEMCP to Unicode */
)
{
	WCHAR t[2];
	WCHAR c;
	uint32_t i, li, hi;
	uint16_t n;			 
	uint32_t gbk2uni_offset=0;		  
						  
	if (src < 0x80)c = src;//ASCII,直接不用转换.
	else 
	{
 		if(dir)	//GBK 2 UNICODE
		{
			gbk2uni_offset= ftinfo.ugbksize/2;	 
		}else	//UNICODE 2 GBK  
		{   
			gbk2uni_offset=0;	
		}    
		/* Unicode to OEMCP */
		hi = ftinfo.ugbksize/2;//对半开.
		hi = hi / 4 - 1;
		li = 0;
		for (n = 16; n; n--)
		{
			i = li + (hi - li) / 2;	
			W25QXX_Read((uint8_t*)&t,ftinfo.ugbkaddr+i*4+gbk2uni_offset,4);//读出4个字节  
			if (src == t[0]) break;
			if (src > t[0])li = i;  
			else hi = i;    
		}
		c = n ? t[1] : 0;  	    
	}
	return c;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值