标题:
STM32 SDIO+USB+FATFS程序(测试可用)
[打印本页]
作者:
mastergz
时间:
2017-6-21 17:29
标题:
STM32 SDIO+USB+FATFS程序(测试可用)
经测试 可以使用
QQ截图20170621172853.png
(52.37 KB, 下载次数: 143)
下载附件
2017-6-21 17:29 上传
部分stm32单片机源程序预览如下:
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
* File Name : main.c
* Author : MCD Application Team
* Version : V3.1.1
* Date : 04/07/2010
* Description : Mass Storage demo main file
********************************************************************************
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usb_lib.h"
#include "hw_config.h"
#include "usb_pwr.h"
#include "sdcard.h"
//#include "lcd.h"
#include "ff.h"
//#include "pic.h"
//#include "book.h"
#include <stdio.h>
#include <string.h>
static vu32 TimingDelay = 0;
extern SD_CardInfo SDCardInfo;
extern SD_Error Status ;
extern u8 ASCII_Table[95][16];
FATFS fs;
FIL fsrc, fdst; // file objects
BYTE buffer[1024]; // file copy buffer
FRESULT res; // FatFs function common result code
UINT br, bw; // File R/W count
BYTE buff_filename[15][20]; //最多只能读9个文件,保存9个文件名,文件名采用短文件名,最多13个字符
extern uint16_t MAL_Init (uint8_t lun);
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Extern variables ----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
//#define Lcd_On GPIO_SetBits(GPIOB,GPIO_Pin_5);
//#define Lcd_Off GPIO_ResetBits(GPIOB,GPIO_Pin_5);
//#define Pow_On GPIO_SetBits(GPIOD,GPIO_Pin_3);
//#define Pow_Off GPIO_ResetBits(GPIOD,GPIO_Pin_3);
//#define Set_Rst GPIO_SetBits(GPIOF,GPIO_Pin_11);
//#define Clr_Rst GPIO_ResetBits(GPIOF,GPIO_Pin_11);
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
u8 stringcopy(BYTE *buff_to,BYTE *buff_from)
{
u8 i=0;
for(i=0;i<13;i++)
buff_to[i] = buff_from[i];
return 1;
}
void ReadSDFile(void)
{
// FIL file;
FILINFO finfo;
DIR dirs;
int i_name=0;
// char *fn;
XCHAR path[50]={"picture"};
disk_initialize(0);
f_mount(0, &fs);
res = f_opendir(&dirs, path);
if (res == FR_OK)
{
while (f_readdir(&dirs, &finfo) == FR_OK)
{
if (finfo.fattrib & AM_ARC)
{
if(!finfo.fname[0]) //文件名不为空,如果为空,则表明该目录下面的文件已经读完了
break;
//res = f_open(&fsrc, finfo.lfname, FA_OPEN_EXISTING | FA_READ);
stringcopy(buff_filename[i_name], (BYTE*)finfo.fname);
i_name++;
// res = f_read(&fsrc, &buffer, 50, &br);
f_close(&fsrc);
}
}
}
f_mount(0,NULL);
}
void ReadSDFiles(void)
{
disk_initialize(0);
f_mount(0, &fs);
res = f_open(&fsrc,"picture/test.txt",FA_OPEN_EXISTING | FA_READ);
res = f_read(&fsrc, &buffer,9, &br);
f_close(&fsrc);
f_mount(0,NULL);
}
void WriteSDFile(void)
{
FIL file;
// FILINFO finfo;
//DIR dirs;
// int i_name=0;
//char *fn;
//XCHAR path[50]={"picture"};
disk_initialize(0);
res = f_mount(0, &fs);
res = f_open(&file, "1055.txt", FA_CREATE_ALWAYS | FA_WRITE); //创建一个新的文件
res = f_lseek(&file,file.fsize);
f_printf (&file,"20100508sdsd看看看%s\r\n" );
f_close(&file);
f_mount(0, NULL);
}
/**************************************************************************
*sd init and config
**************************************************************************/
SD_Error SD_InitAndConfig(void)
{
/////////////////////////////////////////////////////////////////////
//////// SDCARD Initialisation //////////////////////////////////////
/////////////////Section adapted from ST example/////////////////////
/*-------------------------- SD Init ----------------------------- */
Status = SD_Init();
if (Status == SD_OK)
{
/*----------------- Read CSD/CID MSD registers ------------------*/
Status = SD_GetCardInfo(&SDCardInfo);
}
if (Status == SD_OK)
{
/*----------------- Select Card --------------------------------*/
Status = SD_SelectDeselect((u32) (SDCardInfo.RCA << 16));
}
if (Status == SD_OK)
{
Status = SD_EnableWideBusOperation(SDIO_BusWide_4b);
}
/* Set Device Transfer Mode to DMA */
if (Status == SD_OK)
{
Status = SD_SetDeviceMode(SD_DMA_MODE);//oet
// Status = SD_SetDeviceMode(SD_POLLING_MODE);
// Status = SD_SetDeviceMode(SD_INTERRUPT_MODE);
}
return Status;
}
/*******************************************************
*Usb Connect
*******************************************************/
void UsbConnect(void)
{
USB_Cable_Config(ENABLE);
USB_Init();
while (bDeviceState != CONFIGURED);
}
/*******************************************************
* Delay ms us
*****************************************************/
void delay_us(unsigned long i)
{
while( i--)
{
}
}
// 毫秒级延时函数
void delay_ms(unsigned long time)
{
while(time--)
{
delay_us(1000);
}
}
/*******************************************************************************
* Function Name : Delay
* Description : Inserts a delay time.
* Input : nCount: specifies the delay time length (time base 10 ms).
* Output : None
* Return : None
*******************************************************************************/
void Delay(u32 nCount)
{
delay_ms(nCount*10);
}
/*******************************************************************************
* Function Name : main.
* Description : Main routine.
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
int main(void)
{
Set_System();
Set_USBClock();
USB_Interrupts_Config();
//Pow_On;
SD_InitAndConfig();
USB_Init();
//Set_Rst;
// Delay(20);
//Clr_Rst;
// Delay(20);
// Set_Rst;
// Delay(20);
// STM3210E_LCD_Init();
// LCD_Clear(Black);
// Lcd_On;
// LCD_SetBackColor(Black);
//LCD_SetTextColor(Yellow);
// ReadSDFile();
WriteSDFile();
//delay_ms(500);
// LCD_DisplayStringLine(Line0,"File read success");
// LCD_DisplayStringLine(Line1,buff_filename[0]);
// LCD_DisplayStringLine(Line2,buff_filename[1]);
//
// LCD_DisplayStringLine(Line3," ");
// LCD_DisplayStringLine(Line4," ");
// LCD_DisplayStringLine(Line3,buff_filename[2]);
// LCD_DisplayStringLine(Line4,buff_filename[3]);
// LCD_DisplayStringLine(Line5,buff_filename[4]);
// LCD_DisplayStringLine(Line6,buff_filename[5]);
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
M3_SDIO USB FATFS.rar
(734.01 KB, 下载次数: 176)
2017-6-21 17:52 上传
点击文件名下载附件
可用
下载积分: 黑币 -5
作者:
月林秋枫
时间:
2018-2-8 14:18
谢谢分享
作者:
月林秋枫
时间:
2018-2-8 14:19
没黑币,下不了呢。
作者:
luoteyy1996
时间:
2018-7-22 22:24
谢谢楼主
作者:
luoteyy1996
时间:
2018-7-22 22:25
谢谢分享,最近刚好想要将一些数据通过本地存储和GPRS放在两个地方,感谢感谢
作者:
jjwangxu2008
时间:
2018-9-27 10:26
谢谢分享
作者:
646097010
时间:
2019-3-28 10:06
感谢分享
作者:
wo411322
时间:
2019-3-28 20:43
好东西,收藏了,谢谢楼主
作者:
pepper83
时间:
2020-2-22 10:30
具体是哪个型号?怎么提示找不到单片机型号?
作者:
zzh999
时间:
2021-7-7 16:47
FATFS使用是的哪个本版的呢?想最新本版的使用。
作者:
kevin_zhen
时间:
2022-1-17 08:17
正在学习FATFS,好资料,先收藏了,谢谢
作者:
银白曜日
时间:
2023-8-11 10:26
适用于103
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1