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

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

3天内不再提示

第三十六章 CAN——控制器局域网络接口

W55MH32 来源:W55MH32 作者:W55MH32 2025-07-01 16:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单芯片解决方案,开启全新体验——W55MH32高性能以太网单片机

W55MH32是WIZnet重磅推出的高性能以太网单片机,它为用户带来前所未有的集成化体验。这颗芯片将强大的组件集于一身,具体来说,一颗W55MH32内置高性能Arm® Cortex-M3核心,其主频最高可达216MHz;配备1024KB FLASH与96KB SRAM,满足存储与数据处理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP协议栈、内置MAC以及PHY,拥有独立的32KB以太网收发缓存,可供8个独立硬件socket使用。如此配置,真正实现了All-in-One解决方案,为开发者提供极大便利。

在封装规格上,W55MH32提供了两种选择:QFN100和QFN68。

W55MH32L采用QFN100封装版本,尺寸为12x12mm,其资源丰富,专为各种复杂工控场景设计。它拥有66个GPIO、3个ADC、12通道DMA、17个定时器、2个I2C、5个串口、2个SPI接口(其中1个带I2S接口复用)、1个CAN、1个USB2.0以及1个SDIO接口。如此丰富的外设资源,能够轻松应对工业控制中多样化的连接需求,无论是与各类传感器、执行器的通信,还是对复杂工业协议的支持,都能游刃有余,成为复杂工控领域的理想选择。同系列还有QFN68封装的W55MH32Q版本,该版本体积更小,仅为8x8mm,成本低,适合集成度高的网关模组等场景,软件使用方法一致。更多信息和资料请进入http://www.w5500.com/网站或者私信获取。

此外,本W55MH32支持硬件加密算法单元,WIZnet还推出TOE+SSL应用,涵盖TCP SSL、HTTP SSL以及 MQTT SSL等,为网络通信安全再添保障。

为助力开发者快速上手与深入开发,基于W55MH32L这颗芯片,WIZnet精心打造了配套开发板。开发板集成WIZ-Link芯片,借助一根USB C口数据线,就能轻松实现调试、下载以及串口打印日志等功能。开发板将所有外设全部引出,拓展功能也大幅提升,便于开发者全面评估芯片性能。

若您想获取芯片和开发板的更多详细信息,包括产品特性、技术参数以及价格等,欢迎访问官方网页:http://www.w5500.com/,我们期待与您共同探索W55MH32的无限可能。

wKgZPGhjkceAQighABA5X7BENG0290.png

第三十六章 CAN——控制器局域网络接口

控制器局域网(Controller Area Network, CAN)作为工业自动化汽车电子领域的核心通信技术,以其高可靠性和实时性著称。下面我们将基于W55MH32以太网单片机的bxCAN(基本扩展 CAN)模块,系统讲解CAN通信的原理、架构及实际应用要点,和大家一起学习和使用这一技术。

1CAN通信概述

1.1简介

CAN(Controller Area Network)是一种用于实时控制的串行通信总线,由博世公司开发,广泛应用于汽车电子、工业自动化等领域。

1.2功能特点

CAN接口有以下特点:

多主通信机制:网络中所有节点均可在任意时刻主动发送数据,无需中央控制器协调。当多个节点同时发送时,通过标识符仲裁决定优先级,确保高优先级消息优先传输。

非破坏性总线仲裁:仲裁过程基于标识符的二进制值,数值越小优先级越高。仲裁失败的节点会自动停止发送,避免总线冲突。

错误处理:集成CRC校验、应答校验等多种错误检测机制,检测到错误时自动发送错误帧,并通过错误计数器实现故障界定(主动错误、被动错误、离线状态)。

实时性保障:通信速率最高可达1Mbps(短距离),满足实时控制场景需求。

1.3CAN帧结构与类型

CAN协议定义了四种帧类型,每种帧具有特定的结构和功能:

