打印
[STM32]

AD采样以后存储转换的困惑,纠结ing。。。

[复制链接]
1012|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
13916625369|  楼主 | 2015-9-21 13:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 13916625369 于 2015-9-21 13:30 编辑

芯片用的是F103VE,MDK环境编写。基本用的都是库函数,ADC双模式采样以后,直接TFT显示已可行,现在想把采样的数据存起来,然后写入SD卡。先说说我现在的方法如下:

float ADC1_ConvertedValueLocal;   这个是AD采样值已经转换成电压值了,每次都由DMA传过来。

float ADC1_savedate1[512];我开一个512的浮点型数组,每次TFT显示的时候顺便存进数组里,当n(计数值到了512),开始调用FATFS文件系统的写函数。
   int Writetxt_to_sd (void)
{   
    f_mount(0, &myfs[0]);
    myres = f_open( &myfsrc , "0:/date1.txt", FA_CREATE_NEW | FA_WRITE);   
    if ( myres == FR_OK )
    {         
        myres = f_write(&myfsrc, ADC1_savedate1,sizeof(ADC1_savedate1), &mybr);
        f_close(&myfsrc);        
        return 0;      
    }   
    else if ( myres == FR_EXIST )
    {
        return FR_EXIST;         
    }   
    else
    {
        return -1;
    }   
}


问题就在这个 f_write函数例程中,都是char或者BYTE(unsigned char)类型,我现在换成浮点数组SD最终读出的乱码,然后长度也不对。
有熟悉FATFS文件系统的大大指点下么 ,怎么写浮点类型数据到SD卡 ,能保存成TXT或者CSV格式就行。
因为要转成TXT文件,我估摸还是要转下格式,那怎么把比较好的方法把浮点数据存到字符数组里。谢谢 急


相关帖子

沙发
13916625369|  楼主 | 2015-9-21 13:40 | 只看该作者
这是我app_display 后面加的计数这段,现在数据是存下来了 ,问题还是在怎么正确的写到SD卡里面。
if(turn_time<512)
                {
                savedate(turn_time);
                turn_time++;
                }
                else
                        { savedate_sd();
                                turn_time=0;
    }

使用特权

评论回复
板凳
犹豫的大三| | 2015-9-21 14:24 | 只看该作者
用Sprintf函数将浮点型转换成字符型,但我还是建议你自己写一个,这个库函数不安全,在某些编译器中会抽风,很误事的!建议先测试下能不能用

使用特权

评论回复
地板
13916625369|  楼主 | 2015-9-21 16:02 | 只看该作者
犹豫的大三 发表于 2015-9-21 14:24
用Sprintf函数将浮点型转换成字符型,但我还是建议你自己写一个,这个库函数不安全,在某些编译器中会抽风 ...

sprintf 关键不能一次转,还是要一个一个来,我下午写了个这,测试通过,其实就省了个ACSII转换。
void savedate( unsigned int i)
{
        unsigned int n;       
        unsigned int len;       
        unsigned int count;
        n=i;
        adc_convert();
       
        len=sprintf(str,"%5.4f",ADC1_ConvertedValueLocal);
       
  for(count=0;count<len;count++)
        {
                if(n!=0) ADC1_savedate1[n*len-1]=',';
    ADC1_savedate1[n*len+count]=str[count];
               
  }
       
  
}

使用特权

评论回复
5
犹豫的大三| | 2015-9-21 16:43 | 只看该作者
13916625369 发表于 2015-9-21 16:02
sprintf 关键不能一次转,还是要一个一个来,我下午写了个这,测试通过,其实就省了个ACSII转换。
void s ...

string.h 里有很多字符操作函数,用它写起来会更方便些

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

17

帖子

1

粉丝