CAN 记录仪开源项目

1小板原理图分析

 

1:采用国产芯片AT32F415 封装采用TSSOP20

2:CAN收发器采用NXP tja1042/3

3:  Flash采用Winbond公司  W25Q32JVSSIQ

4:一路用户开关

5:  三个led指示灯

6:采用TYPE C接口

7:输入电源经过TVS管保护后进入78M05(电压范围6-32V)

8:一个按钮开关

软件使用说明书:CAN 离线记录仪使用说明书-CSDN博客

2芯片资料下载

    2.1:网页登入官网https://www.arterytek.com/cn/product/AT32F415.jsp

下载清单如下

项目

文件名

备用

Datasheet

DS_AT32F415_V2.02_CH.pdf

数据手册

Reference Manual

RM_AT32F415_CH_V2.03.pdf

技术手册

BSP

AT32F415_Firmware_Library_V2.1.3.zip

固件库

Pack

Keil5_AT32MCU_AddOn_V2.2.9.zip

Segger_AT32MCU_AddOn_V2.0.9.zip

keil5编译下载仿真芯片

Tool

AT32_New_Clock_Configuration_V3.0.10.zip

Artery_CAN_BitRate_Configuration_V1.0.01

需要的工具

解压BSP:

 3:创建项目工程

项目根目录

 

 SDK目录:拷贝AT32F415_Firmware_Library_V2.1.3目录下libraries middlewares

App 目录

 Boot目录

 

添加工程相关文件:

使用到的外设:

1:定时器at32f425_tmr.c 

2:SPI通信模块at32f425_spi.c

3:CAN通信模块at32f425_can.c

4:adc用户开关采样at32f425_adc.c

5:usb通信模块at32f425_usb.c

6:led指示灯at32f425_gpio.c

7:升级flash at32f425_flash.c

8:其他模块都是配送这些模块使用

4:理论数据分析

打开w25Q32JV数据手册 查看 AC Electrical Characteristics

1:通过上面数据Flash编程速度:Sector Erase Time(4K)45ms Page program Time(256 Byte) 0.4ms,通过上面参数可以得出编程4KFlash需要 45+0.4*16 = 51.4ms 

2:SPI总线速率 = 48M  传输4K数据需要时间 约等于 0.68ms 

综合所述 编程4K flash时间 52ms    SPI FLASH编程速度 = 76.9K/S

从zlg  .CAN 格式一帧数据为24字节  2000*24 = 48K/S 理论分析每秒保存2000帧没问题

typedef struct zlg_can
{
        uint32_t id;                                      //4byte;                                                             
        uint32_t hardwareTimestamp;         //0.1ms 硬件时间戳 小端模式  
        uint8_t  SoftwareTimestampH;        //软件时间戳  高两位 11-C  硬件时间  10-8  软件时间+硬
        uint8_t  rxtx_flag;                             //FF为接收   其他值成功
        uint8_t  frame_type;                        //0为数据帧,1为远程帧      bool                        
        uint8_t  id_type;                              //0为标准帧,1为扩展帧      bool
        uint8_t  dlc;
        uint8_t  data[8];                    
        uint8_t  SoftwareTimestampM2;               
        uint8_t  SoftwareTimestampM1;
        uint8_t  SoftwareTimestampL; 
}zlg_msg_can;

5:FATFS移植(文件系统移植)

1:到官网下载最新版本 http://elm-chan.org/fsw/ff/00index_e.html 我当前最新版本为  R0.15  

需要修改的函数有:

DSTATUS disk_initialize (
    BYTE pdrv                /* Physical drive nmuber to identify the drive */
)

调用SPI_Flash.c spiflash_read_id()  返回Flash容量 w25q32 w25q64...

DRESULT disk_read (
    BYTE pdrv,        /* Physical drive nmuber to identify the drive */
    BYTE *buff,        /* Data buffer to store read data */
    LBA_t sector,    /* Start sector in LBA */
    UINT count        /* Number of sectors to read */
)

调用SPI_Flash.c    spiflash_read(buff, addr, length);

DRESULT disk_write (
    BYTE pdrv,            /* Physical drive nmuber to identify the drive */
    const BYTE *buff,    /* Data to be written */
    LBA_t sector,        /* Start sector in LBA */
    UINT count            /* Number of sectors to write */
)

调用SPI_Flash.c     spiflash_write(buff, addr, length);

DRESULT disk_ioctl (
    BYTE pdrv,        /* Physical drive nmuber (0..) */
    BYTE cmd,        /* Control code */
    void *buff        /* Buffer to send/receive control data */
)

返回flash扇区大小  512 字节  块大小为8扇区  总扇区数量为总容量除以512  

如 w25q32 总扇区数量为 4M/512 = 8,192 