帧类型 作用 结构特点
数据帧 传输数据 包含帧起始、仲裁段、控制段、数据段、CRC段、应答段和帧结束,数据长度0-8字节。
远程帧 请求其他节点发送数据 无数据段,仲裁段标识符用于标识请求的消息,接收节点接收到远程帧后发送对应数据帧。
错误帧 检测到错误时发送 由错误标志(6个连续显性位)和错误界定符(8个隐性位)组成,所有节点检测到错误时发送。
过载帧 通知其他节点自身接收缓冲器满 用于延缓数据传输,由过载标志和过载界定符组成。

1.4标识符与优先级

CAN帧通过标识符(ID)确定优先级,ID越小优先级越高。

W55MH32支持两种帧格式:

标准帧:11位ID。

扩展帧:29位ID。

标识符不代表节点地址,而是与消息内容相关。例如,汽车中“发动机转速”的消息可能对应标识符0x100,所有订阅该消息的节点均可接收。

2W55MH32的bxCAN模块详解

2.1功能特点

W55MH32集成的 bxCAN(Basic Extended CAN)模块是一款高性能 CAN控制器,专为减轻 CPU负荷设计,其关键特性包括:

协议兼容性:完全支持CAN 2.0A和2.0B主动模式,波特率最高1Mbps。

发送处理能力:3个独立发送邮箱,支持优先级配置和时间戳记录(发送帧起始时刻的定时器值)。

接收管理机制:2个3级深度的接收FIFO(FIFO0和FIFO1),硬件自动管理报文存储,减少CPU干预。

灵活的过滤系统:14个可配置的过滤器组,支持32位或16位过滤宽度,可设置为屏蔽位模式或标识符列表模式。

时间触发通信:支持TTCM模式,内部16位定时器为报文添加时间戳,适用于对实时性要求极高的场景。

2.2硬件资源与内存映射

bxCAN模块的硬件资源包括:

引脚连接:通过CANTX和CANRX引脚连接外部收发器(如TJA1050),总线需接120Ω终端电阻

寄存器组:包含控制寄存器(CAN_MCR)、状态寄存器(CAN_MSR)、发送状态寄存器(CAN_TSR)、接收FIFO寄存器(CAN_RF0R/CAN_RF1R)等,共32个32位寄存器,地址范围0x00至0x31C。

共享内存:与USB模块共用512字节SRAM,用于数据收发缓冲,二者不可同时使用。

2.3时钟与波特率

bxCAN的时钟源自APB1总线,其波特率计算公式为:

波特率 =系统时钟 / [2 × CAN_BRP × (CAN_SJW + 1 + CAN_BS1 + 1 + CAN_BS2 + 1)]

CAN_BRP:波特率分频器,范围1~1024。

CAN_SJW:重新同步跳跃宽度,决定总线相位误差的补偿能力。

CAN_BS1/CAN_BS2:时间段1和时间段2,用于定义采样点位置和位时序。

例如,当系统时钟为72MHz,设置CAN_BRP=9、CAN_SJW=1、CAN_BS1=6、CAN_BS2=3时,波特率为1Mbps,采样点位于75%位时间处,兼顾抗干扰性和同步能力。

3bxCAN工作模式与状态转换

3.1工作模式

bxCAN支持三种主要工作模式,通过CAN_MCR寄存器配置:

初始化模式

进入条件:软件设置CAN_MCR.INRQ=1,等待CAN_MSR.INAK=1确认。

功能:仅在此模式下可配置波特率(CAN_BTR寄存器)、过滤器组参数(位宽、模式、FIFO关联等)。

注意事项:初始化完成后需退出该模式才能正常通信,退出时需等待总线空闲(检测到11个连续隐性位)。

正常模式

工作状态:支持完整的收发功能,节点与总线同步后即可发送和接收报文。

同步机制:通过检测帧起始位(SOF)的上升沿实现位同步,后续通过重新同步调整相位误差。

典型应用:工业控制中的数据交互、汽车ECU间的实时通信。

睡眠模式

低功耗设计:时钟停止,仅保留唤醒逻辑,功耗显著降低。

