0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于APM32E103 SPI转CAN芯片MCP2515移植测试

Geehy极海半导体 来源:Geehy极海半导体 2024-11-11 11:44 次阅读

CAN简介:CAN 是控制器局域网络 Controller Area Network 的缩写,是 ISO 国际标准化的串行通信协议,支持 CAN 协议 2.0A 和 2.0B。在 CAN 协议中,发送者以广播形式把报文发送给所有接收者,节点在接收报文时,会经过过滤器组根据标识符决定是否需要该报文,这种设计节省了 CPU 的开销。

APM32E103系列支持CAN协议 2.0A 和 2.0B,通信波特率最大为 1Mbit/s,并且拥有双CAN接口,能适应更多的应用场合。

偶尔会有三个以上CAN接口需求或者需要在没有CAN接口的芯片上使用CAN,就可以考虑使用外接协议转换芯片,将其他通讯接口转接成CAN接口。

查找发现比较常用的就是MCP2515,带有SPI接口的独立CAN控制器。

MCP2515是独立的控制器局域网(CAN)控制器,实现CAN规范,版本2.0B。它是有能力的发送和接收标准和扩展数据和远程帧。MCP2515有两个接受掩码和六个接受过滤器被用来过滤掉不需要的消息,因此减少了主机MCU的开销。MCP2515与微控制器(mcu)的连接通过一个工业标准串行外设接口(SPI)来实现的。

在网上可以直接买到MCP2515的模块,方便直接在开发板上用杜邦线接出来测试。

附带的资料包是基于51单片机的例程,需要修改移植到APM32的例程中。

移植基于APM32E10x_SDK_V1.2中的SPI_FullDuplex例程进行修改移植。

为了方便使用,硬件SPI和软件SPI都进行了定义初始化,通过宏定义来切换。

#defineSPI_S//SPI_H

软件SPI只需要初始化用到的IO引脚,硬件SPI就需要对SPI进行初始化配置。

MCP2515有一个中断脚,在总线上有CAN型号是会有下拉型号,告诉MCU需要准备进入接收状态。

所以需要在MCU上配置个外部中断引脚,用于快速响应。

voidMCP2515_GPIO_Init(void)

{

GPIO_Config_TGPIO_configStruct;

EINT_Config_T EINT_configStruct;

RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);

GPIO_configStruct.pin =GPIO_PIN_0;

GPIO_configStruct.mode =GPIO_MODE_IN_PU;

GPIO_Config(GPIOA,&GPIO_configStruct);

GPIO_ConfigEINTLine(GPIO_PORT_SOURCE_A,GPIO_PIN_SOURCE_0);

/* Configure Button EINT line*/

EINT_configStruct.line=EINT_LINE_0;

EINT_configStruct.mode =EINT_MODE_INTERRUPT;

EINT_configStruct.trigger =EINT_TRIGGER_FALLING;

EINT_configStruct.lineCmd =ENABLE;

EINT_Config(&EINT_configStruct);

/* Enable and setButton EINT Interrupt to the lowest priority */

NVIC_EnableIRQRequest(EINT0_IRQn,0x0f, 0x0f);

}

SPI初始化完成后需要对MCU2515的寄存器进行初始化配置,配置CAN通讯的波特率工作模式等。

voidMCP2515_Init(void)

{

u16 i=0;

unsigned char temp=0;

MCP2515_Reset(); //发送复位指令软件复位MCP2515

Delay_Nms(1); //通过软件延时约nms(不准确)

//设置波特率为250Kbps

MCP2515_WriteByte(CNF1,CAN_250Kbps);

MCP2515_WriteByte(CNF2,0x80|PHSEG1_3TQ|PRSEG_1TQ);

MCP2515_WriteByte(CNF3,PHSEG2_3TQ);

MCP2515_WriteByte(TXB0SIDH,0xFF);//发送缓冲器0标准标识符高位

MCP2515_WriteByte(TXB0SIDL,0xE0);//发送缓冲器0标准标识符低位

MCP2515_WriteByte(RXB0SIDH,0x00);//清空接收缓冲器0的标准标识符高位

MCP2515_WriteByte(RXB0SIDL,0x00);//清空接收缓冲器0的标准标识符低位

MCP2515_WriteByte(RXB0CTRL,0x20);//仅仅接收标准标识符的有效信息

MCP2515_WriteByte(RXB0DLC,DLC_8);//设置接收数据的长度为8个字节

MCP2515_WriteByte(RXF0SIDH,0x00);//配置验收滤波寄存器n标准标识符高位

MCP2515_WriteByte(RXF0SIDL,0x00);//配置验收滤波寄存器n标准标识符低位

MCP2515_WriteByte(RXM0SIDH,0x00);//配置验收屏蔽寄存器n标准标识符高位

MCP2515_WriteByte(RXM0SIDL,0x000);//配置验收屏蔽寄存器n标准标识符低

MCP2515_WriteByte(CANINTF,0x00);//清空CAN中断标志寄存器的所有位(必须由MCU清空)

MCP2515_WriteByte(CANINTE,0x01);//配置CAN中断使能寄存器的接收缓冲器0满中断使能,其它位禁止中断

MCP2515_WriteByte(CANCTRL,REQOP_LOOPBACK|CLKOUT_ENABLED);//将MCP2515设置为环回模式,退出配置模式

temp=MCP2515_ReadByte(CANSTAT);//读取CAN状态寄存器的值

if(OPMODE_NORMAL!=(temp &&0xE0))//判断MCP2515是否已经进入正常模式

{

MCP2515_WriteByte(CANCTRL,REQOP_LOOPBACK|CLKOUT_ENABLED);//再次将MCP2515设置为环回模式,退出配置模式

}

}

MCP2515的初始化部分基本结束,接下来就是到main中编写个收发测试。

可以看到MCP2515是配置成环回模式,也就是自发自收,方便测试SPI配置和MCP2515的配置是否正确。

intmain(void)

{

APM_MINI_LEDInit(LED2);

APM_MINI_LEDInit(LED3);

APM_MINI_LEDOff(LED2);

APM_MINI_LEDOff(LED3);

SPI_MCP2515_Init();

MCP2515_Init();

MCP2515_GPIO_Init();

TMR5_INIT();

while(1)

{

//向CAN总线发送数据

if(timer_flag==0x01) //定时发送

{

timer_flag=0x00;

if(++can_tx_msg.StdId>1000)can_tx_msg.StdId=0x00; //CANID每发送一条报文,自加1

memcpy(can_tx_msg.Data, CAN_T_Buffer,8); //取报文数据放入缓冲区

CAN_Send_Buffer(&can_tx_msg);

APM_MINI_LEDToggle(LED2);

}

//接收CAN数据

if(can_tx_flag==0x01) //判断中断标志位

{

CAN_Receive_Buffer(&can_rx_msg);

can_tx_flag=0x00;

}

}

}

将杜邦线按照引脚配置,接好线后仿真就能测试回环模式下收发数据了。

4a710340-9fde-11ef-93f3-92fbcf53809c.png

可以看到断点打到接收部分,可以接收到CAN数据,与发送的数据一致。

如果有其他can设备或者CAN分析仪的话,可以将工作模式改成普通模式,进行设备间的通讯。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16136

    浏览量

    177157
  • 接口
    +关注

    关注

    33

    文章

    8465

    浏览量

    150751
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2701

    浏览量

    463190
  • 局域网络
    +关注

    关注

    0

    文章

    17

    浏览量

    7091

原文标题:APM32芯得 EP.45 | 基于APM32E103 SPI转CAN芯片MCP2515移植测试

文章出处:【微信号:geehysemi,微信公众号:Geehy极海半导体】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于MCP2515的多路CAN总线接口电路设计

    目前主流的CAN协议控制器一般采用I/O总线(SJA1000等)或SPI接口(MCP2515等)与MCU进行通信。
    发表于 09-26 16:27 4996次阅读
    基于<b class='flag-5'>MCP2515</b>的多路<b class='flag-5'>CAN</b>总线接口电路设计

    基于stm32f103c8t6的有mcp2515can例程

    谁有基于stm32f103c8t6的有mcp2515can例程它由spi控制mcp2515进而控制canstm32f
    发表于 05-27 18:55

    可以通过SPIMCP2515 CAN总线监控演示板添加额外的器件吗?

    大家好,最近,我们正在研究MCP2515 CAN总线监视器演示板。使用这个演示板的目的是将SPI格式数据转换为可以格式化数据。在开始之前,我们认为该板具有SPI输入并可以输出,这意味着
    发表于 04-01 13:38

    MCP2515资料表存疑

    大家好!我正在研究一个使用SPI实现CAN通信的项目。我使用MCP2515 E/ST作为CAN控制器,并且我有一个关于组件电源电压范围的非常
    发表于 09-30 09:34

    带有SPI接口的独立CAN控制器MCP2515相关资料下载

    概述:Microchip的MCP2515是一款独立控制器局域网络(Controller Area Network,CAN)协议控制器,完全支持CAN V2.0B技术规范。该器件能发送和接收标准和扩展
    发表于 05-17 06:49

    如何使用MCP2515和TJA1050构成CAN节点通信

    使用MCP2515以及TJA1050构成CAN节点通信使用can收发器TJA1050芯片CAN协议控制器
    发表于 11-25 07:13

    如何解决扩展CAN芯片MCP2515的驱动移植问题?

    Hi, 我们用在飞凌A40i_C核心板扩展了一路CAN接口,是用SPI2总线连接MCP2515芯片。我看到内核已经支持该芯片的驱动,但是需要
    发表于 01-04 07:02

    RK3288上的can bus芯片MCP2515不能正常使用如何解决

    ,参考这些记录,就能实现对于mcp2515的支持;根据网友提供的帮助和这git上的改动参考,弄了一下,目前板子的can bus 芯片应该是能工作(具体还没去测试,但至少驱动通了,
    发表于 08-10 16:22

    MCP2515数据手册

    中文版MCP2515数据手册 SPICAN必备。
    发表于 03-22 14:20 40次下载

    基于STM32单片机和MCP2515CAN通讯

    基于STM32单片机和MCP2515CAN通讯
    发表于 07-18 10:52 84次下载

    MCP2515独立控制器

    1 简介:MCP2515 是一款独立控制器局域网络(Controller Area Network, CAN)协议控制器,完全支持 CAN V2.0B技术规范。该器件能发送和接收标准和扩展数据帧以及
    发表于 12-08 17:51 21次下载
    <b class='flag-5'>MCP2515</b>独立控制器

    带有SPI接口的独立CAN控制器MCP2515中文数据手册

    Microchip 的 MCP2515 是一款独立控制器局域网络 (Controller Area Network, CAN)协议控制器,完全 支持 CAN V2.0B 技术规范。该器件能发送
    发表于 05-10 17:16 35次下载

    MCP2515带有SPI接口的独立CAN控制器数据手册

    Microchip 的 MCP2515 是一款独立控制器局域网络 (Controller Area Network, CAN)协议控制器,完全 支持 CAN V2.0B 技术规范。该器件能发送
    发表于 06-27 15:31 3次下载

    CEPARK MCP2515 CAN通信模块产品简介

    电子发烧友网站提供《CEPARK MCP2515 CAN通信模块产品简介.pdf》资料免费下载
    发表于 10-18 09:09 1次下载
    CEPARK <b class='flag-5'>MCP2515</b> <b class='flag-5'>CAN</b>通信模块产品简介

    MCP2515SPI接口的独立CAN控制器数据手册

    电子发烧友网站提供《MCP2515SPI接口的独立CAN控制器数据手册.pdf》资料免费下载
    发表于 09-02 14:22 2次下载