bxCAN总线的工作模式和测试模式(STM32F4xx)

概述

       本文主要介绍STM32F4XX的bxCAN知识,包括bxCAN的概念,各种工作模式下特性,如何配置各类工作模式等内容,还介绍了bxCAN的测试模式,bxCAN测试模式有3种工作类型,每种类型有什么特性,以及如何配置的等内容。

1 认识bxCAN

1.1 bxCAN概念

         基本扩展 CAN 外设又称 bxCAN,可与 CAN 网络进行交互。该外设支持 2.0A 和 B 版本的CAN 协议,旨在以最少的 CPU 负载高效管理大量的传入消息,并可按需要的优先级实现消息发送。在攸关安全性的应用中, CAN 控制器提供所有必要的硬件功能来支持 CAN 时间触发通信方案。

1.2 bxCAN 主要特性

● 支持 2.0 A 及 2.0 B Active 版本 CAN 协议

● 比特率高达 1 Mb/s

● 支持时间触发通信方案

发送

● 三个发送邮箱

● 可配置的发送优先级

● SOF 发送时间戳

接收

● 两个具有三级深度的接收 FIFO

● 可调整的筛选器组: — CAN1 和 CAN2 之间共享 28 个筛选器组

● 标识符列表功能

● 可配置的 FIFO 上溢

● SOF 接收时间戳 时间触发通信方案

● 禁止自动重发送模式

● 16 位自由运行定时器

● 在最后两个数据字节发送时间戳

管理

● 可屏蔽中断

● 在唯一地址空间通过软件实现高效的邮箱映射

双 CAN

● CAN1:主 bxCAN,用于管理 bxCAN 与 512 字节 SRAM 存储器之间的通信。

● CAN2:从 bxCAN,无法直接访问 SRAM 存储器。

● 两个 bxCAN 单元共享 512 字节 SRAM 存储器

2 认识bxCAN工作模式

bxCAN 有三种主要的工作模式: 初始化、 正常和睡眠。

2.1 初始化模式

初始化模式的要点如下:

1)当硬件处于初始化模式时,可以进行软件初始化

2)如何进入初始化模式:

软件将 CAN_MCR 寄存器的 INRQ 位置 1,并等待硬件通过将 CAN_MCR 寄存器的 INAK 位置 1 来确认请求。

3)退出初始化模式:

软件将 INQR 位清零。一旦硬件将 INAK 位清零, bxCAN 即退出初始化模式。

4)初始化模式的特点:

  • 所有从 CAN 总线传入和传出的消息都将停止,并且 CAN 总线输出 CANTX的状态为隐性(高)

  • 不会更改任何配置寄存器

  • 为初始化与 CAN 筛选器组相关的寄存器( 模式、尺度、 FIFO 分配、激活和筛选器值),软件必须将 FINIT 位 (CAN_FMR) 置 1。

  • 筛选器的初始化也可以在初始化模式之外进行。

2.2 正常模式

正常模式的要点如下:

1)NAK = 0 和 SLAK = 0,则 bxCAN 将处于正常模式

2)进入正常模式之前, bxCAN 必须始终在 CAN 总线上实现同步。为了进行同步, bxCAN 将等待 CAN 总线空闲(即,已监测到CANRX 上的 11 个隐性位)。

3)初始化完成,软件必须向硬件请求进入正常模式,这样才能在 CAN 总线上进行同步,并开始接收和发送。

4)正常模式的请求可通过将 CAN_MCR 寄存器的 INRQ 位清零来发出。

5) bxCAN 进入正常模式,并与 CAN 总线上的数据传输实现同步后,即可参与总线活动。

6)要实现数据传输同步,需要等待出现一个由 11 个连续隐性位(总线空闲状态)组成的序列。硬件通过将 CAN_MSR 寄存器的 INAK 位清零,来确认切换到正常模式。

7)筛选器值的初始化与初始化模式无关,但必须要在筛选器处于未激活状态(相应 FACTx 位清零)时进行。筛选器尺度和模式配置必须在进入正常模式之前完成。

2.3 睡眠模式

睡眠模式的要点如下:

1) bxCAN 进入睡眠模式以降低功耗,同时 CANTX 上的内部上拉电阻激活。

2) 软件将 CAN_MCR 寄存器的 INRQ 或SLEEP 位置 1,以请求 bxCAN 进入初始化或睡眠模式。

3)一旦进入该模式, bxCAN 即将CAN_MSR 寄存器的 INAK 或 SLAK 位置 1,以确认该模式,同时禁止内部上拉电阻。

4)配置睡眠模式方法

软件通过将 CAN_MCR 寄存器的 SLEEP 位置 1 而发出请求后,即可进入该模式。

5)配置睡眠模式的特点

  • bxCAN 时钟停止,但软件仍可访问 bxCAN 邮箱。

  • 在 bxCAN 处于睡眠模式时,如果软件通过将 INRQ 位置 1 来请求进入初始化模式,则必须同时将 SLEEP 位清零。

