OpenEdv-开源电子网

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

mini stm32内部温度传感器实验的问题和FATFS写数据的问题

[复制链接]

4

主题

84

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2013-10-17
在线时间
9 小时
发表于 2014-7-31 10:04:44 | 显示全部楼层 |阅读模式
5金钱
原子哥,我最近在做内部温度传感器+FATFS实验,是想把温度保存到SD卡的.txt文件中,现在是发现了两个问题:
    1:不接jtag仿真时,温度显示05.06°C左右,但是接上jtag仿真运行,温度会显示30.12°C,会出现这样的情况是什么原因呢?(注:这些温度是会变化的,这里是为了说明)
    2:我把读取的温度、年月日时分秒这些数据存入.txt中,在进行写数据时,它会连续四次写入.txt文件,但是用jtag仿真设置断点查看,没有发现为什么会连续写入四次。刚上电时只会写入一次,然后往后就会连续写入四次。代码如下:
    u8 res;
    u8 time_flag=0;
    FIL *fil;

    if(timer.sec%30==0)    //每30秒存入一次数据
    {
        time_flag=1;
    }
    if(time_flag==1)
    {
        LED0=0;
        time_flag=0;

        res=f_open(fil,"0:/data1.txt",FA_OPEN_EXISTING|FA_WRITE);//
        if(res!=FR_OK)
        {
            f_close(fil); //打开文件错误,关闭打开的文件
            return;
        }
        f_lseek(fil,f_size(fil)+5);
 f_printf(fil,"%d%d%c%d%d%s%s%d%c%d%c%d%c%d%c%d%c%d\r\n",date_buffer[0],date_buffer[1],'.',date_buffer[2],date_buffer[3],"·c","   ",
                    date_buffer[4],'-',date_buffer[5],'-',date_buffer[6],' ',date_buffer[7],':',date_buffer[8],':',date_buffer[9]);    

        f_close(fil); //关闭打开的文件

    }
    else 
    {
        LED0=1;
    } 
用LED来观察发现LED会连续的闪烁几下,说明是连续写入了数据。不知为什么会出现这样,还是说我写存入的f_printf(....)的不对?

最佳答案

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

回复【6楼】正点原子: --------------------------------- 找到问题了,谢谢原子哥!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

84

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2013-10-17
在线时间
9 小时
 楼主| 发表于 2014-7-31 10:04:45 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
找到问题了,谢谢原子哥!
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-7-31 20:39:10 | 显示全部楼层
(1)代码不完整有点难看哦。。
 (2)接jtag和不接jtag也有差别就比较奇怪了。。。。。。
  (3) 也就是说你用jtag的话温度正常。写入也正常。。。也就是说。。。用jlnk调试。。执行结果是正常的。。然后文件写入都正常是吗
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

4

主题

84

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2013-10-17
在线时间
9 小时
 楼主| 发表于 2014-7-31 21:36:00 | 显示全部楼层
回复【2楼】Admin:
---------------------------------
这个是放在main()函数里面的,接jtag温度感觉是正常的,刚上电第一次写入正常,数据也是正常,不会连续写入;然后一直让它运行,从第二次写入的时候就会连续的写入六次,但是数据是正常的。为什么会连续的写入数据呢?
[mw_shl_code=c,true]void creat_file() { u8 res; u8 time_flag=0; FIL *fil; u8 file_byte; //获取文件大小 LCD_ShowString(60,130," - - "); LCD_ShowString(60,162," : : "); while(1) { show_temp(); //显示片内温度 LCD_ShowAllNum(60,130,timer.w_year,4,16); LCD_ShowAllNum(100,130,timer.w_month,2,16); LCD_ShowAllNum(124,130,timer.w_date,2,16); switch(timer.week) { case 0: LCD_ShowString(60,146,"Sunday "); break; case 1: LCD_ShowString(60,146,"Monday "); break; case 2: LCD_ShowString(60,146,"Tuesday "); break; case 3: LCD_ShowString(60,146,"Wednesday"); break; case 4: LCD_ShowString(60,146,"Thursday "); break; case 5: LCD_ShowString(60,146,"Friday "); break; case 6: LCD_ShowString(60,146,"Saturday "); break; } LCD_ShowAllNum(60,162,timer.hour,2,16); LCD_ShowAllNum(84,162,timer.min,2,16); LCD_ShowAllNum(108,162,timer.sec,2,16); date_buffer[4]=timer.w_year; date_buffer[5]=timer.w_month; date_buffer[6]=timer.w_date; date_buffer[7]=timer.hour; date_buffer[8]=timer.min; date_buffer[9]=timer.sec; displaynl(); //显示农历 AI_LoadFestival();//智能显示节假日 if(((timer.sec%30)==0)) { LED0=0; res=f_open(fil,"0:/data1.txt",FA_OPEN_EXISTING|FA_WRITE);// if(res!=FR_OK) { f_close(fil); //打开文件错误,关闭打开的文件 return; } res=f_lseek(fil,f_size(fil)+5); f_printf(fil,"%d%d%c%d%d%s%s%d%c%d%c%d%c%d%c%d%c%d\r\n",date_buffer[0],date_buffer[1],'.',date_buffer[2],date_buffer[3],"°c"," ",date_buffer[4],'-',date_buffer[5],'-',date_buffer[6],' ',date_buffer[7],':',date_buffer[8],':',date_buffer[9]); //年 f_close(fil); //关闭打开的文件 } else { LED0=1; } } }[/mw_shl_code]


回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-31 22:59:55 | 显示全部楼层
回复【3楼】498650771:
---------------------------------
 仿真跟踪看看就知道了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

84

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2013-10-17
在线时间
9 小时
 楼主| 发表于 2014-8-1 08:56:41 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,这个我也仿真看了,但是看不出来为什么会连续的。
而且观察LED,直到TFT屏幕闪烁四次这样LED才会灭,说明在30秒的整倍数里数据会写进去几次,但是这时时间不是已经过了30秒吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-2 00:16:14 | 显示全部楼层
回复【5楼】498650771:
---------------------------------
但步跟踪还不能找到问题???
那是怎么跑到当前位置的,你总能看出来吧?
根据这些条件,不就是你要的问题原因了么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-4 13:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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