唤醒方式:软件清CAN_MCR.SLEEP位,或硬件检测到总线活动(需设置CAN_MCR.AWUM=1)。

应用场景:电池供电设备的节能模式,如车载传感器的待机状态。

3.2测试模式:静默与环回

为便于开发调试,bxCAN支持两种测试模式,需在初始化模式下配置CAN_BTR寄存器:

静默模式(SILM=1)

特性:可接收数据帧和远程帧,但发送时仅输出隐性位,不影响总线状态。

用途:用于分析总线活动,不干扰现有通信,如故障诊断时的总线监听。

环回模式(LBKM=1)

特性:发送的报文直接在内部回环至接收端,忽略CANRX引脚输入。

用途:自测试场景,无需外部硬件即可验证收发功能,如模块出厂前的自测。

环回静默模式(SILM=1+LBKM=1)

组合特性:兼具环回和静默功能,发送报文不影响外部总线,仅内部回环测试。

安全测试:适用于"热自测试",避免干扰实际总线通信。

4报文发送与接收处理机制

4.1发送处理流程

bxCAN的发送流程由硬件自动管理,软件只需配置邮箱并请求发送:

邮箱选择:3个发送邮箱(邮箱0~2),空闲时可选择任意邮箱。

参数配置:设置标识符(STDID/EXID)、帧类型(数据帧/远程帧)、数据长度(DLC)和数据内容。

发送请求:置位CAN_TIxR.TXRQ位,邮箱状态变为"挂号",等待仲裁。

仲裁与发送:仲裁成功后进入"发送中"状态,发送完成后CAN_TSR.TXOK位置1,邮箱重置为空闲。

发送优先级规则

标识符优先:CAN_MCR.TXFP=0时,标识符数值小的报文优先发送;标识符相同时,邮箱号小的优先。

FIFO优先:CAN_MCR.TXFP=1时,按发送请求的先后顺序排队,适用于分段发送场景。

4.2接收管理与FIFO机制

接收处理通过2个3级深度FIFO实现,完全由硬件管理:

有效报文判定:正确接收(无CRC错误、格式错误等)且通过过滤器检查的报文为有效报文。

FIFO存储:有效报文按接收顺序存入FIFO,FIFO0和FIFO1各自独立,可通过过滤器配置关联到不同FIFO。

状态标识:CAN_RF0R/FIFO1R中的FMP[1:0]位指示FIFO中的报文数量(0~3),满时FULL位被置1。

溢出处理:可配置FIFO锁定模式(CAN_MCR.RFLM=1),此时新报文会被丢弃;否则最新报文覆盖旧报文。

时间戳与过滤器匹配序号

时间戳:每个接收报文记录帧起始时刻的16位定时器值,存入CAN_RDTxR.TIME[15:0],用于分析报文延迟。

过滤器匹配序号(FMI):记录匹配的过滤器组编号,存入CAN_RDTxR.FMI[7:0],软件可据此快速区分报文类型。

5标识符过滤系统解析

5.1过滤机制的核心价值

CAN网络中,节点通常只关注部分报文,过滤器的作用是硬件层面筛选有效报文,减轻CPU负荷。bxCAN的过滤系统具有以下特点:

14个过滤器组:每个组可独立配置,支持标准帧和扩展帧过滤。

可变位宽:每个组可设置为32位单过滤器或2个16位过滤器。

双模式配置:屏蔽位模式或标识符列表模式,灵活适应不同场景。

5.2屏蔽位模式与列表模式

屏蔽位模式

工作原理:每个过滤器组包含1个标识符寄存器和1个屏蔽寄存器,屏蔽位为1的位置需严格匹配,为0的位置"不关心"。

典型应用:过滤一组相关报文,如标识符0x100~0x1FF的标准帧,可设置标识符为0x100,屏蔽码为0x0FF。

标识符列表模式

工作原理:两个寄存器均作为标识符寄存器,报文必须与其中一个完全匹配才会通过过滤。

