做关于车的网站好长沙网站制作平台
news/
2025/9/22 19:29:51/
文章来源:
做关于车的网站好,长沙网站制作平台,网站建设技术大全,你知道吗目录
一、bxCan简介
二、bxCAN总体描述
2.1概述 2.2CAN框图 三、bxCA的工作模式
3.1初始化模式
3.2正常模式
3.3睡眠模式#xff08;低功耗#xff09;
四、测试模式
4.1静默模式 4.2环回模式 五、bxCAN功能描述
5.1 发送处理
编辑
5.2接收管理
5.2.1 标识符过…目录
一、bxCan简介
二、bxCAN总体描述
2.1概述 2.2CAN框图 三、bxCA的工作模式
3.1初始化模式
3.2正常模式
3.3睡眠模式低功耗
四、测试模式
4.1静默模式 4.2环回模式 五、bxCAN功能描述
5.1 发送处理
编辑
5.2接收管理
5.2.1 标识符过滤
5.2.2 过滤器匹配序号与优先级规则
5.2.3 STM32寻址范围
5.2.3SRAM
六、位时序描述
6.1CAN标准帧格式
6.2发送与接收的工作流程
七、bxCAN中断 八、CAN自回环
一、bxCan简介 波特率最高可达1兆位/秒3个发送邮箱发送报文的优先级特性可软件配置3级深度的2个接收FIFO可变的过滤器组 ─ 在互联型产品中CAN1和CAN2分享28个过滤器组 ─ 其它STM32F103xx系列产品中有14个过滤器组
双CAN ● CAN1是主bxCAN它负责管理在从bxCAN和512字节的SRAM存储器之间的通信 ● CAN2是从bxCAN它不能直接访问SRAM存储器 使用差分信号进行数据传输CAN_H和CAN_L的电位差显性电平为逻辑0隐形电平为逻辑1。 CAN总线以“帧”形式进行通信分为数据帧、遥控帧、错误帧、过载帧、间隔帧。 数据帧分为标准帧和扩展帧。一帧可以发送0-8个字节数据0~64bit。 帧起始—仲裁段(ID)—控制段—数据段—CRC(检查帧的传输错误段)—ACK(表示确认正常接收的段)—帧结束 应答位ACK用来表示节点已经收到有效的帧。
任何节点如果准确无误地接收到帧则要向总线上发送显性位该显性位将掩盖发送节点输出的隐性位使总线上表现为显性。
如果发送节点检测应答位为隐性那么说明没有节点收到有效帧。 发送报文 二、bxCAN总体描述
2.1概述 CAN空闲时最开始发送消息的单元获得发送权多个单元同时进行发送时从仲裁段报文ID的第1位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐性电平的单元失去对总线的占有权变为接收竞争失败的单元会自动检测总线的空闲。 当有效报文通过过滤器就会存放在FIFO,我们就可以在FIFO中读取报文了。有28个过滤组用于筛选有效报文 有效报文是指数据帧直到EDF段最后一位都没有错误且通过滤波器组对标识符进行过滤。 CAN网络拓扑结构多主控线性拓扑结构在CAN总线上每个节点都有发送消息的能力而消息的发送不必遵从任何预先设定的时序通信是事件驱动的只有当新的消息传递时CAN总线才能处于忙碌状态这使得节点接入总线速度非常快CAN总线理论上最高传输速率为1Mbps对于异步事件反应迅速基于对ms级别的实时应用没有任何问题。 bxCAN模块可以完全自动地接收和发送CAN报文且完全支持标准标识符(11位)和扩展标识符(29位)。 共有3个发送邮箱供软件来发送报文。发送调度器根据优先级决定哪个邮箱的报文先被发送。 在互联型产品中bxCAN提供28个位宽可变/可配置的标识符过滤器组软件通过对它们编程从而在引脚收到的报文中选择它需要的报文而把其它报文丢弃掉。在其它STM32F103xx系列产品中有14个位宽可变/可配置的标识符过滤器组。 共有2个接收FIFO每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理。
什么是FIFO FIFO是英文First In First Out 的缩写是一种先进先出的数据缓存器他与普通存储器的区别是没有外部读写地址线这样使用起来非常简单但缺点就是只能顺序写入数据顺序的读出数据其数据地址由内部读写指针自动加1完成不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。 所以 CAN的寻址机制不同于其他类型的总线CAN总线不设定节点的地址而是通过消息的标识符来区别消息。 2.2CAN框图 邮箱是软件和硬件之间传递报文的接口。邮箱包含了所有跟报文有关的信息标识符、数据、控制、状态和时间戳信息。 软件需要在一个空的发送邮箱中把待发送报文的各种信息设置好(然后再发出发送的请求)。发送的状态可通过查询CAN_TSR寄存器获知。 接收邮箱(FIFO) 在接收到一个报文后软件就可以访问接收FIFO的输出邮箱来读取它。一旦软件处理了报文(如把它读出来)软件就应该对CAN_RFxR寄存器的RFOM位进行置’1’来释放该报文以便为后面收到的报文留出存储空间。过滤器匹配序号存放在CAN_RDTxR寄存器的FMI域中。16位的时间戳存放在CAN_RDTxR寄存器的TIME[15:0]域中。 三、bxCA的工作模式 bxCAN有3个主要的工作模式初始化、正常和睡眠模式。在硬件复位后bxCAN工作在睡眠模式以节省电能同时CANTX引脚的内部上拉电阻被激活。 3.1初始化模式 当bxCAN处于初始化模式时禁止报文的接收和发送并且CANTX引脚输出隐性位(高电平)。初始化模式的进入不会改变配置寄存器。在对bxCAN的过滤器组(模式、位宽、FIFO关联、激活和过滤器值)进行初始化前软件要对CAN_FMR寄存器的FINIT位设置’1’。对过滤器的初始化可以在非初始化模式下进行。
3.2正常模式 在初始化完成后软件应该让硬件进入正常模式以便正常接收和发送报文。软件可以通过对CAN_MCR寄存器的INRQ位清’0’来请求从初始化模式进入正常模式然后要等待硬件对CAN_MSR寄存器的INAK位置’1’的确认。在跟CAN总线取得同步即在CANRX引脚上监测到11个连续的隐性位(等效于总线空闲)后bxCAN才能正常接收和发送报文。
3.3睡眠模式低功耗 bxCAN可工作在低功耗的睡眠模式。软件通过对CAN_MCR寄存器的SLEEP位置’1’来请求进入这一模式。在该模式下bxCAN的时钟停止了但软件仍然可以访问邮箱寄存器。 CAN主状态寄存器CAN_MSR 四、测试模式
4.1静默模式 在静默模式下bxCAN可以正常地接收数据帧和远程帧但只能发出隐性位而不能真正发送报文。如果bxCAN需要发出显性位(确认位、过载标志、主动错误标志)那么这样的显性位在内部被接回来从而可以被CAN内核检测到同时CAN总线不会受到影响而仍然维持在隐性位状态。因此静默模式通常用于分析CAN总线的活动而不会对总线造成影响显性位(确认位、错误帧)不会真正发送到总线上。 4.2环回模式 通过对CAN_BTR寄存器的LBKM位置’1’来选择环回模式。在环回模式下bxCAN把发送的报文当作接收的报文并保存(如果可以通过接收过滤)在接收邮箱里。 void can_loopback_init(void){rcu_periph_clock_enable(RCU_CAN0);/* 初始化can0的通信属性 */can_parameter_struct can_parameter;can_struct_para_init(CAN_INIT_STRUCT, can_parameter); // 将can_parameter设置为默认值can_parameter.working_mode CAN_LOOPBACK_MODE;can_parameter.prescaler 48;can_init(CAN0, can_parameter);can_filter_parameter_struct can_filter;can_struct_para_init(CAN_FILTER_STRUCT, can_filter);can_filter.filter_enable ENABLE;can_filter.filter_fifo_number CAN_FIFO1;can_filter_init(can_filter);
} 五、bxCAN功能描述
5.1 发送处理 发送报文的流程为应用程序选择1个空置的发送邮箱设置标识符数据长度和待发送数据
/* 发送数据 */can_trasnmit_message_struct transmit_message;can_struct_para_init(CAN_TX_MESSAGE_STRUCT, transmit_message);transmit_message.tx_sfid 0x11;transmit_message.tx_dlen 2;transmit_message.tx_data[0] 0xAB;transmit_message.tx_data[1] 0xCD;transmit_message.tx_ff CAN_FF_STANDARD;transmit_mailbox_number can_message_transmit(CAN0, transmit_message); 然后对CAN_TIxR寄存器的TXRQ位置’1’来请求发送。TXRQ位置’1’后邮箱就不再是空邮箱而一旦邮箱不再为空置软件对邮箱寄存器就不再有写的权限。 TXRQ位置1后邮箱马上进入挂号状态并等待成为最高优先级的邮箱。 一旦邮箱成为最高优先级的邮箱其状态就变为预定发送状态。一旦CAN总线进入空闲状态预定发送邮箱中的报文就马上被发送(进入发送状态)。一旦邮箱中的报文被成功发送后它马上变为空置邮箱硬件相应地对CAN_TSR寄存器的RQCP和TXOK位置1来表明一次成功发送。
发送优先级 1. 由标识符决定 当有超过1个发送邮箱在挂号时发送顺序由邮箱中报文的标识符决定。根据CAN协议标识符数值最低的报文具有最高的优先级。如果标识符的值相等那么邮箱号小的报文先被发送。
2. 由发送请求次序决定 通过对CAN_MCR寄存器的TXFP位置’1’可以把发送邮箱配置为发送FIFO。在该模式下发送的优先级由发送请求次序决定。
一文读懂CAN系统架构和帧结构 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/642685125
冲突检测节点在发送数据时要不停的检测发送的数据确定是否与其他节点数据发送冲突如果有冲突则保证优先级高的报文先发送。非破坏性仲裁机制通过ID仲裁ID数值越小报文优先级越高。 发送低优先级报文的节点退出仲裁后在下次总线空闲时自动重发报文。 高优先级的报文不能中断低优先级报文的发送。 5.2接收管理 接收到的报文被存储在3级邮箱深度的FIFO中。FIFO完全由硬件来管理从而节省了CPU的处理负荷简化了软件并保证了数据的一致性。应用程序只能通过读取FIFO输出邮箱来读取FIFO中最先收到的报文。 有效报文 根据CAN协议当报文被正确接收(直到EOF域的最后一位都没有错误)且通过了标识符过滤那么该报文被认为是有效报文。 FIFO从空状态开始在接收到第一个有效的报文后FIFO状态变为挂号_1(pending_1)如果在释放邮箱的同时又收到了一个有效的报文那么FIFO仍然保留在挂号_1状态软件可以读取FIFO输出邮箱来读出新收到的报文。如果应用程序不释放邮箱在接收到下一个有效的报文后FIFO状态变为挂号_2(pending_2)重复上面的过程第三个有效的报文把FIFO变为挂号_3状态(FMP[1:0]11b)。此时软件必须对RFOM位设置1来释放邮箱以便FIFO可以有空间来存放下一个有效的报文否则下一个有效的报文到来时就会导致一个报文的丢失。 5.2.1 标识符过滤 在CAN协议里报文的标识符不代表节点的地址而是跟报文的内容相关的。因此发送者乙广播的形式把报文发送给所有的接收者。节点在接收报文时根据标识符的值决定软件是否需要该报文如果需要就拷贝到SRAM里如果不需要报文就被丢弃且无需软件的干预。 为满足这一需求在互联型产品中bxCAN控制器为应用程序提供了28个位宽可变的、可配置的过滤器组(27~0)在其它产品中bxCAN控制器为应用程序提供了14个位宽可变的、可配置的过滤器组(13~0)以便只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销否则就必须由软件过滤从而占用一定的CPU开销。每个过滤器组x由2个32位寄存器CAN_FxR0和CAN_FxR1组成。 可变的位宽 每个过滤器组的位宽都可以独立配置以满足应用程序的不同需求。根据位宽的不同每个过滤器组可提供 ● 1个32位过滤器包括STDID[10:0]、EXTID[17:0]、IDE和RTR位 ● 2个16位过滤器包括STDID[10:0]、IDE、RTR和EXTID[17:15]位 通过CAN_FMR的FBMx位可以配置对应的屏蔽/标识符寄存器的标识符列表模式或屏蔽位模式。 为了过滤出一组标识符应该设置过滤器组工作在屏蔽位模式。 为了过滤出一个标识符应该设置过滤器组工作在标识符列表模式。 应用程序不用的过滤器组应该保持在禁用状态。 过滤器组中的每个过滤器都被编号为(叫做过滤器号)从0开始到某个最大数值取决于过滤器组的模式和位宽的设置。 节点通过控制器中过滤码Filter Code和掩码Mask Code再检验总线上消息的标识符来判断是否接收该消息Message Filtering。
对于掩码“1”表示该位与本节点相关“0”表示该位与本节点不相关。举例如下
例1仅接收消息标识符为00001567十六进制的帧设置过滤码为00001567
设置掩码为1FFFFFFF
节点检测消息的标识符的所有位29位如果标识符为00001567接收否则舍弃。例2接收消息标识符为00001567 到 0000156F 的帧设置过滤码为00001560
设置掩码为1FFFFFF0
节点检测消息的标识符的高25位最低的4位则不care。如果标识符最高25位相同则接收否则舍弃。例3接收消息标识符为00001560 到 00001567 的帧设置过滤码为00001560
设置掩码为1FFFFFF8
节点检测消息的标识符的高26位最低的3位则不care。如果标识符最高26位相同则接收否则舍弃。例4接收所有消息帧帧设置过滤码为0
设置掩码为0
节点接收总线上所有消息。 can_filter_parameter_struct can_filter;can_struct_para_init(CAN_FILTER_STRUCT, can_filter);can_filter.filter_enable ENABLE;can_filter.filter_fifo_number CAN_FIFO1;can_filter_init(can_filter);
5.2.2 过滤器匹配序号与优先级规则 一旦收到的报文被存入FIFO就可被应用程序访问。通常情况下报文中的数据被拷贝到SRAM中为了把数据拷贝到合适的位置应用程序需要根据报文的标识符来辨别不同的数据。bxCAN提供了过滤器匹配序号以简化这一辨别过程。 根据过滤器优先级规则过滤器匹配序号和报文一起被存入邮箱中。因此每个收到的报文都有与它相关联的过滤器匹配序号。 过滤器优先级规则 根据过滤器的不同配置有可能一个报文标识符能通过多个过滤器的过滤在这种情况下存放在接收邮箱中的过滤器匹配序号根据下列优先级规则来确定● 位宽为32位的过滤器优先级高于位宽为16位的过滤器 ● 对于位宽相同的过滤器标识符列表模式的优先级高于屏蔽位模式 ● 位宽和模式都相同的过滤器优先级由过滤器号决定过滤器号小的优先级高 can_filter_parameter_struct can_filter;can_struct_para_init(CAN_FILTER_STRUCT, can_filter);can_filter.filter_enable ENABLE;can_filter.filter_fifo_number CAN_FIFO1;can_filter_init(can_filter); 5.2.3 STM32寻址范围
STM32深入系列01——内存简述Flash和SRAM_stm32内存-CSDN博客https://blog.csdn.net/weixin_46253745/article/details/130032941 STM32是一个32位的单片机因此它有32根地址线每个地址线有两种状态导通 或 不导通。 单片机内存的地址访问存储单元是按照字节编址的。按照字节编址也就是说访问一个地址上存储的数据得到的是一个字节的数据。
根据上述两条可以得出结论 STM32的寻址内存大小为2^32字节 4G字节 STM32的寻址范围为0X0000 0000 ~ 0XFFFF FFFF 5.2.3SRAM 其中对于STM32而言SRAM就是内存Flash就是硬盘。对于STM32103C8T6它有64K字节的Flash、20K字节的RAM。 RAM读写速度快、掉电数据丢失类比于电脑内存的作用。ROM读写速度相对慢、掉电数据仍在类比于电脑硬盘的作用。 stm32f1c03c8t6它的内置ROM起始地址为0X0800 0000大小为0X10000也就是FLASH的大小为 0X10000个字节 65536个字节 64k个字节 64kBytes。 它的内置RAM起始地址为0X2000 0000大小为0X5000也就是RAM的大小为 0X5000个字节 20480个字节 20k个字节 20kBytes。 MCU——SRAM和Flash-CSDN博客https://blog.csdn.net/qq_36749906/article/details/114867475 由于SRAM用于存储程序运行过程当中产生的临时数据因此在程序中定义大批量数据时候必须考虑到SRAM的容量大小特别是实时数据采集时一旦需要采集大量数据考虑到SRAM容量时需要分批采集。 虽然现在单片机的容量一般都足够但在极端情况下还是会出现由于程序过大超过Flash容量的报错。这时候需要对所使用的单片机Flash容量了解详细若程序过大则选择深度优化编译或者删减程序。
分类SRAMFlash容量容量小容量大读写速度快慢掉电易失掉电易失掉电不易失价格高昂低廉应用场合程序运行中数据变量的运算存储代码或者常量数据
六、位时序描述 CAN空闲时最开始发送消息的单元获得发送权多个单元同时进行发送时从仲裁段报文ID的第1位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐性电平的单元失去对总线的占有权变为接收竞争失败的单元会自动检测总线的空闲。
6.1CAN标准帧格式
CAN通信标准帧和扩展帧全网最透彻解答_can标准帧和扩展帧的区别-CSDN博客https://blog.csdn.net/weixin_37787043/article/details/81533908 CAN 标准帧信息为11个字节(3 8)包括两部分信息和数据部分。前3个字节为信息部分。
字节1为帧信息。 第7位FF表示帧格式在标准帧中FF0显性电平 第6位RTR表示帧的类型RTR0表示为数据帧RTR1表示为远程帧 DLC表示在数据帧时实际的数据长度 字节2、3为报文识别码11位有效。 字节411为数据帧的实际数据远程帧时无效。 关于CAN通讯中的远程帧遥控帧 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/649366078#:~:text%E6%95%B0%E6%8D%AE%E5%B8%A7%E5%92%8C%E8%BF%9C%E7%A8%8B%E5%B8%A7%E6%98%AF%E4%BB%A5RTR%E4%BD%8D%E6%9D%A5%E5%8C%BA%E5%88%86%E7%9A%84%E3%80%82%20%E6%95%B0%E6%8D%AE%E5%B8%A7%E7%9A%84RTR%E4%BD%8D%E4%B8%BA%E6%98%BE%E6%80%A7%EF%BC%8C%E8%BF%9C%E7%A8%8B%E5%B8%A7%E7%9A%84RTR%E4%BD%8D%E5%88%99%E4%B8%BA%E9%9A%90%E6%80%A7%E3%80%82,%E5%9B%A0%E6%AD%A4ID%E7%9B%B8%E5%90%8C%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E6%95%B0%E6%8D%AE%E5%B8%A7%E5%85%B7%E4%BD%93%E6%9B%B4%E9%AB%98%E7%9A%84%E4%BC%98%E5%85%88%E7%BA%A7%E3%80%82%20%E7%94%B1%E4%BA%8E%E7%AC%AC%E4%B8%80%E7%A7%8D%E6%96%B9%E6%B3%95%E5%8F%AF%E8%83%BD%E9%80%A0%E6%88%90%E6%80%BB%E7%BA%BF%E5%86%B2%E7%AA%81%EF%BC%8C%E7%8E%B0%E5%9C%A8%E6%94%B9%E4%B8%BA%E8%8A%82%E7%82%B9A%E5%8F%91%E9%80%81%E8%BF%9C%E7%A8%8B%E5%B8%A7%E8%AF%B7%E6%B1%82%E8%8A%82%E7%82%B9B%E7%9A%84%E4%BF%A1%E6%81%AF%EF%BC%8C%E8%BF%9C%E7%A8%8B%E5%B8%A7%E7%9A%84ID%E5%8F%B7%E8%87%AA%E7%84%B6%E4%B8%BAB_ID%20%E3%80%82 我们知道CAN总线是基于非破坏性的仲裁该仲裁机制是一种既不会造成已发送数据的延迟也不会破坏已经发送的数据的仲裁机制其具体实施需要了解CAN协议帧结构线与机制等。其中线与机制简单说就是位与计算显性电平逻辑0会覆盖隐性电平逻辑1。当多个节点同时向总线发送消息时所发送消息的优先权高的那个节点获得总线的发送权简单来说仲裁段中ID号越小优先权越高。 为了总线访问安全在CAN网络系统设计中每个节点必须用独属于自己的ID号一个或者多个具体根据整个CAN网络系统设计需求分配往外发送帧。假设系统中有节点A和BA发送信息的ID为A_ID1B发送信息时是用的ID为B_ID2。A为ECMB为车速采集设备。一般来说节点B主动发送车速信息到网络上节点A接收B发送的信息。但是如果某一时刻节点A急需车速信息而节点B可能还需要过一定时间才能发送信息这怎么办呢节点A可以通过2种方法请求快速获得的车速信息
设置两个ID: 1、A发送一帧特殊的数据帧ID号为B的ID号(B_ID),数据域内容“请求车速信息”。前提是B要设置为能接收B_ID的帧。则A发送后被B接收到B再以B_ID发送车速信息帧A接收到所需的信息。这看似完美的过程其实存在可能的总线冲突如果A发送帧的同时B也正要往总线上发送车速信息帧则造成总线冲突。当然也可以采用别的方法来解决此问题如A发送请求温度帧的ID号改成别的当然B也要设置成可以接收该ID的帧但这样就会占用了一个ID号。总的来说不推荐使用这种方法。 可以看出除缺少数据场以外远程帧与数据帧布局相同。数据帧和远程帧是以RTR位来区分的。数据帧的RTR位为显性远程帧的RTR位则为隐性。因此ID相同的情况下数据帧具体更高的优先级。 由于第一种方法可能造成总线冲突现在改为节点A发送远程帧请求节点B的信息远程帧的ID号自然为B_ID 。由于CAN总线仲裁时数据帧发送的优先级高于远程帧即使A发送ID号为B_ID的远程帧同时B也主动发出信息也不会引起总线冲突。当节点B接收到远程帧后知道有其他节点在请求信息就马上往CAN总线上发送一帧车速信息帧即用B_ID作为ID号往CAN总线上发送车速信息帧这样节点A就能及时得到节点B的车速信息请求得到满足。
CAN总线的位时序与参数设置_can通讯位时序-CSDN博客https://blog.csdn.net/hans_yu/article/details/89400011 一文读懂CAN系统架构和帧结构 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/642685125 CAN总线的每个位Bit的周期 Tbit 1 / Baudrate。根据CAN规范每个位的时间内又可细分成4段为了实现位同步CAN协议把每一位的时序分解成下图所示的四段。这四段的长度加起来即为一个CAN数据位的长度。一个完整的位由8-25个Tq组成。 同步端SSSynchronization Segment
一个位的输出从同步段开始。若总线的跳变沿被包含在SS段的范围之内则表示节点与总线的时序同步。节点与总线同步时采样点采集到的总线电平即可被确定为该电平的电位。SS段的大小为1Tq.
传播段PTSPropagation Time Segment
用于补偿信号在网络和节点传播的物理延时时间是总线上输入比较器延时和输出驱动器延时总和的两倍。通常1-8Tq
相位缓冲段1PBS1 Phase Buffer Segment 1
主要用于补偿边沿阶段的误差其时间长度在重新同步时可以加长。初始大小1-8Tq.
相位缓冲段2PBS2Phase Buffer Segment 2
也是用于补偿边沿阶段的误差其时间长度在重新同步时可以缩短。初始大小2-8Tq. 波特率单位时间内1s传输的数据位公式1/位时间。举个栗子系统时钟频率36MHz预分频因子为4则CAN时钟频率9MHz则Tq1/9M。假设一个CAN位包含10个Tq则一个位周期T10Tq从而波特率为1/T0.9MHz. CAN控制器为了适应各种波特率对上面四个段的时间长度不是使用纳秒ns或微秒us来度量而是使用节拍来度量技术资料中将这个节拍称为时间量子Time quantum, Tq。例如500k的波特率每个Tbit是 2000ns如果分为 10 个节拍则每个 Tq 为 200ns。
6.2发送与接收的工作流程 发送节点在每个bit中主要完成发送和回检。接收节点在每个Bit中主要完成接收和同步。 传播段时长Tps 传播段PS占据的时间是信号在总线上来回传输的时间。 一次单向传输的延时Tdelay包括3个时间 发送节点从产生信号到发到总线的时间 Td1 信号在总线传输的时间Tbus 接收节点从总线获取信号的时间Td2。 按规范要求传播段的时间Tps应大于等于2倍Tdelay的时间即 Tps 2 * Tdelay 2 * (Td1 Tbus Td2)
为什么规定是两倍时间呢CAN总线是一种允许竞争并自行仲裁的协议。见上面工作流程图可知每个节点会回读自己发出的信号。假设极端情况下节点Node1在总线的一端发出了信号s1总线另一端的节点Node2在 Tdelay 时间之前由于尚未收到信号s1所以可能认为总线是空闲的那就可能往总线上发送信号s2。当然Node2刚发出s2总线上就产生了s1和s2的竞争而这个竞争的情况会又经过 Tdelay 的时间才被Node1感知到。所以两倍Tdelay的要求就是为了保证每个节点都能正确检测到总线上的竞争。
STM32 CPU的CAN与位时序相关的参数有4个 BRP (Baud rate prescaler)预分频值允许的范围是1 ~ 1024。 TS1 (Time segment 1), 允许的范围是1 ~ 16。这个参数设置传播段Tps与相位缓冲段1Tpbs1相加的节拍数。 TS2 (Time segement 2), 允许的范围是1 ~ 8。这个参数设置相位缓冲段2Tpbs2的节拍数。 SJW(Resynchronization jump width), 重同步宽度允许的范围是1 ~ 4。用于设置Tpbs1和Tpbs2可以调整的节拍数。
七、bxCAN中断 bxCAN占用4个专用的中断向量。通过设置CAN中断允许寄存器(CAN_IER)每个中断源都可以单独允许和禁用。 发送中断可由下列事件产生 ─ 发送邮箱0变为空CAN_TSR寄存器的RQCP0位被置’1’。 ─ 发送邮箱1变为空CAN_TSR寄存器的RQCP1位被置’1’。 ─ 发送邮箱2变为空CAN_TSR寄存器的RQCP2位被置’1’。 ● FIFO0中断可由下列事件产生 ─ FIFO0接收到一个新报文CAN_RF0R寄存器的FMP0位不再是’00’。 ─ FIFO0变为满的情况CAN_RF0R寄存器的FULL0位被置’1’。 ─ FIFO0发生溢出的情况CAN_RF0R寄存器的FOVR0位被置’1’。 ● FIFO1中断可由下列事件产生 ─ FIFO1接收到一个新报文CAN_RF1R寄存器的FMP1位不再是’00’。 ─ FIFO1变为满的情况CAN_RF1R寄存器的FULL1位被置’1’。 ─ FIFO1发生溢出的情况CAN_RF1R寄存器的FOVR1位被置’1’。 ● 错误和状态变化中断可由下列事件产生
─ 出错情况关于出错情况的详细信息请参考CAN错误状态寄存器(CAN_ESR)。 ─ 唤醒情况在CAN接收引脚上监视到帧起始位(SOF)。 ─ CAN进入睡眠模式。 八、CAN自回环 在回环通信模式下由CAN 总线控制器发送的数据可以被自己接收并存入接收FIFO同时这些发送数据也送至CAN 网络。将CAN_BT 寄存器中的LCMOD 位置1使CAN 总线控制器 进入回环通信模式将其清0 可以退出回环通信模式。 回环通信模式通常用来进行CAN 通信自测。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910129.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!