OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4179|回复: 5

我的SD卡FATFS实验

[复制链接]

4

主题

18

帖子

0

精华

高级会员

Rank: 4

积分
741
金钱
741
注册时间
2015-5-9
在线时间
236 小时
发表于 2015-7-28 12:26:37 | 显示全部楼层 |阅读模式
5金钱
用的是原子哥的FATFS代码,但是无论怎么设置,写入的总是“???”,我希望将MUP6050读到的数据,能够保真的写入SD中的.TXT中,方便查看。我之前已经实现用ministm32板子打印出加速度值了,但是无法使用FATFS写入SD,刚玩原子的miniSTM32才三个月,新手一枚请高手指点。
[mw_shl_code=c,true]#include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include "lcd.h" #include "key.h" #include "spi.h" #include "math.h" #include "24l01.h" #include "24cxx.h" #include "mpu6050.h" #include "IOI2C.h" #include "stm32f10x_tim.h" #include "usmart.h" #include "malloc.h" #include "MMC_SD.h" #include "ff.h" #include "exfuns.h" #include "fattester.h" int time=100; float Accel_x,Accel_y,Accel_z; float Angle; //最终测量角度 u8 AsciiBuff[33]; float MPU6050_DATAFIFO[3][11]; void HexToASCII(float data); void NVIC_Configuration(void); void Angle_Calculate(void); void MPU6050_Get_Accel(void); void TIM2_Configuration(void); //void KALMANFITER(float A_Z,float B_Z,float C_Z); //float p1=10,p2=10,p3=10; //covariance of the estimated value //float Aout=0,Bout=0,Cout=0;//variable saving data from sensors float A[1],B,C; //estimated value //float k1,k2,k3; float Temp; int main(void) { u32 total,free; delay_init(); NVIC_Configuration(); uart_init(115200); LED_Init(); LCD_Init(); KEY_Init(); //KEY initialization IIC_Init(); exfuns_init(); //为fatfs相关变量申请内存 usmart_dev.init(72); mem_init(); //初始化内存池 MPU6050_initialize(); //accelerometers initialization TIM2_Configuration();//open or close the timer POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,50,200,16,16,"Mini STM32"); LCD_ShowString(60,70,200,16,16,"FATFS TEST"); LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(60,110,200,16,16,"Use USMART for test"); LCD_ShowString(60,130,200,16,16,"2014/3/14"); while(SD_Initialize()) //检测SD卡 { LCD_ShowString(60,150,200,16,16,"SD Card Error!"); delay_ms(200); LCD_Fill(60,150,240,150+16,WHITE);//清除显示 delay_ms(200); LED0=!LED0;//DS0闪烁 } exfuns_init(); //为fatfs相关变量申请内存 f_mount(fs[0],"0:",1); //挂载SD卡 f_mount(fs[1],"1:",1); //挂载FLASH. while(exf_getfree("0",&total,&free)) //得到SD卡的总容量和剩余容量 { LCD_ShowString(60,150,200,16,16,"Fatfs Error!"); delay_ms(200); LCD_Fill(60,150,240,150+16,WHITE);//清除显示 delay_ms(200); LED0=!LED0;//DS0闪烁 } POINT_COLOR=BLUE;//设置字体为蓝色 LCD_ShowString(60,150,200,16,16,"FATFS OK!"); LCD_ShowString(60,170,200,16,16,"SD Total Size: MB"); LCD_ShowString(60,190,200,16,16,"SD Free Size: MB"); LCD_ShowNum(172,170,total>>10,5,16); //显示SD卡总容量 MB LCD_ShowNum(172,190,free>>10,5,16); //显示SD卡剩余容量 MB LCD_ShowString(60,250,100,32,16,"X:"); mf_mkdir ("0:test1"); //创建目录 mf_opendir("0://test1"); //打开目录 mf_open("0://test1//test.txt",0x04); //创建路径下的文件 mf_close(); //关闭文件 mf_open("0://test1//test.txt",0x02);// 以写方式打开文件test while(1) { delay_ms(500); LED1=!LED1; [/mw_shl_code] [mw_shl_code=c,true] while(time)//连续写入100个数据 { mf_write(&A[0],0xA); time--; } mf_close(); } } //main函数 /****************Timer2 interrupt service function**********************/ void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); MPU6050_Get_Accel();//collect acceleration from three sensors } } /***************Change the data form for transmit***************/ void HexToASCII(float data) { if ((data>0)||(data==0)) { AsciiBuff[0] =7;// reserved for testing输入空格 AsciiBuff[1] =( u8 )(data/100)%10 + 0x30; AsciiBuff[2] =( u8 )(data/10)%10 + 0x30; AsciiBuff[3] =( u8 )(int)(data)%10+ 0x30; AsciiBuff[4] =46; //输入冒号 AsciiBuff[5] = ( int )(data*10)%10+ 0x30; AsciiBuff[6] = ( int )(data*100)%10 + 0x30; AsciiBuff[7] =0x0A; if(AsciiBuff[1]==48 && AsciiBuff[2]==48) //如果第1、2位都为零,则都输入为空格 { AsciiBuff[1] =32; AsciiBuff[2] =32; } if( AsciiBuff[1]==48 ) { AsciiBuff[1] =32; } } else { data=-data; AsciiBuff[0] =7; AsciiBuff[1] =45; // insert a - : AsciiBuff[2] =( u8 )(data/10)%10 + 0x30; AsciiBuff[3] =( u8 )(int)(data)%10+ 0x30; AsciiBuff[4] =46; //输入小数点 AsciiBuff[5] = ( int )(data*10)%10+ 0x30; AsciiBuff[6] = ( int )(data*100)%10 + 0x30; AsciiBuff[7] =0x0A; if(AsciiBuff[2]==48) AsciiBuff[2] =32; //如果第1、2位都为零,则都输入为空格 } } void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /******************注册定时器2中断处理函数***********************/ NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /******************注册串口1中断服务函数************************/ NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//配置串口中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//占先式优先级设置为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //副优先级设置为0 NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;//中断禁止 NVIC_Init(&NVIC_InitStructure);//中断初始化 } void MPU6050_Get_Accel(void) { static uint8_t DataBuffer[6]; //数据缓存 IICreadBytes(devAddr, MPU6050_RA_ACCEL_XOUT_H, 2, DataBuffer); Accel_x= (short)((DataBuffer[0]<<8)+DataBuffer[1]); //databuffer0左移八位,与databuffer1相加,读取X轴加速度 // Accel_y= (short)((DataBuffer[2]<<8)+DataBuffer[3]); //读取Y轴加速度 // Accel_z= (short)((DataBuffer[4]<<8)+DataBuffer[5]); //读取Z轴加速度 // Accel_z= (short)((DataBuffer[0]<<8)+DataBuffer[1]); //读取Z轴加速度 // IICreadBytes(devAddr, MPU6050_RA_TEMP_OUT_H, 2, DataBuffer); // Temp= (short)((DataBuffer[0]<<8)+DataBuffer[1]); //读取温度 // Temp=(Temp/340)+ 36.53; //±8g A[0] =(Accel_x -0) /16384; //去除零点偏移,计算得到加速度(g) // B = (Accel_y +0) /16384; // C = (Accel_z +2131) /16384; // A = (Accel_x -80) /4096; //去除零点偏移,计算得到加速度(g) // B = (Accel_y +0) /4096; // C = (Accel_z +0) /4096; //printf("%f\n",Accel_x); printf("%f\n",A[0]);///////////////////////////////////////// // printf("%f\n",C);///////////////////////////////////////// // printf("%f\n",Temp);///////////////////////////////////////// } [/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

回复【4楼】一个好人: --------------------------------- 我的问题已经解决了,是我写入的变量格式不对,我用的是FLOAT型,而txt只能写入ASCIL或者字符串,使用SPRINTF()将变量转化为字符串在写入就好了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

18

帖子

0

精华

高级会员

Rank: 4

积分
741
金钱
741
注册时间
2015-5-9
在线时间
236 小时
 楼主| 发表于 2015-7-28 12:26:38 | 显示全部楼层
回复【4楼】一个好人:
---------------------------------
我的问题已经解决了,是我写入的变量格式不对,我用的是FLOAT型,而txt只能写入ASCIL或者字符串,使用SPRINTF()将变量转化为字符串在写入就好了
回复

使用道具 举报

4

主题

18

帖子

0

精华

高级会员

Rank: 4

积分
741
金钱
741
注册时间
2015-5-9
在线时间
236 小时
 楼主| 发表于 2015-7-28 12:28:24 | 显示全部楼层
 ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=        =        =        =        =        =        =        =        =        =        =        =        =       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=       ?=        =        =        =        =        =        =        =        =        =        =        =      



实际写入.TXT的就是这些,这是个什么鬼。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-28 23:11:30 | 显示全部楼层
先测试下文件系统写入是否正常。
要学会化繁为简...
总是什么都搞到一坨,神仙也没办法。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
发表于 2015-8-7 10:03:00 | 显示全部楼层
回复【2楼】龙云先生:
---------------------------------
你好,不知道你的问题解决了没有,你是按照地址写入的,而不是文件,是不是这个原因呢?
回复

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
发表于 2015-8-7 17:25:18 | 显示全部楼层
好的  知道了  谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 04:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表