【雅特力AT32】 MCU CAN入门指南(超详细)

news2024/12/24 7:38:45

通信协议与接口知识参考文章:
【通信理论知识】数据传送的方式:串/并行;传输方向:单工、半/全双工;传输方式:同步/异步
【串口通信详解】USART/UART、RS232、RS485标准接口与协议特点解析
【同步串行通信接口】IIC(Inter-Integrated Circuit)通信总线协议详解
【通信总线协议】SPI串行外设接口通信详解
【CAN总线协议】CAN通信入门总览:常见协议优劣、CAN应用、协议组成与标准、传输原理的实现、仲裁机制、传输与时序初探
【CAN总线协议】CAN接收报文(协议层:帧的五个种类、仲裁机制、错误的种类、位填充与位时序、同步方法;)

进阶:
【通信模块】简单玩转WiFi模块(ESP32、ESP8266)
【通信模块】WiFi&Bluetooth简介与对比
【通信模块】LoRa与LoRaWAN简介
【通信协议】硬件通信协议速率对比

【雅特力AT32】 MCU CAN入门指南

目录

AT32 MCU CAN 介绍

  1. 整体功能介绍
  2. CAN 发送流程
    2.1 CAN 发送步骤
    2.2 标志位和操作位说明
  3. CAN 接收流程
    3.1 CAN 常用接收步骤
    3.2 用户不参与操作时硬件流程
    3.3 标志位和操作位说明
  4. 过滤器
    4.1 过滤器的位宽
    4.2 过滤器模式
  5. CAN 波特率及采样点计算
    5.1 波特率计算公式
    典例
    5.2 采样点计算公式
    典例
    5.3 波特率计算工具(AT32专用)

AT32 MCU CAN 介绍

主要介绍 AT32 CAN 的主要设计结构和使用,介绍了 AT32 CAN 的正常通信流程,包括发送流程、接收流程、报文过滤、波特率及采样点设置等。其他 AT32 CAN 相关设计,例如错误管理、中断管理等,请参考 RM 相关章节.

AT32 的 CAN 支持标准 CAN 协议 2.0A 和 2.0B,且在兼容标准 CAN 协议的基础上增加了一些功能和可配置选项。

CAN 2.0A 和 2.0B 差别:

前者仅支持 11bit ID,即只支持标准帧;后者支持 11bit/29bit ID,即支持标准帧和扩展帧。


1. 整体功能介绍

随着 CAN 网络节点和报文数量的增加,需要一个增强的过滤机制处理各种类型的报文,减少接收报文的处理时间,采用 FIFO 的方案,使得 CPU 可以长时间处理应用层任务而不会丢失报文。同时发送报文由硬件控制发送优先级顺序。

基于以上考虑,CAN 控制器提供 28 组位宽可配置的标识符过滤器组,2 个接收 FIFO,每个 FIFO 都可以存放 3 个完整的报文。共有 3 个发送邮箱,发送调度器决定发送优先级顺序。整个收发过程完全由硬件管理,无需占用 CPU 资源。

在这里插入图片描述
在这里插入图片描述


2. CAN 发送流程
2.1 CAN 发送步骤

用户使用时只需操作 1)~3),而 4)~7)由硬件自动完成,无需用户代码参与,不占用 CPU 资源。

1)程序选择 1 个空置的邮箱(发送邮箱空标志 TMxEF=1)
2)将需要发送的报文写入对应的空邮箱。报文内容包含: ID、帧类型、数据长度和发送数据等
3)请求发送:将 CAN_TMIx 的 TMSR 位置 1
4)邮箱挂号(等待成为最高优先级)
5)预定发送(等待总线空闲)
6)发送
7)邮箱空置
注:以上步骤 1)~7)只简单介绍正常发送流程,下图中还包含取消发送、发送失败、自动/不自动重传等情况,
	可参考 RM 文件报文发送一节,这里不再详述。
2.2 标志位和操作位说明

下图 10 中标志位和操作位说明如下:

TMxTCF:	请求完成标志位(发送/中止请求)
TMxTSF:	发送成功标志位
TMxEF:	发送邮箱空标志位
TMSR:	请求发送
TMxCT:	中止发送
PRSFEN:	禁止自动重传(PRSFEN =1 时,禁止自动重传;PRSFEN=0 时,自动重传直到发送成功)

在这里插入图片描述


