初学can总线
---------------------STM32 bxCan-----------------------------
bxCAN main features
- 支持CAN协议的2.0A、B
- 波特率最高可达到1M/S
- 支持事件触发通信(supports the time triggered comunication option){不太理解,有机会看看}
Transmission
- 3个发送邮箱
- 可配置传输优先级
- 记录SOF发送的时间戳(Time Stamp on SOF transmission)
Reception
- 三级深度的2个接收FIFO(Two receive FIFOs with three stages)
- 有2个3级深度的接收缓冲区:FIFO0和FIFO1,每个FIFO都可以存放3个完整的报文
- 共享28个过滤器(28 filter banks shared between CAN1 and CAN2)
- 标识符列表
- fifo溢出可配置(Configurable FIFO overrun)
- 记录接收SOF的时间戳
Time-triggered communication option(事件触发通信模式)
● Disable automatic retransmission mode(禁止自动重传模式)
● 16-bit free running timer(16位的自运行定时器)?
● Time Stamp sent in last two data bytes(最后2个字节发送时间戳)
Management
● Maskable interrupts(可屏蔽中断)
● Software-efficient mailbox mapping at a unique address space(邮箱占用一块地址空间)
Dual CAN
● CAN1: Master bxCAN for managing the communication between a Slave bxCAN and
the 512-byte SRAM memory
● CAN2: Slave bxCAN, with no direct access to the SRAM memory.
● The two bxCAN cells share the 512-byte SRAM memory
bxCAN operating modes
Initialization mode
1.sets the INRQ bit 1 in the CAN_MCR register
2.等待硬件sets the INAK bit 1 in the CAN_MSR register
3.软件sets the INRQ bit 0 in the CAN_MCR register(请求退出初始化模式)
4.硬件sets the INAK bit 0 in the CAN_MSR register(退出初始化模式)
初始化模式下,收发报文都被禁用,CANTX 输出高电平。在初始化模式下不允许修改任何配置寄存器。
过滤器的值设置不需要在初始化模式下进行但是,但是过滤器的位宽和模式的设置必须在初始化模式进入正常模式下之前完成。
Normal mode
1.软件对 CAN_MCR 的INRQ bit 清0
2.等待硬件对CAN_MSR 的 INAK 位1的确认
3.后连续采集12个CANRX 输出高电平(等同于总线空闲)
bcCAN才可正常的收发报文
Sleep mode
1.software request by setting the SLEEP bit in the CAN_MCR register
bcCAN时钟停止,软件可以访问邮箱寄存器。
进入初始化模式
软件设置INRQ位1,同时清SLEEP位0.或硬件者检测CAN总线活动
进入正常模式
Test mode
- Silent mode
- Loop back mode
- Loop back combined with silent mode
传输处理
1)发送报文
程序选择一个空的发送邮箱,设置标示符、数据长度和数据。后设置CAN_TIxR register的TXRQ bit 1,来待发送数据。设置后,邮箱的状态不再为空,此时不能在访问邮箱寄存器。同时邮箱会等待获得高优先级,一旦其获得高优先级会从挂号状态转成预定发送状态。当CAN总线获得空闲会立即将其发送。
如果其成功发送,会立更改其状态为空邮箱,硬件设置CAN_TSR register的RQCP and TXOK bits 为1
如果发送失败,.由仲裁引起错误会对应的设置CAN_TSR registe的ALST bit 为1,由错误引起的设置CAN_TSR registe的TERR bit为1.
传输优先级
传输优先级可以由标示符和发送请求顺序决定。
标示符决定
当邮箱状态为挂起且数量大于1个时,传输顺序由邮箱中的标示符决定,标示符越低其权限越高。如果标示符等值,那么序号小的邮箱获得高优先级。
发送请求顺序决定
CAN_MCR register中的TXFP bit为1,发送邮箱配置为FIFO,改情况优先级根据发送次序决定,主要针对分段发送的报文。
2)Abort 终止传输请求
通过设置CAN_TSR register的ABRQ bit 为1来终止传输请求,当发送邮箱处于挂号或者执行状态下,立即响应终止。而当发送邮箱处于传输状态时,有2种结果,一发送成功这时发送邮箱为empty 且设置CAN_TSR register的 TXOK bit 为1,第二种结果,当传输失败是邮箱状态为scheduled,传输请求终止,清除CAN_TSR register的 TXOK bit,同时邮箱为empty。
3)自动重传模式 Nonautomatic retransmission mode
此模式建立在标准CAN基础上的支持时间触发的操作,需要设置 CAN_MCR register 的NART bit为1.
该模式每个传输都只被执行一次,如果第一次发送由于错误或是仲裁丢失发送失败后,硬件自动重传该消息。当第一次发送结束后,硬件认为发送完成并设置CAN_TSR register的RQCP bit 为1,传输结果由CAN_TSR register的 TXOK, ALST and TERR bits 表示。(没太理解)
事件触发模式 Time triggered communication mode
此模式下CAN硬件内部的计时器被激活,用于产生时间戳并被存储与CAN_RDTxR/CAN_TDTxR registers中。内部定时器在每次CAN的位定时后自增,内部时钟在收、发帧的起始位置的采样点被采样,并生成时间戳。(理解欠缺)
接收处理
前面知道有2个三级深度的FIFO用来接收报文,FIFO完全由硬件管理以节省CPU,简化了软件并保证了数据的一致性,软件只能通过FIFO的输出邮箱来得到最先输出的报文。
1)Valid message 有效报文
当接收的报文通过CAN协议(直到EOF的最后一位都没有错)并且通过了标示符过滤,即被认为有效报文。
2)FIFO management
当第一条有效报文被存储在FIFO里,状态改为becomes pending_1.硬件就会更新CAN_RFR register中的FMP[1:0]位值为01b,如果软件及时从输出邮箱读取报文需要设置CAN_RFR register的RFOM bit 为1,FIFO状态重置为empty。如果没有清空输出邮箱的话,第二条有效报文会继续存在FIFO里,同时状态改为becomes pending_2,硬件就会更新CAN_RFR register中的FMP[1:0]位值为10b,第三条有效报文存储时状态改为becomes pending_3,硬件就会更新CAN_RFR register中的FMP[1:0]位值为11b,此时软件必须读取邮箱中的报文否则有可能照成报文丢失。
3)溢出
当FIFO的becomes pending_3时,这时候吓一条有效报文这时候会产生溢出,溢出条件可以通过设置CAN_RFR register的FOVR bit 来决定丢失哪条报文。
4)接收有关中断
当FIFO存入1个报文,硬件就会更新FMP[1:0]位,并且如果CAN_IER寄存器的FMPIE位为1,那么就会产生一个中断请求
当邮箱状态becomes pending_3时CAN_RFxR寄存器的FULL位就被置1,并且如果CAN_IER寄存器的FFIE位为1,那么就会产生一个满中断请求。
在溢出的情况下,FOVR位被置1,并且如果CAN_IER寄存器的FOVIE位为1,那么就会产生一个溢出中断请求
.
分享到:
相关推荐
STM32H7系列是意法半导体...通过深入学习和实践这个工程,开发者不仅可以掌握STM32H7的高级通信特性,还能了解到如何在实际项目中应用和优化CAN总线技术,这对于嵌入式硬件和单片机开发有着重要的参考价值。
### STM32F10x系列学习培训资料关键知识点总结 #### 一、STM32F10x系列概述 **STM32F10x**是基于ARM Cortex-M3内核的32位微控制器系列,具备高性能、低功耗和高集成度的特点。该系列控制器广泛应用于各种工业控制...
5. **bxcan** - 可能指的是STM32的内置CAN外设,例如STM32的灵活CAN(FlexCAN)模块。 6. **ArduinoC** - 可能是指使用Arduino语法来编写C/C++代码。 在“Arduino-STM32-CAN-master”这个压缩包文件中,我们可以...
2. 学习STM32F107VCT6的CAN模块的特性,掌握其硬件设计、如何在硬件层面上实现数据的发送和接收。 3. 掌握使用MDK开发环境进行bxCAN模块的编程,包括初始化配置、数据发送和接收、中断和回调函数处理等。 4. 探索...
STM32F107VCT6是一款基于ARM Cortex-M3内核的微控制器,由意法半导体...通过阅读提供的"STM32F107VCT6平台下的bxCAN总线技术研究.pdf"文件,可以进一步学习和掌握这些知识点,为项目开发打下坚实基础。
- STM32 bxCAN简介:概述了STM32的CAN通信功能。 - 软件程序设计:提供了配置CAN通信的具体步骤。 - **DS18B20实验**:使用DS18B20温度传感器进行温度测量。 - DS18B20简介:介绍了这种单线温度传感器的特点。 -...
文档详细介绍了STM32微控制器中bxCAN的特性、架构和主要寄存器,以及如何通过ST库函数实现CAN通信。此外,文章还提供了关于CAN总线协议层的深入剖析,包括帧的种类、位填充、错误通知和节点错误状态等内容。 对于...
### STM32 CAN应用系统设计知识点详解 #### 1. CAN总线的特点 - **多主方式**: CAN网络采用多主方式工作,网络中的任何节点都可以随时向其他节点发送...这对于学习和掌握基于STM32的CAN通信技术具有重要的参考价值。
µC/GUI是一个用于嵌入式系统的图形用户界面库,实验二中通过将µC/GUI移植到STM32F103处理器并演示了一个动画显示的实例,让读者学习如何在µC/OS-Ⅱ系统下开发图形用户界面。 3. STM32处理器RTC模块的使用 STM32...
本文深入研究了【GY8508 USB接口CAN总线适配器】和【STM32F107VCT bxCAN总线接口】的软件设计方法。GY8508是一款能将USB接口转换为CAN总线通信的设备,它可以方便地将PC设备接入CAN网络。STM32F107VCT是一款基于ARM ...
在STM32系列微控制器中,bxCAN(Basic Extended CAN)控制器提供了多个可配置的过滤器组,这些过滤器组能够让接收节点只关注所需的报文,大大减轻了CPU的负担。过滤器组由两个32位寄存器组成(CAN_FxR0和CAN_FxR1)...