查看: 3225|回复: 3

机智云can总线基础知识学习及代码功能解释

[复制链接]
  • TA的每日心情
    奋斗
    2015-10-21 16:47
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-10-21 16:47:11 | 显示全部楼层 |阅读模式
    分享到:
    常见的单片机开发,主要还是集中在串口控制、LED控制、IO口控制、中断控制(外部中断和定时器中断)、SPI通信控制和IIC通信控制等等。基本上这些控制都能够很好的上手。但是对于CAN总线这个通信方式,以前听说过没搞过,突然发现机智云源代码里面有,故仔细的扒一扒这里面的细节。
    首先来了解下什么是CAN总线。(嘿嘿,百度一下,贴过来!)CAN总线是控制器局域网络的简称,英文名Controller Area Network,是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准,是国际上应用最广泛的现场总线之一。
    (???什么是现场总线?现场总线是指安装在制造或过程区域的现场装置与控制室内的自动装置之间的数字式、串行、多点通信的数据总线。)
    CAN属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络,具有网络各节点之间的数据通信实时性强和开发周期短等特点。在CAN网络中的个节点都可根据总线访问优先权(取决于保温标识符)采用无损结构的逐位仲裁的方式竞争想总线发送数据,而且CAN总线协议废除了站地址编码,而代之以对通信数据进行编码,这可使不同的节点同事接收到相同的数据,这些特点是的CAN总线构成的网络各节点之间的数据通信实时性强,并且容易构成冗余结构,提高系统的可靠性和系统的灵活性。
    CAN总线只有两根线与外部相连,分别是CANHCANL,采用差分信号方式,CAN高电平3.5VCAN低电平1.5V,即所谓的显性和隐性。
    CAN总线协议支持两种报文格式,标准格式为11位,扩展格式为29位,区别在于标识符的长度不同。报文传输时,不同的帧具有不同的传输结构,分别是数据帧、错误帧、远程帧和过载帧。
    其中数据帧作为重点了解的对象,由七种不同的位域组成:
    1、  帧起始(SOF):帧起始(SOF)标志着数据帧和远程帧的起始,仅由一个“显性”位组成。在CAN的同步规则中,当总线空闲时(处于隐性状态),才允许站点开始发送(信号)。所有的站点必须同步于首先开始发送报文的站点的帧起始前沿(该方式称为“硬同步”)
    2、  仲裁域:仲裁域由标识符和RTR位组成,标准帧格式与扩展帧格式的仲裁域格式不同。标准格式里,仲裁域由11位标识符和RTR位组成。标识符位有ID28ID18。扩展帧格式里,仲裁域包括29位标识符、SRR位、IDE(Identifier Extension,标志符扩展)位、RTR位。其标识符有ID28IDO。为了区别标准帧格式和扩展帧格式,CAN1.01.2版本协议的保留位r1现表示为IDE位。IDE位为显性,表示数据帧为标准格式;IDE位为隐性,表示数据帧为扩展帧格式。在扩展帧中,替代远程请求(Substitute Remote RequestSRR)位为隐性。仲裁域传输顺序为从最高位到最低位,其中最高7位不能全为零。RTR的全称为“远程发送请求(Remote TransmissionRequest)”。RTR位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”。它是区别数据帧和远程帧的标志。
    3、  控制域:控制域由6位组成,包括2个保留位(r0r1同于CAN总线协议扩展)4位数据长度码,允许的数据长度值为08字节。
    4、  数据域:发送缓冲区中的数据按照长度代码指示长度发送。对于接收的数据,同样如此。它可为08字节,每个字节包含8位,首先发送的是MSB(最高位)
    5、  CRC校验码域:它由CRC(15)CRC边界符(一个隐性位)组成。CRC计算中,被除的多项式包括帧的起始域、仲裁域、控制域、数据域及15位为0的解除填充的位流给定。此多项式被下列多项式X15+X14+X10+X8+X7+X4+X3+1(系数按模2计算),相除的余数即为发至总线的CRC序列。发送时,CRC序列的最高有效位被首先发送/接收。之所以选用这种帧校验方式,是由于这种CRC校验码对于少于127位的帧是最佳的。
    6、  应答域:应答域由发送方发出的两个(应答间隙及应答界定)隐性位组成,所有接收到正确的CRC序列的节点将在发送节点的应答间隙上将发送的这一隐性位改写为显性位。因此,发送节点将一直监视总线信号已确认网络中至少一个节点正确地接收到所发信息。应答界定符是应答域中第二个隐性位,由此可见,应答间隙两边有两个隐性位:CRC域和应答界定位。
    7、帧结束域:每一个数据帧或远程帧均由一串七个隐性位的帧结束域结尾。这样,接收节点可以正确检测到一个帧的传输结束。




    现在来看看代码。CAN总线文件是stm32f10x_can.cstm32f10x_can.h.c文件中包含有函数的函数体,.h文件中包含有函数的声明。主要函数有:
    void CAN_DeInit(CAN_TypeDef* CANx),取消初始化CAN总线外设寄存器默认的重置值。
    uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct),根据CAN_InitStruct结构体中的特定的参数来初始化CAN总线的外设。
    void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct),根据CAN总线过滤器结构体中的参数来初始化CAN总线外设。
    void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct),用默认值来填充每个CAN_InitStruct结构体。
    void CAN_SlaveStartBank(uint8_t CAN_BankNumber),为从CAN总线选择开始过滤器组。
    void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState),使能或者关闭特殊CAN总线中断。
    uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage),启动一个消息的发送。
    uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox),检查消息的发送。
    void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox),取消一个发送请求。
    void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber),释放一个先入先出。
    uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber),返回等待消息的编号。
    void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage),接收一个消息。
    void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState),为CAN总线使能或者关闭某一个CANx
    uint8_t CAN_Sleep(CAN_TypeDef* CANx),进入低功耗模式。
    uint8_t CAN_WakeUp(CAN_TypeDef* CANx),唤醒CAN总线。
    FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG),检查指定的CAN总线标志是否被置位。
    void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG),清除CAN总线的等待标志。
    ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT),检查指定CAN总线中断是否发生。
    void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT),清除CAN总线中断等待位。
    static ITStatus CheckITStatus(uint32_t CAN_Reg, uint32_t It_Bit),检查CAN总线中断是否发生。
    常见CAN总线使用。



    测试3图片.png
    测试3图片2.jpg
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-10-22 09:12:49 | 显示全部楼层
    多谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-3-28 17:24
  • 签到天数: 276 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-10-25 20:58:49 | 显示全部楼层
    正好学习   不错               
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-1-16 00:54
  • 签到天数: 129 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-11-1 23:22:57 | 显示全部楼层
    学习了,感谢分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 09:10 , Processed in 0.144047 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.