本帖最后由 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 上传
点击文件名下载附件
耗时肯定跟不上DMA数据,所以肯定小于12kB/s。。。。主要问题是如果不用printf格式化成字符串,我该怎么存。原始数据用txt打开就乱码的呀
你说“死了”是什么?没有反应?HARDFAULT?你不可能只改一句的,至少初始化和读写的地方都要改
还有,fprintf写出来的是文本文件,你写成二进制的话可以用fwrite、fread配合联合体来读。电脑上读取当然不能用记事本,可以自己写个小程序或者用winhex,也可以用单片机读然后串口发回来
我发现你还有一个很大的问题,你在中断里面打开、关闭文件…………这样子无疑会大大降低效率
建议你在main函数里面f_open,然后就不必f_close了,fatfs在写满缓冲区之后会自动保存,如果非要手动保存那就用f_sync函数
太感谢了~受教。我现在在想自己把数据转换ASCII后写SD卡看看会不会好点。
一周热门 更多>