6通道ADC+SD卡,2Khz存储不过来

2019-10-15 06:32发布

本帖最后由 624467649 于 2017-1-16 11:04 编辑

理想状态是6通道ADC+DMA(6个字节),采样频率2khz,保存到SD卡txt里,格式数据为10:40:39  4095 2315 1235 1236 1236 2365我的程序是主循环是3个按键(创建新txt,开始存储,暂停存储)。定时器500us中断:sprintf-DMA数据,然后存储到txt里,1秒改变LED(实际7,8秒才变一次)。
ADC是6通道循环规则采样,采样周期最大239.5周期,所以完全够2khz采样,所以就不定时开启采样,直接定时器中断来用DMA数据就好。(假2khz采样)
可是实际保存的数据算起来1s大概170组数据。按键完全失效。感觉问题就是还没存好txt数据,下一次中断又来了。
有什么解决办法吗。如果要DMA存多点,然后一起存的话,还是要多次sprintf,然后多次f_write(不知道怎么一次f_write),速度应该差不多。还有个小问题,我没有get_RTC数据,时间会自动变?
f1战舰版: FATFS实验 6ADC_1 RTC 定时器_存储不过来.zip (9.65 MB, 下载次数: 230) 2017-1-16 11:02 上传 点击文件名下载附件


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
yyx112358
2019-10-16 07:08
624467649 发表于 2017-1-18 17:02
我觉得主要问题是printf转换太慢了。有什么好的方法不转换成ASCII写到SD卡,又能像TXT文件一样“打包”起 ...

我发现你还有一个很大的问题,你在中断里面打开、关闭文件…………这样子无疑会大大降低效率
建议你在main函数里面f_open,然后就不必f_close了,fatfs在写满缓冲区之后会自动保存,如果非要手动保存那就用f_sync函数

一周热门 更多>