3. CAN 接收流程
3.1 CAN 常用接收步骤

CAN 常用接收流程如下,即下图的**“空”和“挂号_1”两个状态间循环**:

1)FIFO 空
2)收到有效报文
3)进入“挂号_1”状态(FIFO 内有 1 条有效报文的状态)
4)读取有效报文:读取接收邮箱寄存器(CAN_RFIx,CAN_RFCx,CAN_RFDTLx,CAN_RFDTHx)。
5)释放邮箱:CAN_RFx 寄存器 RFxR 位置 1。
注:用户使用时只需操作 4)~5)。1)~3)由硬件自动完成,无需用户代码参与,不占用 CPU 资源。

有效报文

当报文被正确接收(直到 EOF 域的最后一位都没有错误),且通过了标识符过滤,那么该报文被认为是有效报文。过滤器相关介绍见下一节。

3.2 用户不参与操作时硬件流程

而如果接收过程中用户不参与操作(即不去读取有效报文和释放邮箱),硬件流程如下:

1)收到有效报文
2)进入“挂号_1”状态(FIFO 内有 1 条有效报文的状态)
3)收到有效报文
4)进入“挂号_2”状态(FIFO 内有 2 条有效报文的状态)
5)收到有效报文
6)进入“挂号_3”状态(FIFO 内有 3 条有效报文的状态)
7)收到有效报文
8)进入“溢出”状态(FIFO 内有 3 条有效报文,丢失了一条报文,溢出标志置起)
3.3 标志位和操作位说明

下图中标志位和操作位说明如下:

RFxMN:	FIFO 内有效报文数量(取值 0~3)
RFxOF:	溢出标志位
RFxR:	释放邮箱

在这里插入图片描述

4. 过滤器

在 CAN 协议里,报文的 ID 不代表节点的地址,而是跟报文的内容相关的。

因此,发送者以广播的形式把报文发送给所有的接收者。
节点在接收报文时,根据 ID 的值决定软件是否需要该报文;
如果需要,就存到接收 FIFO 里,用户可通过软件读取接收邮箱寄存器获取该报文;
如果不需要,报文就被丢弃且无需软件的干预。

为满足这一需求,AT32 CAN 控制器为应用程序提供了 28 个硬件过滤器组(AT32F435 系列有 28 个过滤器组,0~27;但 AT32F403A 等系列只有 14 个过滤器组,0~13。具体请参考相应型号的 RM),以便只接收那些软件需要的报文。用户配置好需要的 ID 后,整个过滤过程无需软件参与,不占用CPU 资源。

4.1 过滤器的位宽

每个过滤器组由 2 个 32bit 的寄存器,CAN_FiFB1 和 CAN_FiFB2 组成。

通过配置 CAN_FBWCFG寄存器的 FBWSELx 位,可以设置 2 个 16 位宽或者 1 个 32 位宽的过滤器。

32 位宽的过滤器寄存器 CAN_FiFBx 包括:一组 SID[10:0]、EID[17:0]、IDT 和 RTR 位。
16 位宽的过滤器寄存器 CAN_FiFBx 包括:两组 SID[10:0]、IDT、RTR 和 EID[17:15]位。
4.2 过滤器模式

通过设置 CAN_FMCFG 寄存器的 FMSELx 位可以设置过滤器寄存器工作在标识符掩码模式或者标识符列表模式

掩码模式用来指定 ID 的哪些位需要与预设 ID 相同,哪些位无需比较;
列表模式表示 ID的每个位都必须与预设 ID 一致。

两种模式与过滤器位宽配合使用,可以有以下四种过滤方式:

在这里插入图片描述

更多 CAN 过滤器说明,例如 CAN 过滤器匹配序号,优先级规则等可参考 RM 文件报文过滤一节,这里不再详述。

过滤器配置流程见后文案例介绍 – CAN 接收过滤器使用。


5. CAN 波特率及采样点计算

如前文 CAN 位格式一节所述,CAN 的一个 bit 被分为几段。

其中第一段同步段(SYNC_SEG)固定为 1Tq,1Tq 的长度由 CAN 位时序寄存器 (CAN_BTMG)的分频系数 BRDIV[11:0]位定义;
位段1(BSEG1)通过配置 CAN 位时序寄存器的 BTS1[3:0]位,可设定为 1~16Tq;
位段 2(BSEG2)通过配置 CAN 位时序寄存器的 BTS2[2:0]位,可设定为 1~8Tq。