典型应用:精确过滤特定报文,如只接收标识符为0x200的扩展帧,可设置两个寄存器均为0x200的扩展帧格式。

5.3过滤器优先级规则

当报文匹配多个过滤器时,优先级由以下规则决定:

位宽优先:32位过滤器优先级高于16位过滤器。

模式优先:列表模式优先级高于屏蔽位模式。

编号优先:过滤器组编号小的优先级高(0-13)。

例如,32位列表模式的过滤器组0优先级高于16位屏蔽位模式的过滤器组1,确保关键报文优先处理。

6错误管理与总线健康监测

6.1错误检测与计数器机制

bxCAN通过发送错误计数器(TEC)和接收错误计数器(REC)实现故障界定:

错误类型:支持位错误、填充错误、CRC错误、格式错误、应答错误等,错误码存入CAN_ESR.LEC[2:0]。

计数器更新:

发送错误时TEC加1,接收错误时REC加1。

成功发送/接收时,TEC和REC减1(超过127时减至120)。

状态转换:

TEC或REC > 127时进入错误被动状态,此时发送错误帧为隐性位。

TEC > 255时进入离线状态,无法收发报文,需通过自动恢复或软件干预重新上线。

6.2离线恢复机制

离线状态的恢复方式由CAN_MCR.ABOM位决定:

自动恢复(ABOM=1):检测到128次11个连续隐性位后自动恢复为错误主动状态。

手动恢复(ABOM=0):软件需先请求进入初始化模式,再退出,等待总线同步后恢复。

6.3错误中断与状态监控

通过CAN_IER寄存器可配置多种错误中断:

错误警告中断(EWGIE=1):TEC或REC ≥ 96时触发,提示总线可能出现异常。

错误被动中断(EPVIE=1):进入错误被动状态时触发,需关注总线稳定性。

离线中断(BOFIE=1):进入离线状态时触发,需启动恢复流程。

上次错误码中断(LECIE=1):每次错误时更新错误码并触发中断,便于快速定位问题。

7应用场景

7.1工业自动化网络

多设备协同控制:如PLC与传感器、执行器间的实时数据交互,通过CANopen协议实现设备联网。

抗干扰设计:采用隔离收发器(如CTM1051)和屏蔽双绞线,总线两端接120Ω终端电阻,降低电磁干扰影响。

7.2汽车电子系统

车载网络:连接发动机控制单元(ECU)、ABS、仪表盘等,遵循J1939或CANopen协议。

低功耗需求:利用睡眠模式和唤醒功能,减少待机功耗,满足汽车电源管理要求。

8注意事项

8.1硬件连接与终端配置

总线两端必须接入120Ω终端电阻,中间节点无需额外电阻,避免阻抗不匹配导致信号反射。

工业场景建议使用隔离收发器(如CTM1051)和屏蔽双绞线,屏蔽层单点接地以降低电磁干扰。

8.2波特率一致性配置

所有节点的波特率参数(CAN_BRP、BS1、BS2、SJW)必须完全一致,建议通过寄存器硬编码避免计算误差。

长距离通信(>100m)需降低波特率至50kbps以下,并将采样点后移至80%位时间处(增大BS1参数)。

8.3过滤器与FIFO管理

未使用的过滤器组需设置为非激活状态(CAN_FA1R对应位清0),避免无效报文占用资源。

接收FIFO需定期查询或启用中断(如FMPIE),防止因软件处理延迟导致报文溢出。

8.4错误处理与恢复机制

监控发送/接收错误计数器(TEC/REC),超过96时触发预警,超过127时切换至降级模式。

离线恢复时,若使用手动模式(ABOM=0),需确保退出初始化模式后等待总线同步完成(CAN_MSR.INAK=0)。

8.5低功耗模式操作规范

进入睡眠模式前需确认所有发送邮箱为空(CAN_TSR.TME=1),唤醒时优先使用硬件总线活动检测(AWUM=1)以降低功耗。

9程序设计

9.1CAN_LoopBack例程

CAN_LoopBack例程实现了CAN总线回环测试程序,通过串口接收指令控制CAN数据发送,并自动接收回环数据进行打印输出,用于验证CAN控制器功能。以下是实现过程和结果验证:

9.1.1CAN初始化

CAN_Mode_Init()函数是W55MH32的CAN总线初始化函数,内容如下:

uint8_t CAN_Mode_Init(uint8_t tsjw,uint8_t tbs2,uint8_t tbs1,uint16_t brp,uint8_t mode) { GPIO_InitTypeDef GPIO_InitStructure; CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; #if CAN_RX0_INT_ENABLE NVIC_InitTypeDef NVIC_InitStructure; #endif RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//reuse push pull GPIO_Init(GPIOB,&GPIO_InitStructure); //initialize io GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;//pull up input GPIO_Init(GPIOB,&GPIO_InitStructure); //initialize io //CAN unit settings CAN_InitStructure.CAN_TTCM= DISABLE;//non time triggered communication mode CAN_InitStructure.CAN_ABOM= DISABLE;//software automatic offline management CAN_InitStructure.CAN_AWUM= DISABLE;//Sleep mode Wake up via software (clear the SLEEP bit of CAN- > MCR) CAN_InitStructure.CAN_NART= ENABLE; //prohibit automatic transmission of messages CAN_InitStructure.CAN_RFLM= DISABLE;//message not locked new overwrite old CAN_InitStructure.CAN_TXFP= DISABLE;//priority is determined by the message identifier CAN_InitStructure.CAN_Mode= mode; //Mode settings: mode: 0, normal mode; 1, loop mode; //set baud rate CAN_InitStructure.CAN_SJW = tsjw; //Resynchronize jump width (Tsjw) to tsjw + 1 time unit CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq CAN_InitStructure.CAN_BS1 = tbs1; //Tbs1=tbs1+1 unit of timeCAN_BS1_1tq ~CAN_BS1_ CAN_InitStructure.CAN_BS2 = tbs2; //Tbs2=tbs2+1 unit of timeCAN_BS2_1tq ~ CAN_ CAN_InitStructure.CAN_Prescaler= brp; //The frequency division factor (Fdiv) is brp + 1 CAN_Init(CAN1,&CAN_InitStructure); //Initialize CAN1 CAN_FilterInitStructure.CAN_FilterNumber =0; //filter0 CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;//shielding mode CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;//32 bit width CAN_FilterInitStructure.CAN_FilterIdHigh =0x0000; //32 bit id CAN_FilterInitStructure.CAN_FilterIdLow =0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh =0x0000; //32 bit mask CAN_FilterInitStructure.CAN_FilterMaskIdLow =0x0000; CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0; //filter 0 is associated with fifo0 CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; //activate filter 0 CAN_FilterInit(&CAN_FilterInitStructure); //filter initialization #if CAN_RX0_INT_ENABLE CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);//FIFO0 message registration interruption allowed. NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;// the primary priority is 1 NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;// the secondary priority is 0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); #endif return0; }

该函数通过配置GPIOB引脚(PB8接收上拉、PB9发送复用)和CAN1控制器,设置工作模式(含回环测试)、位时序参数(同步段、位段1/2、分频系数)以确定波特率,使用32位ID屏蔽过滤器接收所有消息,并可选择性开启FIFO0中断(需定义CAN_RX0_INT_ENABLE),最终完成CAN总线的初始化配置,为通信做准备。

9.1.2CAN数据发送

Can_Send_Msg()为CAN总线数据发送函数:

uint8_tCan_Send_Msg(uint8_t*msg,uint8_t len) { uint8_t mbox; uint16_t i=0; CanTxMsgTxMessage; TxMessage.StdId=0x12; // standard identifier TxMessage.ExtId=0x12; // set extension identifier TxMessage.IDE = CAN_Id_Standard;// standard frame TxMessage.RTR = CAN_RTR_Data; // data frame TxMessage.DLC = len; // the length of the data to be sent for(i=0; i< len; i++) TxMessage.Data[i] = msg[i]; mbox = CAN_Transmit(CAN1, &TxMessage); i  = 0; while ((CAN_TransmitStatus(CAN1, mbox) == CAN_TxStatus_Failed) && (i <  0XFFF)) i++; //waiting for the end of sending if (i  >=0XFFF)return1; return0; }

此程序首先配置CAN帧参数(标准ID为0x12、标准数据帧、数据长度由参数指定),将待发送数据填充至发送缓冲区,然后调用发送函数并通过邮箱状态轮询机制(最多等待0XFFF次)确认发送结果,最终返回成功(0)或失败(1)。

9.1.3CAN数据接收

Can_Receive_Msg()为CAN总线数据接收函数:

uint8_tCan_Receive_Msg(u8*buf) { uint32_t i; CanRxMsgRxMessage; if(CAN_MessagePending(CAN1, CAN_FIFO0)==0)return0;//no data received exit directly CAN_Receive(CAN1, CAN_FIFO0,&RxMessage); //read data for(i=0; i<  8; i++) buf[i] = RxMessage.Data[i]; return RxMessage.DLC; }

通过检查CAN1的FIFO0接收缓冲区状态,若有数据则读取CAN帧信息(含ID、数据等),将有效数据(最多8字节)复制到用户缓冲区,并返回实际数据长度(DLC),若无数据则直接返回0,实现了简洁的非阻塞式CAN数据接收功能。

9.1.4串口接收

GetCmd()为USART1串口单字符接收函数:

uint8_tGetCmd(void) { uint8_t tmp=0; if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)) { tmp= USART_ReceiveData(USART1); } return tmp; }

通过检查接收缓冲区非空标志位(RXNE)判断是否有数据可读,若有则读取并返回接收到的字符(8位),若无则返回0。

9.1.5主程序

main()函数为CAN总线回环测试主程序:

int main(void) { uint8_t res, i, key; uint8_t canbuf[8]; RCC_ClocksTypeDef clocks; delay_init(); UART_Configuration(115200); RCC_GetClocksFreq(&clocks); printf("n"); printf("SYSCLK: %3.1fMhz, HCLK: %3.1fMhz, PCLK1: %3.1fMhz, PCLK2: %3.1fMhz, ADCCLK: %3.1fMhzn", (float)clocks.SYSCLK_Frequency /1000000,(float)clocks.HCLK_Frequency/1000000, (float)clocks.PCLK1_Frequency /1000000,(float)clocks.PCLK2_Frequency/1000000,(float)clocks.ADCCLK_Frequency/1000000); printf("CAN LoopBack Test.n"); CAN_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_9tq,4, CAN_Mode_LoopBack);//CAN initialize loopback mode,baud rate 500Kbps while(1) { if(GetCmd()=='s') { for(i=0; i< DATA_LEN; i++) { canbuf[i] = 0x5A + i; } res = Can_Send_Msg(canbuf, 8); //send 8 bytes if (res == 0) printf("Can Loop Back Send Data Successn"); else printf("Can Loop Back Send Data Failn"); } key = Can_Receive_Msg(canbuf); if (key) { printf("Can Loop Back Recv Data Successn"); for (i = 0; i < key; i++) { printf("canbuf[%d] = 0x%xn", i, canbuf[i]); } } } }

通过初始化系统时钟、UART1和CAN控制器(配置为回环模式,波特率500Kbps),在主循环中监听串口输入,当接收到“s”字符时发送8字节测试数据(0x5A~0x61),并持续检查CAN接收缓冲区,若收到数据则打印内容,实现自收自发的通信验证。

9.1.6下载验证

程序下载运行后,首先打印了系统各时钟的频率和示例名称,我们手动通过串口发送“s”之后,W55MH32便会通过CAN接口发送数据并接收来实现回环测试。发送和接收成功后都会打印出对应的提示信息,接收成功后同时也会将接收缓冲区的内容打印出来:

wKgZPGhjm8yAYvgdAANwVGwZe9w894.png

9.2CAN_Normal例程

CAN_Normal是CAN总线正常模式通信测试程序,与回环测试不同,它需通过物理总线与外部CAN节点通信。该例程除了CAN初始化的CAN模式参数变成的CAN_Mode_Normal之外,CAN初始化函数内容、发送、接收函数、主程序等与CAN_LoopBack例程保持一致。改动如下:

CAN_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_9tq,4, CAN_Mode_Normal);//baud rate 500Kbps

9.2.1下载验证

程序下载运行后,首先打印了系统各时钟的频率和示例名称,通过串口发送“s”后,W55MH32便会通过CAN接口发送数据,发送成功后串口打印“Can Normal Send Data Success”的信息:

wKgZPGhjm8yAf6ItAAJswYAFeb4543.png

wKgZO2hjm8yAAN-JAACciTsKmTQ446.png

10总结

本文聚焦W55MH32的bxCAN模块,详解CAN通信核心内容。先介绍CAN协议特性与帧结构,再解析bxCAN的发送邮箱、接收FIFO及工作模式,接着阐述收发机制、过滤规则、错误管理和波特率配置,最后从硬件连接、参数匹配、过滤配置等方面给出示例程序以及讲解,帮助大家理解CAN的使用。

WIZnet是一家无晶圆厂半导体公司,成立于1998年。产品包括互联网处理器iMCU™,它采用TOE(TCP/IP卸载引擎)技术,基于独特的专利全硬连线TCP/IP。iMCU™面向各种应用中的嵌入式互联网设备。

WIZnet在全球拥有70多家分销商,在香港、韩国、美国设有办事处,提供技术支持和产品营销。

香港办事处管理的区域包括:澳大利亚、印度、土耳其、亚洲(韩国和日本除外)。

