本帖最后由 peacewyz 于 2017-10-11 10:24 编辑
大家好,新手做项目,遇到问题,请大家指教
外部三路adc采用125HZ(采样间隔为8000us)采样率,外部采样完成后会给出信号(125HZ),CPU接收到这个信号时进入中断,中断触发需要进行如下任务:1. STM32F407读取三路SPI(ADC)的数据 占用60us2. STM32F407发送通过SCI发送三路数据到PC 占用600us3. 读取RTC日期,时间信息 1.2us4. 三路SPI数据存入SD卡 5200us5. 每个两个小时新建文件夹,写入头文件(200 byte),占用14400us
写入SD卡的时候特别耗时,按照一般的读写速度1M/s的速度,1kb/ms,也不至于这么慢啊,目前我是采用F407例程中的FATFS改的, 试了DMA方式和查询方式,不过并无太多改善
errorstatus=SD_SetDeviceMode(SD_DMA_MODE); //DMA 方式 //errorstatus=SD_SetDeviceMode(SD_POLLING_MODE); //查询方式
是我写入的太频繁还是怎么回事?我想采用类似探索者F407的板子上例程中DMA方式的双缓冲的方式,可是不得要领,希望能有高手指点,或者有类似的example,
下面是代码
printf("C1:%d
C2:%d
C3:%d
",channelvalue[0],channelvalue[1],channelvalue[2]); //600us
RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct); //1.2us RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct); GPIO_SetBits(GPIOB,GPIO_Pin_1); if(t%4 ==0) //测试的时候,每隔4s创建一个新文件 { wav_recorder(); //创建文件夹 OBSINFO(); //写入头文件信息,也就是上面的时间信息以及一些基本信息,200byte 左右,共耗时20ms t=0; } GPIO_ResetBits(GPIOB,GPIO_Pin_1); write_pro(channelvalue[0],channelvalue[1],channelvalue[2],channelvalue[3]); //5ms channelvalue[0]=0; channelvalue[1]=0; channelvalue[2]=0; channelvalue[3]=0;
QQ 2844724493
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>