用户通过配置 CAN 时序寄存器,可设置 CAN 波特率和采样点,整个 CAN 总线上各节点的波特率和采样点一致最佳,不过由于各节点主频可能不一样,所以比较难保证波特率和采样点均一致。

用户使用时应首先保证波特率一致,采样点尽量保持在较小的偏差范围内,这样 CAN 总线可以支持更多的节点和更长的线路。

5.1 波特率计算公式

在这里插入图片描述

其中

在这里插入图片描述

典例

bsp 例程 project\at_start_f437\examples\can\communication_mode

在这里插入图片描述

5.2 采样点计算公式

在这里插入图片描述

典例

同上bsp例程

在这里插入图片描述

关于采样点设置,CAN 协议并没有明确规定,但根据各厂商 CAN 设备使用习惯,采样点设置建议如下:

在这里插入图片描述

5.3 波特率计算工具(AT32专用)

为方便用户波特率设定,AT32制造厂商雅特力制作了一个 AT 专用波特率计算工具;

点击进入官网即可免费下载(技术开发与支持->Tool->下拉最底下):

雅特力科技 : 32位微控制器的创新领导者! (arterytek.com)

在这里插入图片描述
在这里插入图片描述

使用步骤如下:

1) 波特率设定:高速 CAN 波特率最大为 1M,各厂商 CAN 设备常用波特率为 125K、250K、333K、500K、1M 等。用户可根据需要设定波特率。参考下图 16“波特率(Kbit/S)”。
2) CAN 时钟源频率设定:参考下图 16“PCLK1(MHZ)”。
3) 采样位置设置:设置完波特率后,计算工具会自动填入一个推荐的采样位置值。
	若实际项目中无具体限定,可保持默认设定;
	若项目中有具体限定,根据需求更改即可。参考下图 16“采样位置(%)”。
4) 波特率偏差设定:建议在不勾选“允许波特率偏差”项,仅在没有符合要求的计算结果时,再勾选此项。
	由于同一 CAN 网络的节点波特率有误差会增大通信错误几率,建议“偏差”值设置尽量小。
	参考下图 16“允许波特率偏差”和“偏差”。
5) 波特率配置结果选择:根据以上设定即可计算出多组结果。
	在页面左下角选择一项计算结果,即会在页面右下角显示对应软件代码配置,点击“复制全部”即可获得对应代码。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重拾精髓:go doc -http让离线包文档浏览更便捷

Go语言团队近期接受了Go团队成员、Go圣经《The Go Programming Language[1]》合著者Alan Donovan[2]的新提案[3],旨在进一步提升开发者体验。这个提案为go doc命令[4]的离线文档展示形式,同时增强了查看本地文档的交叉引用功能。看到这个提案功能&#x…

重装电脑系统时硬盘被重新分区:数据恢复实战指南与深度解析

在数字化时代的浪潮中,电脑作为我们日常生活和工作的核心工具,其系统的稳定性与数据的完整性至关重要。然而,在追求系统性能优化或解决系统故障的过程中,重装电脑系统成为了一个常见的操作。不幸的是,这一过程中若不慎…

PB9一个运行时错误:Non-array expected in ANY Variable

反编译修改一个项目。遇到这个问题。 仿佛一看,这是一个莫名其妙的问题,在百度也只搜到一个类似问题。 但是定睛一看,是一个很奇怪的错误,就是说代码自己写错了 for i 1 to uo_1.is_arr ls_arrstr uo_1.is_arr[i] ... next …

掌握 JavaScript ES6+:现代编程技巧与模块化实践

掌握 JavaScript ES6:现代编程技巧与模块化实践 一 . 变量声明 let二 . 声明常量 const三 . 模板字符串四 . 函数的参数默认值五 . 箭头函数六 . 对象初始化七 . 解构7.1 接收 JSON 对象7.2 接收数组 八 . 延展操作符九 . 导入和导出9.1 方式一9.2 方式二 这篇文章我…

校篮球联赛系统小程序的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,公告管理,基础数据管理,球队管理,球员管理,赛事信息管理,用户管理,轮播图信息 微信端账号功能包括&#…

文章解读与仿真程序复现思路——电网技术 EI\CSCD\北大核心《面向日前市场邀约的电动自行车换电站运行规划》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

