APM32芯得 | 基于极海APM32E103系列MCU的SPI转CAN芯片MCP2515移植测试
CAN简介:CAN是控制器局域网络Controller Area Network的缩写,是ISO国际标准化的串行通信协议,支持CAN协议 2.0A和2.0B。在CAN协议中,发送者以广播形式把报文发送给所有接收者,节点在接收报文时,会经过过滤器组根据标识符决定是否需要该报文,这种设计节省了CPU的开销。
APM32E103系列MCU支持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都进行了定义初始化,通过宏定义来切换。
#define SPI_S//SPI_H
软件SPI只需要初始化用到的IO引脚,硬件SPI就需要对SPI进行初始化配置。
MCP2515有一个中断脚,在总线上有CAN型号是会有下拉型号,告诉MCU需要准备进入接收状态。
所以需要在MCU上配置个外部中断引脚,用于快速响应。
void MCP2515_GPIO_Init(void)
{
GPIO_Config_T GPIO_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 set Button EINT Interrupt to the lowest priority */
NVIC_EnableIRQRequest(EINT0_IRQn, 0x0f, 0x0f);
}
SPI初始化完成后需要对MCU2515的寄存器进行初始化配置,配置CAN通讯的波特率工作模式等。
void MCP2515_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的配置是否正确。
int main(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;
}
}
}
将杜邦线按照引脚配置,接好线后仿真就能测试回环模式下收发数据了。
可以看到断点打到接收部分,可以接收到CAN数据,与发送的数据一致。
如果有其他CAN设备或者CAN分析仪的话,可以将工作模式改成普通模式,进行设备间的通讯。
《APM32芯得》系列内容为用户使用APM32系列产品的经验总结,均转载自21ic论坛极海半导体专区,未经原文作者授权禁止转载。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由拾一转载自Geehy极海半导体公众号,原文标题为:APM32芯得 EP.45 | 基于APM32E103 SPI转CAN芯片MCP2515移植测试,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
【经验】如何在JFLASH中添加极海半导体Geehy APM32系列MCU
本文主要介绍极海半导体MCU产品如何使用第三方Segger公司的JFLASH配合J-Link仿真器对指定型号MCU的Flash进行擦除、写入及读取操作的目的。
【经验】APM32F4 MCU在RT-Thread系统上添加以太网驱动和使用LwIP网络组件的方法
本文详细介绍了如何将极海半导体APM32F4 MCU在RT-Thread系统上添加以太网驱动和使用LwIP网络组件,其他APM32带有以太网控制器的MCU,在RT-Thread使用LwIP网络功能也是大同小异的,按照这个过程基本都可以把网络功能应用起来。
tandby模式下,如何唤醒MCU APM32的RTC与WKUP?
APM32F103系列低功耗模式有三种:睡眠模式、停止模式和待机模式。通过关闭内核、时钟源、设置调压器来降低功耗。本文极海半导体解析了APM32的tandby模式下的RTC唤醒与WKUP唤醒功能如何实现。
极海半导体32位MCU-M0选型表
极海半导体的APM32系列是基于Arm® Cortex®-M0+/M3/M4内核的优质国产32位通用MCU,具有低功耗、高性能、高集成度以及快速移植等特性。凭借优异的系统性能、丰富的协处理功能以及灵活的使用体验,有助于用户缩短产品设计时间、降低开发成本、实现性能最优化。
产品型号
|
品类
|
内核
|
Frequency(MHz)
|
FLASH(KB)
|
SRAM(KB)
|
I/Os
|
Vmin(V)
|
Vmax(V)
|
GPTMR(16bit)
|
GP TMR(32bit)
|
Advanced TMR(16bit)
|
Basic TMR
|
Systick(24bit)
|
ADC 12-bit Cell
|
ADC 12-bit channels
|
DAC 12-bit Cell
|
DAC 12-bit channels
|
Analog Comparator
|
TSC (Channels)
|
SPI
|
I2S
|
I2C
|
U(S)ART
|
CAN
|
SDIO
|
USB Device
|
Package
|
对照型号
|
APM32F072V8T6
|
32位MCU
|
ARM Cortex-M0
|
48MHz
|
64KB
|
16KB
|
87
|
2V
|
3.6V
|
5
|
1
|
1
|
2
|
1
|
1
|
16
|
1
|
2
|
2
|
24
|
2
|
2
|
2
|
4
|
1
|
0
|
1
|
LQFP 100
|
-
|
选型表 - 极海半导体 立即选型
还可以这样玩?极海半导体APM32F411系列MCU与pyocd的火花
前段时间笔者学习了一下如何使用pyocd配合APM32F411VCTINY板在命令行下给它进行各种骚操作,在使用一段时间后就想着:pyocd是基于python的,那是不是也可以使用python脚本+pyocd使用起来呢?本文中极海半导体与大家分享能够自动化完成重复操作的设计经验。
【经验】极海半导体微控制器APM32F072系列基于IAR开发环境使用Jlink调试器的搭建指南
APM32F072系列是极海半导体推出的微控制器,使用IAR作为开发环境,调试工具为Jlink,通过SWD接口下载调试程序。本文以APM32F072VBT6为例介绍APM32F072系列开发环境的搭建方法。
极海半导体(Geehy Semiconductor)微控制器MCU选型指南(中文)
描述- 珠海极海半导体有限公司是一家致力于开发工业级/车规级微控制器、模拟与混合信号IC及系统级芯片的集成电路设计型企业。极海团队拥有20年集成电路设计经验和嵌入式系统开发能力,可为客户提供核心可靠的芯片产品及方案,实现准确感应、安全传输和实时控制,助力客户在智慧家居、高端消费电子、工业控制、汽车电子、智慧能源以及通信设施等领域的拓展创新。
型号- APM32F465RET6,APM32F030,APM32F051K6T6,APM32F1,APM32F4,APM32F405RGT6,APM32F003F6P6,APM32F003F6P7,APM32F103VET6,APM32E103,APM32F103VET7,APM32F051C6T6,APM32F0,APM32F103RCT6,APM32F103RCT7,APM32E103RCT6,APM32E103VET6,APM32F105RCT6,APM32F035,APM32F407RGT6,GALT61120,APM32F030RCT6,APM32F091RCT6,APM32E103CET6,AGW32F103T4T6S,GW8811,APM32F407VET6,APM32A407ZGT7,GURC01,APM32A091RCT7,APM32F003F4U6,APM32A091,APM32F411VET6,GHD系列,APM32F051C6U6,APM32F103TBU7,APM32F103TBU6,APM32F107RBT6,G32A1445,APM32F1系列,GALT系列,APM32F051R8T6,APM32E1 系列,APM32F417ZGT6,APM32F411CET6,G32A,APM32F405ZGT6,APM32F051K6U6,APM32F091VBT6,APM32M3514C8T7,APM32F030C8T6,G32A1445UAT0MLL,APM32系列,APM32F091CBT6,AGM32F103T4T6S,G32A1445UAT0MLH,APM32F103C8T6,APM32F103RBT7,APM32F411,GW3323HGU6,APM32F030K8T6,APM32F103RBT6,GURC系列,APM32A407,APM32F417,APM32F091CBU6,APM32M3514,GW系列,APM32F411RET6,APM32F407ZET6,APM32F072VBT6,APM32M3514C8U7,APM32E1,APM32,APM32F091CCU6,APM32E103CEU6,APM32F072R8T6,APM32 PROG,APM32F003F4M6,APM32F107RCT6,APM32F072CBT6,APM32F407IGT6,APM32F003,APM32A103VET7,APM32F072CBT7,APM32F105RBT6,APM32F407,APM32F405,APM32F091,APW32F103T4T6S,APM32F405VGT6,APM32F035C8T7,GHD,APM32F091VCT6,APM32F072,APM32E103CCT6,APM32F091CCT6,APM32F103CCT6,APM32F051K8T6,APM32E103VCT6,APM32F051C8T6,APM32F072CBU6,APM32E103ZET6,GHD3125R,APM32F103VCT6,APM32F103ZET6,GEEHY-LINK,APM32F107VBT6,AP/GM/W32F103T4T6S,APM32A407VGT7,APM32A103,APM32F003F6U7,APM32F407RET6,APM32F407VGT6,GW3323,APM32F003F6U6,APM32F417IGT6,APM32F103T8U6,APM32F051K8U6,APM32F051C8U6,APM32F107,APM32F105,APM32F465,APM32F105VCT6,APM32F103,APM32F417VGT6,GHD3440R5,APM32F051R6T6,APM32F103RET6,GHD3440R3,APM32F003F4P6,APM32F465CEU6,APM32F035K8T7,APM32F465VET6,GURC,APM32F030CCT6,APM32F030C6T6,APM32F103R8T6,GALT,APM32F051,APM32F103CBT7,G32A1465UAT0MLL,APM32F103CBT6,GHD3440QE,G32A系列,G32A1465UAT0MLH,APM32F030K6T6,APM32F030R8T6,APM32F103VBT6,APM32F030K6T7,APM32F072C8T6,APM32F107VCT6,APM32F103T4T6S,APM32A103CBT7,APM32F411CEU6,APM32F091RBT6,GW8811KEU6,GW8811CEU6,APM32F407ZGT6,APM32F072RBT6,APM32F072RBT7,APM32F003F6M6,GHD3440PF,APM32F407IGH6,APM32E103CCU6,GHD1620T,APM32A103RET7,APM32F105VBT6,APM32F030K6U6,GW,APM32E103RET6,APM32F072C8U6,APM32F4系列,G32A1465,APM32F0系列,APM32F072V8T6
极海半导体(Geehy Semiconductor)微控制器MCU选型指南(英文)
描述- Geehy Semiconductor Co., Ltd. is an IC Fabless company dedicated to developing industrial & automotive-grade MCUs, analog & mixed-signal ICs, and SoCs.
型号- APM32F030,APM32F051K6T6,APM32F4,APM32F405RGT6,APM32F003F6P6,APM32F003F6P7,APM32F103VET6,APM32E103,APM32F103VET7,APM32F051C6T6,APM32F0,APM32 SERIES,APM32F103RCT6,APM32F103RCT7,APM32E103RCT6,APM32E103VET6,APM32F105RCT6,APM32F035,APM32F407RGT6,GALT61120,APM32F030RCT6,APM32E103CET6,AGW32F103T4T6S,GW8811,APM32F407VET6,APM32A407ZGT7,GURC01,APM32A091RCT7,APM32F003F4U6,APM32A091,APM32F411VET6,APM32F051C6U6,APM32F103TBU7,APM32F103TBU6,APM32F107RBT6,G32A1445,APM32F051R8T6,APM32F417ZGT6,APM32F411CET6,G32A,APM32F405ZGT6,APM32F051K6U6,APM32M3514C8T7,APM32F030C8T6,G32A1445UAT0MLL,AGM32F103T4T6S,G32A1445UAT0MLH,APM32F103C8T6,APM32F103RBT7,APM32F411,GW3323HGU6,APM32F030K8T6,APM32F103RBT6,APM32A407,APM32F417,APM32F091CBU6,APM32M3514,APM32F407ZET6,APM32F072VBT6,APM32M3514C8U7,APM32E1,APM32,APM32F091CCU6,APM32E103CEU6,APM32F072R8T6,APM32F003F4M6,GW SERIES,APM32F107RCT6,APM32F072CBT6,APM32F407IGT6,APM32F003,APM32A103VET7,APM32F072CBT7,APM32F105RBT6,APM32F407,APM32F405,APM32F091,APW32F103T4T6S,APM32F405VGT6,APM32F035C8T7,GHD,APM32F072,APM32E103CCT6,APM32F103CCT6,APM32F051K8T6,APM32E103VCT6,APM32F051C8T6,APM32F072CBU6,APM32E103ZET6,GHD3125R,APM32F103VCT6,APM32F103ZET6,GEEHY-LINK,AP/GM/W32F103T4T6S,APM32F107VBT6,APM32A407VGT7,APM32A103,APM32F003F6U7,APM32F407RET6,APM32F407VGT6,GW3323,APM32F003F6U6,APM32F417IGT6,APM32F103T8U6,APM32F051K8U6,APM32F051C8U6,APM32F107,APM32F4T1RET6,APM32F105,APM32F105VCT6,APM32F103,APM32F417VGT6,GHD3440R5,APM32F051R6T6,APM32F103RET6,GHD3440R3,APM32F003F4P6,APM32F035K8T7,GURC,APM32F030CCT6,APM32F030C6T6,APM32F103R8T6,GALT,APM32F051,APM32F103CBT7,G32A1465UAT0MLL,APM32F103CBT6,GHD3440QE,G32A1465UAT0MLH,APM32F030K6T6,APM32F030R8T6,APM32F103VBT6,APM32F030K6T7,APM32F072C8T6,APM32F107VCT6,APM32F103T4T6S,APM32A103CBT7,APM32EF1,APM32F411CEU6,GW8811KEU6,GW8811CEU6,APM32F407ZGT6,APM32F072RBT6,APM32F072RBT7,APM32F003F6M6,GHD3440PF,APM32F407IGH6,APM32E103CCU6,GHD1620T,APM32A103RET7,APM32F105VBT6,APM32F030K6U6,GW,APM32E103RET6,APM32F072C8U6,G32A1465,APM32F072V8T6
APM32F103xC 基于Arm®Cortex®-M3内核的32位微控制器 数据手册
描述- 本资料介绍了APM32F103xC系列基于Arm® Cortex®-M3内核的32位微控制器的产品特性。该系列产品具备高性能、低功耗的特点,具有丰富的片上资源,包括多个I/O端口、多种通信接口、模拟外设和定时器等,广泛应用于各种嵌入式系统中。
型号- APM32F103XC 系列,APM32,APM32F103CCT7,APM32F103CCT6,APM32F103RCT6-R,APM32F103XCTX 系列,APM32F103XCTXS,APM32F103RCT6,APM32F103,APM32F103VCT6,APM32F103VCT7S,APM32F103VCT6S,APM32F103VCT7,APM32F103RCT6SXXX,APM32F103XCTX,APM32F103CCT7-R,APM32F103XC,APM32F103CCT6-R
极海半导体32位MCU-M3选型表
极海半导体的APM32系列是基于Arm® Cortex®-M0+/M3/M4内核的优质国产32位通用MCU,具有低功耗、高性能、高集成度以及快速移植等特性。凭借优异的系统性能、丰富的协处理功能以及灵活的使用体验,有助于用户缩短产品设计时间、降低开发成本、实现性能最优化。
产品型号
|
品类
|
内核
|
Frequency(MHz)
|
FLASH(KB)
|
SRAM(KB)
|
SDRAM
|
FPU
|
I/Os
|
Vmin(V)
|
Vmax(V)
|
GPTMR(16bit)
|
GP TMR(32bit)
|
Advanced TMR(16bit)
|
Basic TMR
|
Systick(24bit)
|
ADC 12-bit Cell
|
ADC 12-bit channels
|
DAC 12-bit Cell
|
DAC 12-bit channels
|
Analog Comparator
|
EMMC
|
SPI
|
I2S
|
I2C
|
U(S)ART
|
CAN
|
SDIO
|
Package
|
对照型号
|
APM32E103CET6
|
32位MCU
|
ARM Cortex-M3
|
120MHz
|
512KB
|
128KB
|
0
|
1
|
37
|
2V
|
3.6V
|
4
|
0
|
1
|
2
|
1
|
2
|
10
|
2
|
2
|
0
|
0
|
3
|
2
|
2
|
3
|
2
|
0
|
LQFP48
|
STM32F103RET6
|
选型表 - 极海半导体 立即选型
【应用】国产工业级高性能MCU APM32F407VGT6用于PLC工控板,主频168MHz,通信外设丰富
某客户主要做各种工业自动控制系统装置,其中一款国产PLC工控板主控要更换成国产物料,推荐极海工业级高性能MCU APM32F407系列,主频高达168MHz、通信外设资源丰富,工作温度范围-40℃到+85℃。
极海半导体32位MCU-M4选型表
极海半导体的APM32系列是基于Arm® Cortex®-M0+/M3/M4内核的优质国产32位通用MCU,具有低功耗、高性能、高集成度以及快速移植等特性。凭借优异的系统性能、丰富的协处理功能以及灵活的使用体验,有助于用户缩短产品设计时间、降低开发成本、实现性能最优化。
产品型号
|
品类
|
内核
|
Frequency(MHz)
|
FLASH(KB)
|
SRAM(KB)
|
SDRAM
|
Voltage
|
GPTMR(16bit)
|
GP TMR(32bit)
|
Advanced TMR(16bit)
|
Basic TMR
|
Systick
|
IWDG
|
WWDG
|
ADC 12-bit Cell
|
ADC 12-bit channels
|
DAC 12-bit channels
|
EMMC
|
SPI
|
I2S
|
I2C
|
U(S)ART
|
CAN
|
SDIO
|
USB OTG_FS
|
DCI
|
Ethernet
|
Package
|
对照型号
|
APM32F407IET6
|
32位MCU
|
ARM Cortex-M4
|
168MHz
|
512KB
|
192+4KB
|
1
|
1.8~3.6
|
8
|
2
|
2
|
2
|
1
|
1
|
1
|
3
|
24
|
2
|
1
|
3
|
2
|
3
|
4+2
|
2
|
1
|
1
|
1
|
1
|
LQFP176
|
STM32F407IET6
|
选型表 - 极海半导体 立即选型
【应用】极海32位MCU用于光伏逆变器,内置3个精度12位的ADC,主频高达168MHz
极海半导体APM32F407VGT6在硬件上标准LQFP100封装,高达168MHz的主频,独立FPU模块,高达82个I/O,操作简单,提供标准DEMO驱动程序等优点,是光伏逆变器应用或者其他通用MCU场景的优秀选择。
电子商城
现货市场
服务
可定制板装式压力传感器支持产品量程从5inch水柱到100 psi气压;数字输出压力传感器压力范围0.5~60inH2O,温度补偿范围-20~85ºС;模拟和数字低压传感器可以直接与微控制器通信,具备多种小型SIP和DIP封装可选择。
提交需求>
可来图定制均温板VC尺寸50*50mm~600*600 mm,厚度1mm~10mm,最薄0.3mm。当量导热系数可达10000W/M·K,散热量可达10KW, 功率密度可达50W/cm²。项目单次采购额需满足1万元以上,或年需求5万元以上。
提交需求>
登录 | 立即注册
提交评论