读者肯定疑问:W25qxx数据手册明明写的扇区大小为4K,这里怎么成512字节了。其实扇区写4K也么啥关心,但是为了省ram资源。移植msc U盘是也要一致所以干脆都定义512字节

#define FF_MIN_SS        512
#define FF_MAX_SS        512   //如果用户需要4k  把这里改 4096 就可以。

6:FATFA测试

  FATFS fs;        /*Fs文件系统对象 */
  FIL file;      // file objects 

void fatfs_tset(void)
{
  uint32_t i;
  BYTE work[FF_MAX_SS];
  UINT bw;

  static const MKFS_PARM defopt = {FM_FAT, 0, 0, 0, 1024};
  uint8_t wtext[100] = "This is STM32 working\n"; /* File write buffer */
  uint8_t rtext[100];                     /* File read buffers */
  char filename[] = "006.txt";
  uint8_t res;    /* Return value for SD */ 
  res = f_mount(&fs, "", 1);
#if 1    //空盘会格式化
    /*格式化文件系统*/
    if(res!=FR_OK)
    {

     res = f_mkfs("0:", &defopt,work, sizeof work);
     res = f_mount(&fs, "", 1);
    }
#endif
    res = f_open(&file, filename, FA_CREATE_ALWAYS | FA_WRITE);
    res = f_write(&file, wtext, sizeof(wtext), &bw);
    res = f_close(&file);

    res = f_open(&file, filename, FA_READ);
    res = f_read(&file, rtext, sizeof(rtext), &bw);
    res = f_close(&file);
}

上面函数写数据与读数据一致代表移植成功。

7:AT32F415 时钟配置

1:在这个技术发展这么快的社会再通过人工去配置寄存器,那就太没啥意思了。我们借助官网提供的工具来配置 解压AT32_New_Clock_Configuration_V3.0.10.zip

把最终生成的数据拷贝到工程at32f425_clock.c 覆盖原来的函数。

1:由于是低成本的小模块,干脆用内部48M晶振。

2:芯片最高频率能跑到150M,其实也用不着,不要浪费能耗了。96M已经戳戳有余其实72M我觉得就够了。

7:CAN 模块移植与测试

其实对于开发者来说要充分利用官网的资源,尽量少写代码。我就跑到BSP 例程里找到CAN测试用例

把这个CAN初始化与发送函数拷贝到工程

自己工程内创建一个hal_can.c / hal_can.c 然后把官网函数拷贝过来。感觉这样会专业点~~

然后把初始化与发送丢到main函数里,用来测试CAN模块是否通。注意这部一定要有CAN节点与小板相连,自己有做个简单USB转CAN工具这部肯定难不到我。

如果没有通注意下CAN波特率基本问题不大。

8:USB hid与msc切换

这应该是这个项目最难的一步吧,但是没关系我们秉承能抄就不写的原则。

1:把这工程用到的文件拷贝到自己工程来

    usbd_init(&otg_core_struct,
                                        USB_FULL_SPEED_CORE_ID,
                                        USB_ID,
                                        &msc_class_handler,
                                        &msc_desc_handler);     //msc模式

    usbd_init(&otg_core_struct,
                                USB_FULL_SPEED_CORE_ID,
                                USB_ID,
                                &hid_iap_class_handler,
                                &hid_iap_desc_handler);    //hid 模式

1:main.c 分别加入这两个调用,电脑能出现一个模拟的u盘,或一个hid 输入设备,基本就完成信心倍增。

2:通过板上的开关来回切换usb模式,奇次为msc偶次为hid。恭喜你这个项目你已经扫清一切障碍了。

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android行车记录仪是一种应用程序,用于记录和保存手机或平板电脑在车辆行驶过程中所获取的各种数据。这些数据包括车辆的位置、行驶速度、行驶里程等信息。 关于Android行车记录仪的开源性质,我们可以从两个方面来考虑。首先,对于开源社区来说,有许多开源项目可以作为Android行车记录仪的基础。开源意味着这些项目的源代码可以被公开访问和修改,任何人都可以自由地使用、学习和改进。这为开发者提供了很大的灵活性和自由度,使得他们可以根据自己的需求来定制和优化Android行车记录仪的功能和性能。 其次,针对Android行车记录仪本身的开源性,目前市面上已有一些开源的行车记录仪应用程序。这些应用程序的源代码可以被公开访问和获取,开发者可以在此基础上进行二次开发。开源行车记录仪能够带来更多的创新和发展机会,开发者可以根据用户的需求进行定制和改进,这让Android行车记录仪具备了更强大的功能和更好的用户体验。 总结来说,Android行车记录仪在开源社区中拥有广阔的发展空间。开源的行车记录仪应用程序为开发者提供了更多的选择和灵活性,同时也为用户带来了更好的功能和体验。通过开源,Android行车记录仪能够迅速响应市场需求,不断提升性能和功能,为用户提供更加精准和可靠的行车记录服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值