stm32f4关于can总线的学习心得

发布者:Wanderlust123最新更新时间:2024-10-14 来源: cnblogs关键字:stm32f4  can总线  学习心得 手机看文章 扫描二维码
随时随地手机看文章

今天花了一天的时间学习了stm32f4的can模块的相关知识,首先我学的时候显示从can协议这块入手,而后进入stm32的配置和使用上,期间子啊百度上找了好多资料这里吧我的理解跟大家分享一下,希望我理解不足和错误的地方大家给指出来。


对于stm32的使用就是三个步骤
1:学习怎么配置相应的寄存器
2:学习怎样发送数据
3:学习怎样接收数据;但是在这个之前的学会对can总线协议的一些了解;
这里我拿我学习的时候看的一篇百度文章来说明吧:
当CAN总线上的一个节点(站)发送数据时,它以报文的形式广播给网络中所有节点,对每个节点来说,无论数据是否是发给自己的,都对其接收。每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式成为面向内容的编制方案。同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文,当几个站同时竞争总线读取时,这种配置十分重要。 
大体的工作原理我们搞清了,但是根本的协议我们还要花一番功夫。下面介绍一个重要的名词,“显性“和”隐性“ 
   在我看到的很多文章里,有很多显性和隐性的地方,为此我头痛不已,最终我把它们彻底弄明白了。 
  首先CAN数据总线有两条导线,一条是黄色的,一条是绿色的。分别是CAN_High线和CAN_Low线 当静止状态时,这两条导线上的电平一样。这个电平称为静电平。大约为2.5伏。 这个静电平状态就是隐形状态,也称隐性电平。也就是没有任何干扰的时候的状态称为隐性状态.当有信号修改时,CAN_High线上的电压值变高了,一般来说会升高至少1V,而CAN_Low线上的电压值会降低一个同样值,也是1v,那么这时候。CAN_High就 是2.5v+1v=3.5v,它就处于激活状态了。而CAN_Low降为2.5v-1v=1.5v。 可以看看这个图 
 
由此我们得到 
在隐性状态下,CAN_High线与CAN_Low没有电压差,这样我们看到没有任何变化也就检测不到信号。但是在显性状态时,改值最低为2V,我们就可以利用这种变化才传输数据了。所以出现了那些帧,那些帧中的场,那些场中的位,云云~~~~~~~~~~~ 
在总线上通常逻辑1表示隐性。而0表示显性。这些1啊,0啊,就可以利用起来为我们传数据了。 
利用这种电压差,我们可以接收信号;
以上是对显隐电平的理解
CAN的报文格式有两种,不同之处其实就是识别符长度不同,具有11位识别符的帧称为标准帧,而还有29位识别符的帧为扩展帧,CAN报文有以下4个不同的帧类型。分别是 (1) 数据帧:数据帧将数据从发送器传输到接收器。 (2) 远程帧:总线节点发出远程帧,请求发送具有同一标识符的数据帧 (3) 错误帧:任何节点检测到总线错误就发出错误帧 (4) 过载帧:过载帧用已在先行的后续的数据帧(或远程帧)之间提供一
这一上是对协议电平的理解;一下就是stm32 f4的相关配置
static void CAN2_Config(void)
{
  //CanTxMsg TxMessage;
CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE); //????CAN2???±??
  
  CAN_DeInit(CAN2); //??CAN2?????÷?????è???±????
  CAN_StructInit(&CAN_InitStructure); //??CAN_InitStructure??????????????°??±????????


  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM = DISABLE; //失能时间触发模式
  CAN_InitStructure.CAN_ABOM = DISABLE; //?§??×??????????í
  CAN_InitStructure.CAN_AWUM = DISABLE; //?§??×???????????
  CAN_InitStructure.CAN_NART = DISABLE; //只发送一次,不管接不接受
  CAN_InitStructure.CAN_RFLM = DISABLE; //锁定fifo模式
  CAN_InitStructure.CAN_TXFP = DISABLE; //失能fifo优先级
  CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;  //?????¤×÷????
  CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; //设定同步时间段
    
  /* CAN Baudrate = 1MBps (CAN clocked at 30 MHz) */
  CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq; //?è?¨?±????1??6???±??????????
  CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; //?è?¨?±????2??8???±??????????
  CAN_InitStructure.CAN_Prescaler = 2; //?è?¨???±?????????¤????2
  CAN_Init(CAN2, &CAN_InitStructure);


  CAN_FilterInitStructure.CAN_FilterNumber = 14; //???¨?????÷14  ?¨????????????±?????stm32????14???????¨????
  CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; //?????÷???????? ±ê??·???±???????
  CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; //1??32???????÷
  CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; //?è?¨?????÷±ê??·?  ???ù?è???????÷???°????×?????????????????????
//???????è?????¨????±ê×???
  //CAN_FilterInitStructure.CAN_FilterIdHigh = x06DB<<5;//?ò??????×???11????±ê×???11????

CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; //?è?¨?????÷±ê??·?
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; //?è?¨?????÷??±?±ê??·?
  CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;  //?è?¨?????÷??±?±ê??·?