聚观早报 | 2025款比亚迪汉上市;iPhone 16天猫全球同步首发

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 9月11日消息 2025款比亚迪汉上市 iPhone 16天猫全球同步首发 菜鸟L4级无人车正式发售 OPPO Find X8配置细节曝光…

DB33/T629 视频联网配置 USC安防平台

海康平台配置介绍 如下以海康ISC为例,配置DB33/T629接入流程。其中海康平台域标识为130101000020000099。DB33/T629 支持目录同步到usc。 DB33/T629服务配置 假设DB33/T629服务已经配置好,参考配置-》级联-》DB33/T629服务 DB33/T629下级域 进入配置-》…

全球服务业和制造业PMI:8月份差距继续扩大

标普全球综合PMI产出指数在8月份回升,增加0.3个百分点至52.8,此前两个月一直在下降。这对于2024年第三季度中的全球活动来说是一个鼓励的信号。然而,这个改进掩盖了服务业和制造业之间的明显分歧。8月份,全球服务业指数达到自2023…

8.Bug流程管理,禅道的使用(包含笔试/面试题)

一、bug的生命周期(重点) bug的生命周期就是从bug被发现到bug被关闭的整个过程。 1.bug生命周期: 新建(提交bug) - 指派 - 已解决 - 待验 - 关闭 new(新建) - assign额的&…

【Unity】为脚本添加头部注释

1 前言 默认创建的脚本头部是没有注释的,有时候我们想要在创建脚本时在脚本内容的最前面加上一个注释来标注脚本的相关信息,比如创建者、创建时间、描述等等。那么提供有两种实现方式。 2 方法 2.1 修改Unity的脚本Script 打开Unity Hub,找…

c/c++ 指针数组

顾名思义就是元素为指针的数组,如定义一个 char *类型的指针数组: char *strName[] {"123","456","789","abc","def" }; 如果是这样初始化的指针数组,c编译是会抛出警告信息的&#xff…

震惊!国产数据库厂商减少了51家!

前面文章我提到国产数据库厂商实际上大部分都不赚钱,我估计国产目前国产数据库厂商利润为正的,目前不超过5家。 而经济寒冬,融资困难,那么对于很多厂商,尤其是全靠融资的数据库厂商来讲,这将变得极其困难。…

Mysql系列-索引简介

索引是排好序的数据结构 1 索引数据结构 hash索引、二叉树、平衡二叉树、B-Tree、BTree 数据结构在线示例:点击跳转 2 索引类型 2.1 聚簇索引 又叫“聚集索引” ,索引和数据存储在一起 2.2 非聚簇索引 又叫“非聚集索引” ,索引和数据分开…

新MyEclipse(比如MyEclipse2019)自动生成PO类和配置文件的方法。

新版的MyEclipse(比如MyEclipse2019)上面myeclipse菜单没有了,选择项目右键菜单myeclipse也没有了。 新的方式是:右键菜单——Configure Facets...,然后选择Install Hibernate Facets,下面一步一步按提示操…

【ACM独立出版】第二届物联网与云计算技术国际学术会议 (IoTCCT 2024,9月27-29)

第二届物联网与云计算技术国际学术会议 (IoTCCT 2024)将围绕“物联网与云计算技术”领域,为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提供一个分享专业经验,扩大专业网络,面对面交流新思想以及展示研究成果的…

机械学习—零基础学习日志(Python做数据分析03)

元组 这里主要讲解了元组的相关语法内容。 可以在数据分析中使用相关的方法。 拆分元组 重点参考来源:

appium历史版本地址链接

appium / Appium.app / Downloads — Bitbucket ios的appium界面图 链接: https://pan.baidu.com/s/1i8BRaZgQA3ImLUhKZjfhiA 提取码: 5c8b

面向对象需求分析

1. 面向对象分析概述 1.1 面向对象基本概念 以对象为中心,以类为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。 1.2 UML统一建模语言 为什么要使用UML UML基本概念 统一建模语言(UML)是一个支持模型化和软…

【苍穹外卖】前端 Day 1

1 Vue 1.1 通过 vue cli 脚手架创建前端工程 1.2 项目结构 1.3 启动项目 VS Code 启动前端项目: npm run serve 注意这里占用端口号 8080 与 java springboot 占用端口号一致,有冲突 serve 是这个名字 终止:ctrl c 修改端口号 2 vue 基本…