野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15526|回复: 13

can接收数据存放到SD卡里

[复制链接]
发表于 2016-10-20 16:01:19 | 显示全部楼层 |阅读模式
  有这方面例程可供参考吗?
回复

使用道具 举报

发表于 2016-10-20 16:04:10 | 显示全部楼层
1-CAN接收的数据放到一个数组里面会不会?
2-把数组里面的数据写到SD卡会不会?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-20 16:17:09 | 显示全部楼层
fire 发表于 2016-10-20 16:04
1-CAN接收的数据放到一个数组里面会不会?
2-把数组里面的数据写到SD卡会不会?

会啊 ,但是没成功啊。
回复 支持 反对

使用道具 举报

发表于 2016-10-20 16:18:00 | 显示全部楼层
联合电 发表于 2016-10-20 16:17
会啊 ,但是没成功啊。

没成功的具体体现是什么?数据可以存,但是数据错啦? 数据完全不能存?数据部分可以存部分不能存?还是。。。。。。?等等?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-20 16:27:31 | 显示全部楼层
fire 发表于 2016-10-20 16:18
没成功的具体体现是什么?数据可以存,但是数据错啦? 数据完全不能存?数据部分可以存部分不能存?还是 ...

我的是卡里什么都没的,别人的是数据不全
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-20 16:58:58 | 显示全部楼层
fire 发表于 2016-10-20 16:18
没成功的具体体现是什么?数据可以存,但是数据错啦? 数据完全不能存?数据部分可以存部分不能存?还是 ...

文件名和文档都建好了。 数据没有
回复 支持 反对

使用道具 举报

发表于 2016-10-20 17:39:45 | 显示全部楼层
联合电 发表于 2016-10-20 16:27
我的是卡里什么都没的,别人的是数据不全

找一张卡,用我们配套的sd卡例程测试下,记得用带文件系统的那个程序来测试,看看把数组里面的内容能不能写到sd卡里面。
回复 支持 反对

使用道具 举报

发表于 2016-10-20 17:40:17 | 显示全部楼层
联合电 发表于 2016-10-20 16:58
文件名和文档都建好了。 数据没有

用的例程带不带文件系统,最好就用带文件系统的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-20 18:55:45 | 显示全部楼层
fire 发表于 2016-10-20 17:40
用的例程带不带文件系统,最好就用带文件系统的。

已搞定 can配置问题 。
顺便问句 摄像头那个带条叫什么术名?  我把两个卡扣都打开了,蓝色面朝镜头插进去是对的吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-21 11:22:04 | 显示全部楼层
fire 发表于 2016-10-20 16:18
没成功的具体体现是什么?数据可以存,但是数据错啦? 数据完全不能存?数据部分可以存部分不能存?还是 ...

help !!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-21 11:27:51 | 显示全部楼层
fire 发表于 2016-10-20 17:40
用的例程带不带文件系统,最好就用带文件系统的。

可以存数据,乱码了。  
1.下载程序,SD卡初始化成功 。


2.cantest启动数据传输,can接收到并打印,OK

3.接收到数据写入txt文件 乱码。




QQ图片20161021112259.png
QQ图片20161021112316.png
QQ图片20161021112737.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-21 11:30:39 | 显示全部楼层
#include "stm32f10x.h"
#include "usart.h"
#include "led.h"
#include "can.h"
#include "sdio_sd.h"
#include "ff.h"
#include "diskio.h"
#include "stdio.h"
#include "stdlib.h"

//static void Delay(u32 counter)
//{
//        while(counter--);
//}

int i;
extern SD_CardInfo SDCardInfo;
extern SD_Error Status=SD_OK;
uint8_t Can1Flag;
BYTE  CAN1_RX_buf[8];

FIL   fnew;                                                                                                        /* 文件结构体*/
FATFS fs;                                                                                                          /* Work area (file system object) for logical drives */                                                                                                 
FRESULT res;
UINT  br, bw;                                                      /* File R/W count    文件读/写计数*/
BYTE  buffer[4096]={0};                         /* file copy buffer  文件复制缓冲区*/
BYTE  textFileBuffer[] = "a new text file was created that name is nextfile ";

int main ()
{
        USART1_Config();       
        CAN_Config();
        NVIC_Configuration();
       
  Status = SD_GetCardInfo(&SDCardInfo);
         if(Status==SD_OK)
   {
                   printf(" SD卡初始化成功!\r\n");
                 
   }
   else
   {
                   printf(" SD卡初始化失败!\r\n");
   }       
         
         
        f_mount(0,&fs);                                              // 注册卷的工作区          
                 while(1)
        {
                 while(Can1Flag!= ENABLE);
                        Can1Flag = DISABLE;         
                          printf("\r\nCAN1开始接收数据\r\n");
                        for(i=0;i<8;i++)               
                                printf("CAN1_RX_buf[%d]:%d\r\n",i,CAN1_RX_buf[i]);
                   res =f_open(&fnew, "0:newfile.txt", FA_CREATE_ALWAYS | FA_WRITE );   // 新建一个名为nextfile.txt的文件对象,文件打开模式标志和文件写标志
                 
                if ( res == FR_OK )
                {
//                        sprintf(CAN1_RX_buf,"%d",CAN1_RX_buff);
//                        res=f_lseek(&fnew,fnew.fsize);                                        //移动文件指针
    //res = f_write(&fnew, textFileBuffer, sizeof(textFileBuffer), &bw);    //写数据
                  res = f_write(&fnew, CAN1_RX_buf,sizeof(CAN1_RX_buf) , &bw);          //写数据sizeof(CAN1_RX_buf)
                        f_close(&fnew);      
                }
               
                res = f_open(&fnew, "0:newfile.txt", FA_OPEN_EXISTING | FA_READ);              //打开文件
                if ( res == FR_OK )
                {
                  res = f_read(&fnew, buffer, sizeof(buffer), &br);                        //读取缓冲区数据
                   printf("\r\n%d",buffer);                              //打印读取的数据内容
                }
       
                f_close(&fnew);                                   //关闭文件      
        }               
//    f_mount(0, NULL);                          //在丢弃之前取消注册工作区
       
}
       
       

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-21 11:34:28 | 显示全部楼层
fire 发表于 2016-10-20 16:18
没成功的具体体现是什么?数据可以存,但是数据错啦? 数据完全不能存?数据部分可以存部分不能存?还是 ...

我用这个  res = f_write(&fnew, textFileBuffer, sizeof(textFileBuffer), &bw);    //写数据   这个语句。

文档里内容就是  a new text file was created that name is nextfile。

用    res = f_write(&fnew, CAN1_RX_buf,sizeof(CAN1_RX_buf) , &bw);   这个语句

文档里内容就是 536876236  。(应该是00 01 02 03 04 05 06 07)

我试过把 CAN1_RX_buf转换成字符串   ,也没成功
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-21 14:04:17 | 显示全部楼层
把数组类型改成 char   CAN1_RX_buf[8];   OK了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 17:58 , Processed in 0.048647 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表