3 认识bxCAN测试模式

配置测试模式方法:

1)CAN_BTR 寄存器中的 SILMLBKM 位来选择测试模式,此时 bxCAN必须处于初始化模式

2)注意点:选择测试模式后,必须复位 CAN_MCR 寄存器中的 INRQ 位才能进入正常模式。

CAN 位时序寄存器 (CAN_BTR)

位 31 SILM: 静默模式(调试) (Silent mode (debug)) 0:正常工作 1:静默模式

位 30 LBKM: 环回模式(调试) (Loop back mode (debug)) 0:禁止环回模式 1:使能环回模式

CAN 主控制寄存器 (CAN_MCR)

位 0 INRQ: 初始化请求 (Initialization request)

       软件通过将此位清零,来将硬件切换到正常模式。一旦在 Rx 信号上监测到连续 11 个隐性位, CAN 硬件即完成同步并准备进行发送和接收。硬件通过将 CAN_MSR 寄存器的 INAK位清零来指示此事件。软件通过将此位置 1 来请求 CAN 硬件进入初始化模式。一旦软件将 INRQ 位置 1, CAN 硬件将等待当前 CAN 活动(发送或接收)结束,然后进入初始化模式。硬件通过将 CAN_MSR寄存器的 INAK 位置 1 来指示此事件。

3.1 静默模式

3.1.1 配置静默模式方法

CAN 位时序寄存器 (CAN_BTR)

3.1.2 静默模式特点

1)bxCAN 可以接收有效数据帧和有效遥控帧,但仅在 CAN 总线上发送隐性位,并且无法启动发送。

2)如果 bxCAN 必须发送一个显性位( ACK 位、溢出标志、活动错误标志),该位将在内部被改道发送,以便 CAN 内核可以监视该显性位,但 CAN 总线可以保持隐性状态。

3)静默模式可用于分析 CAN 总线上的流量,同时又不会因发送显性位(确认位、错误帧)对其造成影响

3. 2 环回模式

3.2.1 配置环回模式方法

可以通过将 CAN_BTR 寄存器的 LBKM 位置 1,将 bxCAN 置于环回模式。

CAN 位时序寄存器 (CAN_BTR)

3.2.2 环回模式特点

1)在环回模式下,bxCAN 将其自身发送的消息作为接收的消息来处理并存储(如果这些消息通过了验收筛选)在接收邮箱中。

2)该模式为自检功能提供。为了不受外部事件的影响, CAN 内核在环回模式下将忽略确认错误(在数据/远程帧的确认时隙不对显性位采样)。

3)在此模式下, bxCAN 将执行从发送输出到接收输入的内部反馈。 bxCAN 将忽略 CANRX 输入引脚的实际值。从 CANTX 引脚可以监视发送的消息

3.3 环回与静默组合模式

3.3.1 配置环回与静默组合模式

可以通过将 CAN_BTR 寄存器的 LBKM 和 SILM 位置 1,将环回模式和静默模式组合起来。

3.3.2 环回与静默组合模式特点

该模式可用于“热自检”,也就是说, bxCAN 可以像在环回模式下一样进行检测,同时又不会影响与 CANTX 和 CANRX 引脚相连接的运行中的 CAN 系统。在此模式下, CANRX 引脚与 bxCAN 断开连接, CANTX 引脚则保持隐性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/426446.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大厂AI课学习笔记NO.66】TensorFlow

TensorFlow 这个框架,实在是太有名了,最近周红衣都在大力的宣传和讲解。 他说的是对的,人工智能,就是大力出奇迹,就是大量的算力,大量的数据,加上模型的加持,实现的智能感觉。 Goog…

【字符串】马拉车(Manacher)算法

本篇文章参考:比较易懂的 Manacher(马拉车)算法配图详解 马拉车算法可以求出一个字符串中的最长回文子串,时间复杂度 O ( n ) O(n) O(n) 因为字符串长度的奇偶性,回文子串的中心可能是一个字符,也可能是…

webpack源码分析——tapable中before和stage如何改变执行顺序

一、Before用法 Before 用法 before 属性的值可以传入一个数组或者字符串,值为注册事件对象时的名称,它可以修改当前事件函数在传入的事件名称对应的函数之前进行执行。 示例 let hook new SyncWaterfallHook([arg1]);hook.tap(tap1, (arg)> {console.log(tap1…

安装 node 错误的配置环境变量之后使用 npm 报错

安装 node 错误的配置环境变量之后使用 npm 报错 node:internal/modules/cjs/loader:1147 throw err; ^ Error: Cannot find module ‘F:\ACodeTools\Node\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js’ at Module._resolveFilename (node:internal/modules/cjs/loa…

Git推送本地仓库至阿里云仓库

Git推送本地仓库至阿里云仓库 1.安装Git 参考Git安装详解 2.生成 SSH 密钥 基于RSA算法SSH 密钥 1.管理员权限运行Git Bash 2.输入生成密钥指令点击回车,选择 SSH 密钥生成路径。 $ ssh-keygen -t rsa -C "2267521563qq.com"3.以 RSA算法为例&…

TMGM官网平台联合英超豪门切尔西

TMGM官网平台联合英超豪门切尔西 TMGM澳洲总部客户经理 🌏:TMGM818 TMGM中国官网【TMGM558】TMGM联合英超豪门切尔西俱乐部深度合作,去年全球客户成交额突破4650亿美元,在泰国曼谷周杰伦演唱会唯一平台品牌赞助商,作为…

IOC中Bean的生命周期

生命周期的各个阶段: 可以分为三个阶段:产生-使用-销毁 又可以分四个阶段:四个阶段 实例化 ->属性注入->初始化 ->销毁 实例化后到使用的初始化过程: 属性赋值 ->处理各种Aware接口->实现BeanPostProcessor的b…

数据结构/C++:二叉搜索树

数据结构/C:二叉搜索树 概念模拟实现结构分析插入中序遍历查找删除析构函数拷贝构造赋值重载递归查找递归插入递归删除 总代码展示 概念 二叉搜索树(BST - Binary Search Tree)是一种特殊的二叉树,每个顶点最多可以有两个子节点。…

逆向案例四:360k静态和精灵数据动态AES解密,用js的方法

一、360K 网页链接:https://www.36kr.com/p/2672600261670407 页面中有静态的需要解密的内容,确定html包,确定方法 1.1方法步骤 在下方的搜索中输入decrypt(或者关键字window.initialState ,进入js文件 在AES.decrypt处打上断点&#xff0…

【Java项目介绍和界面搭建】拼图小游戏——键盘、鼠标事件

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

15-Linux部署HBase集群

Linux部署HBase集群 简介 HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。 和Redis一样,HBase是一款KeyValue型存储的数据库。 不过和Redis设计方向不同 Redis设计为少量数据,超快检索HBase设计为海量数据,快速检索 HB…

运行Python文件时出现‘utf-8’code can‘t decode byte 如何解决?(如图)

如图 亦或者出现“SyntaxError: Non-UTF-8 code starting with \xbb ” 出现这种问题往往是编码格式导致的,我们可以在py文件中的第一行加入以下代码: # codingutf-8或者 # codinggdk优先使用gbk编码 解释一下常用的两种编码格式: utf-…

供应链管理(SCM):界面设计全面扫盲,得供应链者得天下

大家伙,我是大千UI工场,专注UI分享和项目接单,本期带来供应链系统的设计分享,欢迎大家关注、互动交流。 一、什么是SCM SCM系统是供应链管理(Supply Chain Management)系统的缩写。供应链管理是指协调和管…

CSS列表属性

CSS列表属性 列表相关的属性&#xff0c;可以作用在 ul、ol、li 元素上。 代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>列表相关属性</title><style>ul {/* …

MySQL的一行数据是如何存储的?

目录 1.COMPACT 行格式长什么样&#xff1f; 例子1&#xff1a;用户设置了主键值&#xff0c;列都是not null的。(默认字符集是utf8mb4,在这种情况下&#xff0c;char(N)类型就不是定长的了&#xff09; 例子2&#xff1a;没有设置主键&#xff0c;也没有唯一索引&#xff0…

微信小程序-生命周期

页面生命周期 onLoad: 页面加载时触发的方法&#xff0c;在这个方法中可以进行页面初始化的操作&#xff0c;如获取数据、设置页面状态等。 onShow: 页面显示时触发的方法&#xff0c;在用户进入页面或从其他页面返回该页面时会调用此方法。可以在此方法中进行页面数据刷新、动…

浅谈马尔科夫链蒙特卡罗方法(MCMC)算法的理解

1.解决的问题 计算机怎么在任意给定的概率分布P上采样&#xff1f;首先可以想到把它拆成两步&#xff1a; &#xff08;1&#xff09;首先等概率的从采样区间里取一个待定样本x&#xff0c;并得到它的概率为p(x) &#xff08;2&#xff09;然后在均匀分布U[0,1]上取一个值&a…

基于主从模式的Reactor的仿muduo网络库

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

分布式系统中常用的缓存方案

1. 引言 随着互联网应用的发展和规模的不断扩大&#xff0c;分布式系统中的缓存成为了提升性能和扩展性的重要手段之一。本文将介绍几种在分布式系统中常用的缓存方案&#xff0c;包括分布式内存缓存、分布式键值存储、分布式对象存储和缓存网关等。 1.1 缓存在分布式系统中的…

数据结构c版(3)——排序算法

本章我们来学习一下数据结构的排序算法&#xff01; 目录 1.排序的概念及其运用 1.1排序的概念 1.2 常见的排序算法 2.常见排序算法的实现 2.1 插入排序 2.1.1基本思想&#xff1a; 2.1.2直接插入排序&#xff1a; 2.1.3 希尔排序( 缩小增量排序 ) 2.2 选择排序 2.2…