STM32 CAN总线工作模式与报文发送详解

5星 · 超过95%的资源 需积分: 10 42 下载量 49 浏览量 更新于2024-09-14 1 收藏 129KB PDF 举报
"STM32的CAN总线接收与发送" STM32的CAN(Controller Area Network)总线是一种用于嵌入式系统中的高效通信协议,特别适用于汽车电子和工业自动化领域。在STM32微控制器中,CAN接口被称为bxCAN,提供了多种工作模式以适应不同的操作需求。 1. 初始化模式: 在初始化模式下,bxCAN不允许接收和发送报文,并将CANTX引脚设置为高电平(隐性状态)。要进入初始化模式,需通过CAN_MCR寄存器设置INRQ位为1,并等待CAN_MSR寄存器的INAK位置1以确认。退出初始化模式则需清除INRQ位,同时硬件会清除INAK位。在这个阶段,设置CAN_BTR和CAN_MCR寄存器是必要的,以配置CAN控制器的参数。 2. 正常模式: 要从初始化模式进入正常模式,需清除INRQ位,然后等待INAK位清零以确认同步。在正常模式下,bxCAN可以接收和发送报文,但需要先确保与CAN总线同步,即在CANRX引脚上检测到11个连续的隐性位。过滤器的设置可以不在初始化模式下进行,但必须在非激活状态下完成。过滤器的位宽和模式设置则需要在进入正常模式前完成。 3. 睡眠模式(低功耗): 为了节省电力,bxCAN可以进入睡眠模式,此时其时钟被停止。进入睡眠模式需设置CAN_MCR的SLEEP位为1。要从睡眠模式唤醒,可软件清除SLEEP位或通过检测CAN总线活动。如果在睡眠模式下尝试进入初始化模式,同时需要清除SLEEP位。 4. 发送报文流程: 发送报文时,首先找到一个空的发送邮箱,设置标识符、数据长度和数据。然后,通过置位CAN_TIxR寄存器的TXRQ位来请求发送。置位TXRQ后,邮箱进入挂号状态并等待成为最高优先级的邮箱。一旦邮箱成为最高优先级,其状态变为预定发送,当CAN总线空闲时,报文开始发送。发送完成后,邮箱会自动清空,准备接收新的报文。 5. 接收报文流程: 接收报文涉及到多个接收FIFO(First-In First-Out)和过滤器。根据配置,报文会被路由到适当的接收邮箱或者FIFO,供应用程序读取。过滤器用于筛选和分类接收到的报文,确保只有符合预设规则的数据被处理。 6. 错误管理: bxCAN具有强大的错误检测和错误处理机制,包括位错误、位场错误、帧错误等。错误状态可以通过CAN_MSR寄存器进行监控,并根据错误情况调整CAN的操作模式。 总结来说,STM32的CAN总线通信涉及复杂的初始化、模式切换、报文发送和接收过程,以及错误管理。理解并正确配置这些方面是实现可靠CAN通信的关键。