资深版主
- 积分
- 10541
- 金钱
- 10541
- 注册时间
- 2017-2-18
- 在线时间
- 1908 小时
|
本帖最后由 EVahl 于 2020-5-13 20:07 编辑
前几天论坛有位用户用MINIV3板子将ADC转换后的数据写入到SD卡不能回车换行,并且出现之前写入的数据被覆盖现象,所以写了这个测试程序
测试程序基于FATFS实验例程修改,因为用到ADC,所以复制ADC实验例程的ADC文件夹下的驱动到工程当中同时在工程的分组管理当中添加adc.c和stm32f10x_adc.c,adc.h的路径也被添加进工程
在main.c中定义了定义了这几个变量方便在使用FATFS时使用
[mw_shl_code=c,true]FIL fil;
FRESULT res;
UINT bww;
[/mw_shl_code]
那位用户出现了之前写入的数据被覆盖的现象,在FATFS中可以调用f_lseek()解决:每次打开/创建文件之后,调用f_lseek()将文件对象的文件读写指针
移动到文件结束处[mw_shl_code=c,true]f_lseek (&fil,f_size (&fil)); //文件对象的读写指针移动到文件结束处[/mw_shl_code]
不能出现换行写入数据的情况可以用sprintf()函数解决:
[mw_shl_code=c,true]sprintf((char*)buf,"Data is:%d \r\n",adcx); //将数据写入到buf[/mw_shl_code]
写入数据的整个过程是:
[mw_shl_code=c,true] if(t<6)
{
delay_ms(500);
adcx=Get_Adc_Average(ADC_Channel_1,10); //获取ADC转换后的值
LCD_ShowxNum(60,100,adcx,4,16,0); //显示ADC的值
sprintf((char*)buf,"Data is:%d \r\n",adcx); //将数据写入到buf
f_open(&fil,"0:/message.txt", FA_OPEN_ALWAYS|FA_WRITE); //打开/创建文件对象
f_lseek (&fil,f_size (&fil)); //文件对象的读写指针移动到文件结束处
f_write (&fil,buf,sizeof(buf),&bww); //将buf中的数据写入到message.txt
f_close (&fil); //关闭文件
t++;
}[/mw_shl_code]
用到的ADC引脚被悬空,所以数据5次换行写入的数据有变化
源工程见附件
|
|