基于STM32的CAN通信网-----一种ID配置方法

发布者:脑力风潮最新更新时间:2017-10-01 来源: eefocus关键字:STM32  CAN通信网  ID配置 手机看文章 扫描二维码
随时随地手机看文章

分布式CAN通信网ID分配方法

   在介绍本方法前,先构建CAN通信网系统模型:只有一个管理中心节点,其他均为从节点。主节点可与所有从节点之间相互通信,从节点之间不相互通信。CAN通信网采用网桥扩展方式增大网络中的节点。

报文帧格式

帧信息

IDE=1

RTR=0

X

X

DLC

扩展帧

远程帧

保留位

帧数据部分长度(不大于8)

 

 

 

 

帧标

识符

ID28

ID27

ID26

ID25

ID24

ID24

ID22

ID21

DestMACID(目标节点编码)

ID20

ID19

ID18

ID17

ID16

ID15

ID14

ID13

xxxxxxx xxxxxxx


ID12

ID11

ID10

ID9

ID8

ID7

ID6

ID5

SrcMACID(源节点编码)

ID4

ID3

ID2

ID1

ID0

X

X

X


0

保留位



当使用扩展帧进行数据传输时,扩展帧ID由STID+EXID组成。例如,在STM32中设置ExtID=0X1234时,则

 CAN_FilterIdHigh=0x0000,CAN_FilterIdLow=(0x1234)X8+4= 0x91A4;