//?????è??????±???????????high??low???è????0xffff???°?????????????????¨?????·;
//CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xffff; //?è?¨?????÷??±?±ê??·?
  //CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xffff;  //?è?¨?????÷??±?±ê??·?
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; //CAN_FilterFIFO0???ò?????÷14
  CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; //?????????÷
  CAN_FilterInit(&CAN_FilterInitStructure);
  
  /* Transmit Structure preparation */
  TxMessage.StdId = 0x321; //?è?¨±ê??·?0x321//???????????á?©??????  ±¨??±ê?????????????à??????????????
  TxMessage.ExtId = 0x01; //?è?¨?©??±ê??·?0x01
  TxMessage.RTR = CAN_RTR_DATA; //??????
  TxMessage.IDE = CAN_ID_STD; //????±ê×?±ê??·?
  TxMessage.DLC = 1; //???????????¤????1
 


 // CAN_Transmit(&TxMessage);  //yj?í??
  /* Enable FIFO 0 message pending Interrupt */
  CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);


}

这里黄色部分是对发送的地方的标准进行配置,发送采用标准帧模式,标志符那个需要0x321的,这里的扩展符可有可无;因为后面有一个模式选择;
红色部分是对接收进行配置这里主要是对过滤器和过滤器屏蔽标志进行配置,他们两个是配合使用的

附加的延时 
我们先研究数据帧吧。 
一,数据帧由7个不同位场组成。 
这里的位场,就是不同位的组合,这名字起的很烂,让人看了感觉很抽象。我们来看看这些个不同的位场吧。 
一开始是一位帧起始,也叫SOF。它用显性位表示,也就是0.它告诉我们,两个线上有电压差了,也就是有数据了。这个帧起始看起来只有一位,起始不简单了。

为了让所有的分站都同步于发送报文的发送站,好接收数据,有很多要考虑的地方。 
然后下一个场是仲裁场。这个仲裁场是个难点。但是不要怕,有我在,你会很明白地搞定的。 这个仲裁很抽象,其实在这里就是为了解决一个问题。如果2个或2个以上的单元同时开始传送报文,那么就会有总线访问冲突。那么仲裁机制就是用来根据标识符优先级来一个一个的去掉低级别的数据。我们可以详细的描述这场生动的争抢总线的战斗。 
当总线处于空闲状态时呈隐性电平,此时任何节点都可以向总线发送显性电平作为帧的开始。2个或2个以上的节点同时发送开始争抢总线,但是总线只能被一个人抢走。
总线只属于一个他。这时候到底怎么决定谁留下,谁滚蛋呢。我们开始考虑,思索,我们以前定义了标识符,标识符有优先级,它越小,它优先级越高。那么怎么实现的呢。看下面把 首先搞明白两点,一 下面的图 低波形代表0,高波形代表1 二 当隐性碰到显性,就变为显性。

关键字:stm32f4  can总线  学习心得 引用地址:stm32f4关于can总线的学习心得

上一篇:UCOSII在STM32F407上的移植
下一篇:STM32用IAR调试出现Error[Pe020]: identifier "FILE" is undefined 解决方法

推荐阅读最新更新时间:2024-11-07 21:03

基于μPD780822单片机及其CAN总线模块实现车灯节点的设计
1、引言 CAN(Controller Area Network)是德国Bosch公司最先提出的,是目前汽车控制器局域网中最流行、最常用的总线。它的主要特点是:CAN总线为多主站总线,各节点均可在任意时刻主动向网络上的其他节点发送信息,不分主从,通信灵活;CAN总线采用独特的非破坏性总线仲裁技术,优先级高的节点先传送数据,能满足实时性要求;CAN总线具有点对点、一点对多点及全局广播传送数据的功能;CAN总线上每帧有效字节数最多为8个,并有CRC及其他校验措施,数据出错率极低,某个节点出现严重错误,可自动脱离总线,总线上的其他操作不受影响;CAN总线只有2条导线,系统扩充时可直接将新节点挂在总线上,因此走线少,系统容易扩充,改型灵活
[嵌入式]
基于μPD780822单片机及其<font color='red'>CAN总线</font>模块实现车灯节点的设计
单片机和MCP2510的CAN总线通信模块设计
CAN(Controller Area Network)总线,即控制器局域网。由于具有高性能、高可靠性以及独特的设计,CAN总线越来越受到人们的重视。德国的Bosch公司最初为汽车监控和控制系统设计了CAN总线,现在,其应用已面向过程工业、机械工业、纺织工业、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。CAN总线已经形成国际标准,并已经公认为是最有前途的现场总线之一。CAN总线规范已经被国际标准化组织制订为国际标准ISO11898,并得到众多半导体器件厂商的支持,推出各种集成有CAN协议的产品。CAN总线系统智能节点是网络上报文的接收和发送站,一般由单片机和CAN控制器或二者合二为一组成。 MCP25l0是Micro
[工业控制]
CAN总线活动讲座一:写在CAN总线开发板助学之前
大家好:      很感谢cepark以及wangjin给我们这个舞台来共同学习CAN总线。如今的电子技术日新月异,技术种类和方案层出不穷,需要电子工程师掌握的东西越来越多,你是否有点迷惑呢?在我们的“演出”正式开始之前,我想带大家简要回顾或是总结一下现在的这个领域。      电子这个领域其实很广阔,涉及的东西很多,而且我自己的能力也有限,不可能一言盖尽,所以就凭自己的粗浅认识来谈一谈,欢迎大家讨论。仅从应用角度讲,电子偏工程,所以诸如电子系、自动控制、测控、导航、机械等与电子密切相关的专业最后都被授予工学学位,与理学学位不一样。这就表示着这一大类学生的培养目标是直接面对社会工程应用领域,所以学习的课程很多也都是重工程,比如数电,
[嵌入式]
基于LPC2294的CAN总线主节点的硬件及软件设计方案
  内容摘要:为引入 CAN 总线技术以实现运动控制系统的网络化。提出了基于LPC2294的CAN总线主节点的硬件及软件设计方案。硬件采用基于ARM7内核的微控制器LPC2294,使用CTM1050T作为CAN收发器,设计了带有CAN总线以及以太网接口的硬件 电路 ,并进行了SRAM、NORFLASH与NAND Flash的扩展。软件采用μCLinux作为操作系统,并开发了CAN控制器的驱动程序,实现了CAN总线的各种功能。通过制作样机并进行实验,验证了这一方案的有效性。   CAN(Controller Area Network)即控制器局域网络,是国际上应用最广泛的现场总线之一,已经成为计算机控制系统和嵌入式工业控制局域网
[单片机]
基于LPC2294的<font color='red'>CAN总线</font>主节点的硬件及软件设计方案
一种基于CAN总线的集散型火灾报警控制系统
随着经济建设的发展,社会对火灾报警控制系统的规模的要求越来越大,为了适应市场的需要,笔者利用CAN现场总线技术,设计出了一种集散型火灾报警控制系统,该系统结构灵活、使用方便,可满足大、中、小各种规模的火灾报警及消防控制的要求。CAN(Controller Area Network)即控制器区域网——一种有效的支持分布式控制和实时控制的串行通讯网络,由于其高性能、高可靠行,及独特的设计,越来越受到人们的重视,其总线规范已被ISO国际标准化组织制定为国际标准,并被公认为是最有前途的现场总线之一。本文主要介绍由MCP2510与MCP2551组成的CAN现场总线的在集散型火灾报警控制系统中的应用。 1、系统组成与工作原理概述   本
[工业控制]
一种基于<font color='red'>CAN总线</font>的集散型火灾报警控制系统
基于CAN总线和RFID的矿井定位系统设计
   引言   近年来,矿井安全事故频发。在分析近期几个煤矿特大事故时发现几个共性问题:地面与井下人员的信息沟通不及时;煤矿事故发生后,抢险救灾安全救护的效率低,搜救效果差。为了在矿难发生后能够迅速确认矿难位置和被困员工人数,以最快的速度开展营救工作,保障矿工的生命安全,在矿井中布置基于高新技术的安全监控管理系统势在必行。   本文设计了1个基于CAN总线网络和射频识别技术的矿井定位系统,该系统可以实时地将矿井   下人员及矿车的当前位置通过CAN总线网络传送到位于地面的上位机,不仅可以掌握井下作业情况,而且一旦发生安全事故,可以立刻确定被困人员所处的位置及人数,以便迅速展开救援工作。    1、 RFID 技术和
[嵌入式]
基于CAN总线的自动光学检测仪通信系统设计
  在现代工业自动化生产中,涉及到各种各样的检验、生产监控及零件测量、识别应用等环节,然而通常人眼很难连续、稳定地完成这些带有高度重复性和智能性的工作,一般物理量传感器也较难实现这些功能。而利用光电成像系统采集被检测目标的图像,并经计算机或专用的图像处理模块进行数字化处理。与一般图像处理系统相比,自动光学检测更强调精度、速度,以及工业现场环境下的可靠性。因此,这里提出一种基于CAN总线的自动光学检测通信系统设计方案,该系统设计能够满足PCB自动光学检测控制系统的指标要求。   1 自动光学检测通信系统分析   自动光学检测系统具有快速准确、可重复性强以及自动化程度高等特点。自动光学检测技术的出现极大地减轻了人工检测的压力,解决了
[嵌入式]
STM32F407 GPIO口输出配置配置步骤
STM32F407ZGT6 是意法半导体(STMicroelectronics)公司推出的一款高性能ARM Cortex-M4核心的32位微控制器(MCU)。它是 STM32F4 系列的一员,具备强大的处理能力和丰富的外设功能,适用于各种应用领域。 【1】F407建工程所需依赖文件 【2】 新建工程 **说明:STM32F4 的主频最高是 168Mhz,所以我们一般设置 PLLCLK 为 168Mhz(M=8,N=336,P=2),通过 SW 选择 SYSCLK=PLLCLK即可得到 168Mhz 的系统运行频率。** 【3】分析LED硬件原理图 【4】编写L
[单片机]
<font color='red'>STM32F4</font>07 GPIO口输出配置配置步骤
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved