标题:
SD卡+FATFS Unicode表存储SD卡中读取,转为GBK显示FATFS文件名stm32源码
[打印本页]
作者:
415777314
时间:
2017-9-29 17:37
标题:
SD卡+FATFS Unicode表存储SD卡中读取,转为GBK显示FATFS文件名stm32源码
Unicode表存储SD卡中读取,转为GBK显示FATFS文件名
本实验将实现如下功能:开机的时候先初始化SD卡,如果SD卡初始化完成,则读取扇区0的数据,然后通过串口打印到电脑上。如果没初始化通过,则在LCD上提示初始化失败。 同样用DS0来指示程序正在运行。
注意:
1,本实验可以SWD下载仿真.
2,如果遇到不能识别的卡,有可能是不兼容造成的,请换卡.
STM32单片机源程序如下:
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "timer.h"
#include "lcd.h"
#include "touch.h"
#include "mmc_sd.h"
#include "24cxx.h"
#include "text.h"
#include "SDfont.h"
#include "exfuns.h"
#include "malloc.h"
#include "string.h"
#include "spi.h"
#include "ff.h"
u8 buf[512];//SD卡数据缓存区
const TCHAR flie1[]={"0:news/news.txt"};
const TCHAR flie2[]={"0:news/apple.txt"};
const TCHAR flie3[]={"0:news/love.txt"};
void myflie(const TCHAR *p2)
{
FRESULT res=FR_OK;
u8 a;
LCD_Clear(WHITE);
file=(FIL*)mymalloc(SRAMIN,sizeof(file));
res = f_open(file,p2,FA_OPEN_EXISTING|FA_READ);
if(!res)
{
br=1;
for (;;)
{
for(a=0; a<64; a++) buf[a]=0;
res = f_read(file, buf, sizeof(buf),&br);
if (res || br < sizeof(buf)) break; // error or eof
}
}
Show_Str(50,250,300,16,buf,16,0);
}
u8 sim900a_hex2chr(u8 hex)
{
if(hex<=9)return hex+'0';
if(hex>=10&&hex<=15)return (hex-10+'A');
return '0';
}
int main(void)
{
u8 shuzu[20];
u8 *dst=shuzu;
u16 temp;
const u8 *src="我";
u8 test[2];
u32 total,free;
FRESULT res=FR_OK;
u32 sd_size;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LCD_Init(); //初始化液晶
LED_Init(); //LED初始化
KEY_Init();
exfuns_init(); //exfuns 初始化
mem_init(SRAMIN); //初始化内部内存池
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(50,50,"Mini STM32");
LCD_ShowString(50,70,"SD Card TEST");
LCD_ShowString(50,90,"ATOM@ALIENTEK");
LCD_ShowString(50,110,"Only use sd card");
LCD_ShowString(50,230,"2014/7/31");
while(SD_Initialize()!=0)//检测不到SD卡
{
LCD_ShowString(50,130,"SD Card Failed!");
delay_ms(500);
LCD_ShowString(50,130,"Please Check! ");
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
//检测SD卡成功
LCD_ShowString(50,130,"SD Card Checked OK ");
LCD_ShowString(50,150,"SD Card Size: Mb");
sd_size=SD_GetSectorCount();//得到扇区数
LCD_ShowNum(154,150,sd_size>>11,5,16);//显示SD卡容量
SDFont_Init();
exfuns_init();
f_mount(0,fs[0]); //挂载SD卡
while(exf_getfree("0",&total,&free))
{
LCD_ShowString(50,170,"fatfs error!") ;
delay_ms(200);
LED0=!LED0;
}
LCD_ShowString(50,170,"fatfs ok!") ;
LCD_ShowString(50,190,"SD Card Size: Mb");
LCD_ShowNum(154,190,total>>10,5,16);
LCD_ShowString(50,210,"SD free Size: Mb");
LCD_ShowNum(154,210,free>>10,5,16);
Show_Str_Mid(0,30,"!汉字测试成功!",16,240);
LCD_Clear(WHITE);//清屏
/****************读取SD卡文件**************/
// file=(FIL*)mymalloc(SRAMIN,sizeof(file));
// res = f_open(file,"0:news/news.txt",FA_OPEN_EXISTING|FA_READ);
// if(!res)
// {
// br=1;
// for (;;)
// {
// res = f_read(file, buf, sizeof(buf),&br);
// if (res || br < sizeof(buf)) break; // error or eof
// }
// }
// Show_Str(0,0,300,16,buf,16,0);
// f_close(file);
// myfree(SRAMIN,file);
// Show_Str(50,270,400,16,"好烦躁啊!!!!",16,0);
test[1]=*src++;
test[0]=*src++;
temp=(u16)ff_convert((WCHAR)*(u16*)test,1);
LCD_ShowNum(50,300,(u32)temp,6,16);
// dst[0]=sim900a_hex2chr((temp>>12)&0X0F);
// dst[1]=sim900a_hex2chr((temp>>8)&0X0F);
// dst[2]=sim900a_hex2chr((temp>>4)&0X0F);
// dst[3]=sim900a_hex2chr(temp&0X0F);
// dst[4]=0;
//// LCD_ShowString(60,110,dst);
while(1)
{
// t=KEY_Scan();
// if(t)
// {
// switch(t)
// {
// case 1:
// myflie(flie1);
// break;
// case 2:
// myflie(flie2);
// break;
// case 3:
// myflie(flie3);
// break;
// }
// }else delay_ms(10);
delay_ms(200);
LED0=!LED0;
}
}
复制代码
所有资料51hei提供下载:
SD卡 FATFS.rar
(2.23 MB, 下载次数: 37)
2017-9-29 17:36 上传
点击文件名下载附件
SD卡+FATFS
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1