如果设置ExtID=0X5678,则

  CAN_FilterMaskIdHigh=(u32(0x5678)X8/(0x10000)=0x0002;     CAN_FilterMaskIdLow=(0x5678)X8+4=0xB3C4;(溢出,截高位,剩下的就是这个数)。

为方便计算,我们把ID最后一位直接置为0。ID28~ID01这28位平分,前14位为DestMACID(目标节点),后14位为SrcMACID(源节点)。对于前14位,ID28~ID22作为网桥标号,ID21~ID15作为子网内编号。后14位采用相同编号方式。

  其中,地址0000000/0000000设置主地址

  网桥编号为, 0000001/xxxxxxx~1101110/xxxxxxx,也就是1~110

  网桥内子节点编号为xxxxxxx/0000001~xxxxxxx/1101110,也就是1~110

  规定xxxxxxx/0000000,为网桥内广播地址。广播地址,其中,xxxxxxx!=0000000。这主要是为了管理中心向各个从节点采集数据(心跳连接)时使用的。通过网桥内广播,则管理中心最少只需要发送110次查询信息,就可以获取所有井盖终端的井盖当前状态。

  例如,某节点地址为0000010/0000100,则表示为网桥2内的第4个节点

  如果整个29位的ID设置为0000000/0000000 0000010/0000100 0,则表示数据从网桥2内的第4个节点,发送至管理中心;如果整个29位的ID设置为0000010/0000100 0000000/0000000  0,则表示数据从管理中心,发送至网桥2内的第4个节点。注意,源地址和目的地址必须有一个是管理中心的地址,因为各个井盖节点之间不相互传送数据。


关键字:STM32  CAN通信网  ID配置 引用地址:基于STM32的CAN通信网-----一种ID配置方法

上一篇:基于STM32的CAN网络开发笔记之滤波器配置和ID设置
下一篇:STM32基于库函数版本的系统工作频率与CAN工作波特率设置

推荐阅读最新更新时间:2024-03-16 15:39

stm32 fsmc 功能讲解
LCD有如下控制线: CS:Chip Select 片选,低电平有效 RS:Register Select 寄存器选择 WR:Write 写信号,低电平有效 RD:Read 读信号,低电平有效 RESET:重启信号,低电平有效 DB0-DB15:数据线 假如这些线,全部用普通IO口控制。根据LCD控制芯片手册(大部分控制芯片时序差不多): 如果情况如下: DB0-DB15的IO全部为1(表示数据0xff),也可以为其他任意值,这里以0xff为例。 CS为0(表示选上芯片,CS拉低时,芯片对传入的数据才会有效) RS为1(表示DB0-15上传递的是要被写到寄存器的值),如果为0,表示传递的是数据。 WR为0,RD为1(表示是写动作
[单片机]
STM32控制IO基本配置的讲解
一个简单的工程搭建好之后,进一步就是了解里面的内容,也就是学习进入正轨。打开我之前新建的工程,主要调用的几个函数就是今天学习的内容,接下来我就讲解一下那些内容。 一、初始化时钟 这里的“时钟配置”函数在bsp.c文件下面; 使能了GPIOA --- GPIOD时钟,这里更加自己使用的IO进行配置(该工程实际只使用GPIOC)。 二、基本输入输出引脚配置 这里的“基本输入输出引脚配置”函数同样在bsp.c文件下面; 初始化GPIO, 包含端口引脚、频率、输出类型。 三、底层初始化 这里的“底层初始化”函数同样在bsp.c文件下面; 以后的底层初始化代码还会增加,这里调用上面的两个函数接口。 四、主函数应用
[单片机]
<font color='red'>STM32</font>控制IO基本<font color='red'>配置</font>的讲解
STM32环境搭建,建立工程及程序烧录
开发环境的搭建: STM32开发环境使用Keil MDK进行,那怎么使用MDK建立一个工程呢? MDK下载 首先应该下载到MDK官网:http://www.keil.com/arm/mdk.asp 下载最新版的MDK安装包,进入MDK官网,点击download按钮 跳转到下载界面,填入必要的信息: 然后在页面下方点击提交按钮: 如果填写的信息,符合要求,在本页面将会显示下载连接: 点击下载MDK(可以看到香农这里的MDK版本是MDK520,大概有567M的样子) MDK安装 下载完成之后点击安装: 选择安装目录,根据自己的需求定义, 随便填一些用
[单片机]
<font color='red'>STM32</font>环境搭建,建立工程及程序烧录
STM32编译环境、建立工程模板以及程序下载
1、之前写51的程序我们一般都是用的keil5软件,现在写32程序,要用到keil MDK软件,但是keil5和keil MDK不兼容,也就是说在keil5里面我们没办法写STM32F1之类的程序,而在keil MDK里面也没办法写51的程序,所以说为了让他们俩相互兼容,即我们要实现在keilMDK里面要既能够写51的程序,也能够写32的程序,我当初在网上找了好多方法都不行,最后发现一种特别简单好用的方法,就是在把keil5和keil MDK两个软件安装在同一个文件夹下面。具体步骤就是 (1)安装keil5软件(尽量不要安装在C盘),然后激活它。这里激活的时候要在注册机里选择C51。 (2)安装keil MDK软件,在安装
[单片机]
<font color='red'>STM32</font>编译环境、建立工程模板以及程序下载
STM32调试过程中常见的问题及解决方法?
STM32调试过程中常见的问题及解决方法 一、 在 Debug选项卡 下设置好仿真器的类型后,下载程序时却提示 No ULINK Device found. 解决办法: Keil MDK默认使用ULINK仿真器下载程序,在 Project --- Option for Target 'xxx' --- Utilities选项卡 下把编程所使用的仿真器改为相应的类型即可。 二、 编译工程时提示如下信息: main.axf: Error: L6218E: Undefined symbol __BASEPRICONFIG (referred from stm32f10x_nvic.o). main.axf: E
[单片机]
STM32之DAC原理
1.DAC模块 1.数模转换功能 2.可以配置为8位和12位模式(8位右对齐,12位左对齐,12位右对齐) 3.DAC模块有两个单独的控制器,每个通道有着单独的转换器,可以独立转换,也可以同时转换 4.可以实现噪声波形和三角波形的生成 5.每个通道有着DMA功能 6.图示: PS:左上方为一些触发的条件,左下方为一些数字电源(VDDA,VSSA) Vref+为参考电压,DAC_OUT_x为DAC的输出通道,(2.4v Vref VDDA) 数据并不是直接传入DORx的,需要先传入DHRx(如果没有选择硬件触发(TENx=0),在一个时间周期后传入DORx),同时,又经过Tsetting(大约3us)
[单片机]
<font color='red'>STM32</font>之DAC原理
STM32系列第13篇--OLED
简介: OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。 OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,并且能够节省电能,从2003年开始这种显示设备在MP3播放器上得到了应用。 LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果要来得好一些。以目前的技术,OLED的尺寸还难以大型化,但是分辨率确可以做到很高。 多种接口方式,该模块提供了总共4种接口包括:6800、8080两
[单片机]
<font color='red'>STM32</font>系列第13篇--OLED
STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法
如果使用内部RC 振荡器 而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 2)对于少于100脚的产品,有2种接法:   2.1)OSC_IN和OSC_OUT分别通过10K 电阻 接地。此方法可提高 EMC 性能。   2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。此方法可以减小功耗并(相对上面2.1)节省2个外部电阻。 以下是在 ST 英文网站FAQ上抄下的详细解释: 1) In 100 and 144 packages,  the OSC_IN /OSC_Out pins are a de
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved