OpenEdv-开源电子网

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

stm32f407内存卡存储DS18B20温度数据 FAFTS

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-11-28
在线时间
4 小时
发表于 2020-9-22 15:39:26 | 显示全部楼层 |阅读模式
1金钱
以前的工程拿来修改一下
检测DS18B20的温度数据  存储到 sd卡中,使用fatfs
经过各种绕路 一开始不能连续存储  每一次存储数据都会将上次的数据覆盖
查阅资料
//    f_mount(0, &fs);
            //如果data.txt存在,则打开;否则,创建一个新文件
//    res = f_open(&file, "0:/data.txt",FA_OPEN_ALWAYS|FA_READ|FA_WRITE );
        //(const TCHAR*)  转换为字符串
           /* f_open函数:创建文件
        fp:文件指针
        1:test.txt:文件名
        第三个参数是文件操作的权限,读/写/不管文件是否存在都创建(存在就覆盖)
        */
使用           

                 //     /* 打开文件 */
        res=f_open(&fsrc, (const TCHAR*)filename, FA_CREATE_ALWAYS | FA_WRITE);           
        /* 将缓冲区的数据写到文件中 */      

         res = f_write(&fsrc, wtext1, sizeof(wtext1), &bw);     

        f_close(&fsrc);                         //关闭文件     

    /* 打开文件   没有文件则重新创建*/
        res=f_open(&fsrc,(const TCHAR*)filename, FA_OPEN_EXISTING | FA_WRITE);                      
        f_lseek(&fsrc, f_size(&fsrc)); //将文件指针移动到文件末尾        
         res = f_write(&fsrc, wtext1, sizeof(wtext1), &bw);     
            /* f_close:关闭文件,使用f_open必须使用f_close,不然会有缓存
        fp:文件指针
        */
        f_close(&fsrc);                         //关闭文件     

上面标注的这两句   FA_CREATE_ALWAYS       FA_OPEN_EXISTING



最后虽然的文件的覆盖问题解决了

res = f_write(&fsrc, wtext1, sizeof(*wtext1), &bw);   



每次存储的都是wtext1的第一个字符











正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-11-28
在线时间
4 小时
 楼主| 发表于 2020-9-22 15:47:51 | 显示全部楼层

  1.        
  2.                                  //     /* 打开文件 */
  3.                 res=f_open(&fsrc, (const TCHAR*)filename, FA_CREATE_ALWAYS | FA_WRITE);                       
  4.                 /* 将缓冲区的数据写到文件中 */               
  5.                      /* f_write函数:向文件中写入数据
  6.         fp:文件指针
  7.         write_buf:要写入文件的数据
  8.         第三个参数:写入多少个字节
  9.         第四个参数:指针,返回已经写入到文件的字节数
  10.         */
  11.                 res = f_write(&fsrc, wtext1, sizeof(wtext1), &bw);     
  12.                     /* f_close:关闭文件,使用f_open必须使用f_close,不然会有缓存
  13.         fp:文件指针
  14.         */
  15.                  //     /* 打开文件 */
  16.                 f_close(&fsrc);                         //关闭文件        
  17.                          while(DS18B20_Init())        //DS18B20初始化       
  18.         {
  19.                 LCD_ShowString(30,130,200,16,16,"DS18B20 Error");
  20.                 delay_ms(200);
  21.                 LCD_Fill(30,130,239,130+16,WHITE);
  22.                 delay_ms(200);
  23.         }   
  24.         LCD_ShowString(30,130,200,16,16,"DS18B20 OK");
  25.         POINT_COLOR=BLUE;//设置字体为蓝色
  26.         LCD_ShowString(30,210,200,16,16,"Temp:   . C");         
  27.         while(1)
  28.         {
  29.                
  30.         //        delay_ms(200);                                           
  31.                 LED0=0;
  32. //                *data_nanme=f_typetell("test");
  33. //                printf(data_nanme);
  34. //                LCD_ShowString(30,290,200,16,16,*u8 data_nanme) ;
  35.                
  36. //                sprintf(write_buff,"%04d\r\n",ad_value[i]*3300/4096);
  37. //res_ad=f_lseek(&fil_ad,f_size(&fil_ad));
  38. //res_ad=f_write(&fil_ad,write_buff,6,&bww_ad);

  39. //        if(KEY_Scan(1)==KEY0_PRES)
  40.                 if(KEY0==1)       
  41.         {
  42.                 t++;
  43.                                          if(t%10==0)//每100ms读取一次
  44.                 {                                                                          
  45.                         temperature=DS18B20_Get_Temp();       
  46.                         if(temperature<0)
  47.                         {
  48.                                 LCD_ShowChar(30+40,210,'-',16,0);                        //显示负号
  49.                                 temperature=-temperature;                                        //转为正数
  50.                         }else LCD_ShowChar(30+40,210,' ',16,0);                        //去掉负号
  51.                         LCD_ShowNum(30+40+8,210,temperature/10,2,16);        //显示正数部分            
  52.                            LCD_ShowNum(30+40+32,210,temperature%10,1,16);        //显示小数部分                   
  53.                 }                                  
  54.                  delay_ms(10);               
  55.                 LED0=1;
  56.                
  57. //        f_mount(0, &fs);
  58.                         //如果data.txt存在,则打开;否则,创建一个新文件
  59. //        res = f_open(&file, "0:/data.txt",FA_OPEN_ALWAYS|FA_READ|FA_WRITE );
  60.                 //(const TCHAR*)  转换为字符串
  61.                    /* f_open函数:创建文件
  62.         fp:文件指针
  63.         1:test.txt:文件名
  64.         第三个参数是文件操作的权限,读/写/不管文件是否存在都创建(存在就覆盖)
  65.                 */
  66.                
  67.                

  68.                      /* 打开文件   没有文件则重新创建*/
  69.                 res=f_open(&fsrc,(const TCHAR*)filename, FA_OPEN_EXISTING | FA_WRITE);                                          
  70.                 f_lseek(&fsrc, f_size(&fsrc)); //将文件指针移动到文件末尾
  71.                 sprintf((char*)wtext,"timer is:%0.2d\r\n",temperature/10);//输出格式  写入回车换行符

  72.                 /* 将缓冲区的数据写到文件中 */
  73.                 //sizeof(*wtext)   d  指针指向数组第一个t
  74.                 res = f_write(&fsrc,wtext , sizeof(wtext), &bw);   
  75.                                 //写入回车换行  
  76. //                res=f_write(&fsrc,"\r\n",4,&bw);       
  77.                 //写入回车换行  
  78.                 //res=f_write(&fdst,"\r\n",br,&bw);               
  79.                     /* f_close:关闭文件,使用f_open必须使用f_close,不然会有缓存
  80.         fp:文件指针
  81.         */
  82.                 f_close(&fsrc);                         //关闭文件   






  83.                                 if(res!=FR_OK)                          //判断是否打开成功
  84.                 {
  85.                         LCD_ShowString(10,230,tftlcd_data.width,tftlcd_data.height,16,"f_open error!");
  86.                         LCD_ShowString(30,230,200,16,16,"f_open error!");        
  87.                 }               


  88. /*               
  89. 1.打开文件

  90. f_open(filescr2, "0:/201711022.txt", FA_OPEN_DEFAULT);

  91. 2.写数据

  92. f_write(filescr1, test_buff0, sizeof(test_buff0), &bw1);

  93. 3.关闭文件

  94. f_close(filescr1);//一定要关闭

  95. 第二次写入数据

  96. 1.打开文件

  97. f_open(filescr2, "0:/201711022.txt", FA_OPEN_DEFAULT);
  98. 2.按照文件现有大小移动指针

  99. f_lseek(filescr1,filescr1->fptr+filescr1->fsize);

  100. 3.写数据

  101. f_write(filescr1, test_buff0, sizeof(test_buff0), &bw1);

  102. 4.关闭文件

  103. f_close(filescr1);//一定要关闭

  104. 其实,多次写入的时候就是需要将指针移动,
  105. 这样的h我们就可以根据自己的需求进行在相同文件内连续写入数据了。
  106. 但是如果要在指定行进行修改就比较麻烦了,
  107. 就需要计算指针移动的位置,者相比于面向对象的编程语言而言要麻烦的多。               
  108. */       
  109.                 //f_lseek(&fsrc,(&fsrc)->fsize);
  110.         //        f_lseek(&fsrc,(&fsrc)->fptr-1);
  111.        


  112. #if 0
  113.     /*注册一个工作区域*/
  114. //    f_mount(0,&fs);                             
  115.     /* 打开创建一个新文件 */
  116.     res=f_open(&fdst,"0:/DATA.CSV",FA_CREATE_NEW | FA_WRITE);   
  117.     /* 写入标题数据 */
  118.     res=f_write(&fdst,"年-月-日-时-分-秒,fix,track\n",29,&bw);
  119.     /* 关闭文件 */
  120.     f_close(&fdst);
  121.      /* 数据转换 */
  122. //   size = format_data(text,324,12585);
  123.      /* 打开文件   没有文件则重新创建*/
  124.     res=f_open(&fdst,"0:/DATA.CSV",FA_OPEN_EXISTING | FA_WRITE);
  125.     /* 查找文件的结尾 */
  126.     res=f_lseek(&fdst,f_size(&fdst));
  127.     /* 写入数据 */
  128.     res=f_write(&fdst,text,sizeof(text),&bw);
  129.                 //写入回车换行  
  130.                 res=f_write(&fdst,"\r\n",br,&bw);
  131.     /* 关闭文件 */
  132.     f_close(&fdst);


  133. #endif


  134.         if ( res == FR_OK )
  135.          {
  136. //写入成功
  137.           }   
  138.                
  139. //                res=f_write(&fsrc, wtext, sizeof(wtext), &bw);          //向SD卡指定路径写入数据
  140.                 //LCD_ShowString(30,230,200,16,16,res);
  141.                 if(res!=FR_OK)                          //判断是否写入成功
  142.                 {
  143.                         LCD_ShowString(10,230,tftlcd_data.width,tftlcd_data.height,16,"f_write error!");
  144.                         LCD_ShowString(30,230,200,16,16,"f_write error!");        
  145.                 }else
  146.                 {
  147.                 LCD_ShowString(10,240,tftlcd_data.width,tftlcd_data.height,16,"f_write ok!");
  148.                 }

  149.                 }
  150.         //if(KEY_Scan(1)==KEY1_PRES)
  151.                 if(KEY1==0)       
  152.         {
  153. res=f_open(&fsrc, (const TCHAR*)filename, FA_READ);     //打开文件,如果文件不存在,则创建该文件
  154. if(res!=FR_OK)                          //判断是否打开成功
  155. {
  156.         LCD_ShowString(10,220,tftlcd_data.width,tftlcd_data.height,16,"f_open error!");
  157. }
  158. res=f_read(&fsrc, buffer, sizeof(buffer), &br);         //读取SD卡指定路径的内容,并存放在buffer数组中
  159. if(res!=FR_OK)                          //判断是否读取成功
  160. {
  161.         LCD_ShowString(10,240,tftlcd_data.width,tftlcd_data.height,16,"f_read error!");
  162. }
  163. else                                    //如果读取成功,则使用LCD显示
  164. {
  165.                 LCD_ShowString(10,240,tftlcd_data.width,tftlcd_data.height,16,"f_read ok!");
  166.         LCD_ShowString(10,260,tftlcd_data.width,tftlcd_data.height,16,buffer);
  167. }
  168. f_close(&fsrc);                
  169.                
  170.         }       
  171.         }
  172. }





复制代码





回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-11-28
在线时间
4 小时
 楼主| 发表于 2020-9-22 15:52:01 | 显示全部楼层
file:///C:/Users/Administrator/Documents/WXWork/1688853689126590/Cache/Image/2020-09/f4ba51b0-05d2-4b58-86ae-b3cc23ac0938.pngfile:///C:/Users/Administrator/Documents/WXWork/1688853689126590/Cache/Image/2020-09/f4ba51b0-05d2-4b58-86ae-b3cc23ac0938.png
f4ba51b0-05d2-4b58-86ae-b3cc23ac0938.png
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-11-28
在线时间
4 小时
 楼主| 发表于 2020-9-22 15:59:01 | 显示全部楼层
本帖最后由 15538053902 于 2020-9-22 16:02 编辑

stm32F407工程文件

实验30 DS18B20数字温度传感器实验.zip

575.57 KB, 下载次数: 32

实验39 FATFS实验.zip

1.65 MB, 下载次数: 16

回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-11-28
在线时间
4 小时
 楼主| 发表于 2020-9-22 17:02:23 | 显示全部楼层
file:///C:/Users/ADMINI~1/AppData/Local/Temp/企业微信截图_16007651047359.png
00a66226-4c4f-496b-b7ea-97472b4d227f.png
企业微信截图_16007651047359.png
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-9-23 02:34:49 | 显示全部楼层
继续努力
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-17 00:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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