审核编辑 黄宇

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

    关注

    114

    文章

    17635

    浏览量

    190164
  • CAN
    CAN
    +关注

    关注

    58

    文章

    3010

    浏览量

    471391
  • WIZnet
    +关注

    关注

    3

    文章

    20

    浏览量

    42742
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CANopen转Profinet是一种构建于控制局域网设备之上的协议网关

    CANopen作为构建于控制局域网(Controller Area Network, CAN)之上的高层通信协议,其体系架构包含通信子协议与设备子协议。此协议在嵌入式系统领域获得广泛应用,且为工业
    的头像 发表于 11-05 14:05 239次阅读
    CANopen转Profinet是一种构建于<b class='flag-5'>控制</b><b class='flag-5'>局域网</b>设备之上的协议网关

    Texas Instruments TCAN1043A-Q1汽车级CAN FD收发技术解析

    Texas Instruments TCAN1043A-Q1汽车级CAN FD收发是一款高速控制器局域网 (CAN) 收发
    的头像 发表于 09-24 15:25 647次阅读
    Texas Instruments TCAN1043A-Q1汽车级<b class='flag-5'>CAN</b> FD收发<b class='flag-5'>器</b>技术解析

    ‌TCAN1162-Q1汽车级CAN FD收发技术解析

    Texas Instruments TCAN1162-Q1汽车级CAN FD收发是一款高速控制器局域网 (CAN) 收发
    的头像 发表于 09-19 14:57 536次阅读
    ‌TCAN1162-Q1汽车级<b class='flag-5'>CAN</b> FD收发<b class='flag-5'>器</b>技术解析

    TCAN341x系列3.3V CAN FD收发技术解析与应用指南

    Texas Instruments TCAN341x 3.3V CAN FD收发控制器局域网CAN)FD收发
    的头像 发表于 09-05 10:23 822次阅读
    TCAN341x系列3.3V <b class='flag-5'>CAN</b> FD收发<b class='flag-5'>器</b>技术解析与应用指南

    DeviceNet 协议详解:网关模块如何实现跨系统互联

    DeviceNet 是一种用在自动化技术的现场总线标准,由美国的Allen-Bradley公司在1994年开发。DeviceNet使用控制器局域网络CAN )为其底层的通讯协定,其应用层有针对
    的头像 发表于 07-16 14:41 500次阅读
    DeviceNet 协议详解:网关模块如何实现跨系统互联

    开关量对传控制器局域网通讯,应用广泛

    局域网开关量(数字量)双向对传模块是一种专门用于在局域网(如以太网、CAN、RS485转TCP/IP等)上,实现继电器触点、按钮状态、传感通断信号等开关状态信号,和继电器吸合/释放、
    的头像 发表于 06-20 16:03 456次阅读

    局域网开关对传控制器:无需设置,即装即用

    局域网开关对传控制器(也称“网络型开关量对传模块”)是一种基于本地网络(如以太网、工业环网)实现开关量信号双向传输的专用设备。其核心功能是用网络
    的头像 发表于 06-16 14:42 539次阅读

    MAX13041具有±80V故障保护的高速CAN收发,提供低功耗管理和CAN唤醒功能技术手册

    MAX13041是具有±80V故障保护的高速控制局域网(CAN)收发,可理想用于要求高可靠性和先进的电源管理功能的高速汽车网络。该器件可将
    的头像 发表于 05-27 10:46 658次阅读
    MAX13041具有±80V故障保护的高速<b class='flag-5'>CAN</b>收发<b class='flag-5'>器</b>,提供低功耗管理和<b class='flag-5'>CAN</b>唤醒功能技术手册

    LTM2889隔离型CAN FD μModule收发和电源技术手册

    LTM2889 是一款完整的电流隔离型控制器局域网络 (CAN) μModule^®^ (微型模块) 收发。 它无需使用外部组件,单个电源通过一个集成的隔离式 DC/DC 转换
    的头像 发表于 05-27 10:18 691次阅读
    LTM2889隔离型<b class='flag-5'>CAN</b> FD μModule收发<b class='flag-5'>器</b>和电源技术手册

    Devicenet协议转换模块妙用之处

      DeviceNet 是一种用在 自动化技术 的 现场总线 标准,由美国的 Allen-Bradley 公司在1994年开发。DeviceNet使用 控制器局域网络CAN )为其底层的通讯
    的头像 发表于 04-26 15:16 831次阅读
    Devicenet协议转换模块妙用之处

    驱动软件定义整车变革的网络技术

    随着汽车工业的不断进步,汽车网络技术也经历了从简单到复杂、从低带宽到高带宽的演变过程。最初,汽车内部的电子控制单元(ECU)之间的通信主要依赖于控制器局域网络
    的头像 发表于 04-01 13:42 820次阅读
    驱动软件定义整车变革的<b class='flag-5'>网络</b>技术

    华企盾:局域网监管怎么操作?常见的局域网监管方法

    目前的企业办公以及各类局域网环境中,对网络内的活动进行有效监控变得愈发重要。无论是为了保障网络安全、提高员工工作效率,还是为了防止数据泄露等情况发生,掌握局域网监控的操作方法都是必不可
    的头像 发表于 03-12 15:09 662次阅读

    局域网地址检测

    局域网地址检测是一款非常实用的IP地址冲突快速检测工具。这款它功能强大、操作简单,能帮助用户快速检测在同一局域网内遇到IP冲突的问题,需要的用户可下载!  局域网地址检测
    发表于 02-17 17:00 2次下载

    《DNESP32S3使用指南-IDF版_V1.6》第三十六章 照相机实验

    第三十六章 照相机实验 本章我们结合前面的摄像头实验,实现一个简单的照相机功能。本章分为如下几个小节:36.1 OV5640和CAMERA模块简介36.2 硬件设计36.3 程序设计36.4 下载
    发表于 12-30 09:26

    CAN协议的软件过滤和硬件过滤

    CAN过滤是控制器局域网络中用于控制哪些消息可以被节点接收的一种机制。在CAN网络中,由于是
    的头像 发表于 12-26 19:33 1016次阅读
    <b class='flag-5'>CAN</b>协议的软件过滤和硬件过滤