汽车OBD初级开发入门 |
您所在的位置:网站首页 › obd检测工具 › 汽车OBD初级开发入门 |
汽车OBD初级开发入门
我所认识的OBD从何开始学习OBDstm32的CAN总线OBD的标准协议
我所认识的OBD
直观的从名称上来说是英文On-Board Diagnostics的缩写,中文翻译为“车载诊断系统”。书面上的解释就是处理汽车相关故障的诊断系统。对于硬件接口如下图 当我们认识了OBD相关概念之后,可是对于毫无经验的开发者来说,到底该如何下手,该先学习什么内容。我们要了解汽车内部的数据系统,那必须要学习的就是怎么和汽车进行通信,这时候就很明确了,那就是通过OBD接口的通信总线来打通外部与汽车内部的数据通信,而OBD包含的通信接口包含有CAN总线、K线以及L线,我这里主要是讲解CAN相关应用。 stm32的CAN总线如果学习过单片机的朋友,谈到CAN总线相比OBD应该会更熟悉一些,对于CAN总线现在都是集成到芯片内部的,比较常用的就是stm32,对于使用者来说,不用太关心CAN总线的电路实现,我们只要能通过配置CAN总线进行通信就行了。在连接CAN总线通信的时候需要注意的是,在通信回路中需要并一个120欧的电阻,至于为什么需要电阻可以参考这篇博文:CAN总线为什么要有两个120Ω的终端电阻。关于CAN总线的理论基础,在网上都有很好的总结大家可以自行查找。我这里直接讨论在STM32中该如何配置CAN总线。首先调试CAN总线,可以先配置成回环模式进行调试,通过是否通信来判断can总线的相关初始化是否正确。对于can的初始化的流程, 1、配置CAN的IO口,在stm32中一般CAN的IO口是复用的,所以这里在配置的时候需要注意一下。 2、打开CAN总线的时钟,同时开始i配置CAN相关的寄存器数据,在这里很重要的一点就是要配置通信模式和波特率,这会关系到CAN的通信。 3、在初始化完之后,还需要配置CAN的滤波器,配置滤波器的目的是因为在汽车通信中,由于部分汽车是没有做网关的,当你通过CAN总线去通信的时候,会返回很多无用的消息,这个时候通过配置滤波器,直接过滤掉无用的,只接收特定的想要的数据。在滤波器中包含16位的滤波器和32位的滤波器配置,这个可以根据需要配置相应的滤波器。 网上有很多相关can初始化的配置,因为我这边使用的是stm32f042的芯片,可供大家参考一下 /**************************************************************************************** **函数信息(information):void CAN_GPIOConfig(void) **功能描述(description):CAN所用IO引脚配置 **输入参数(Arguments) :None **输出参数(Returns) :None **调用提示(reference) : *****************************************************************************************/ void CAN_GPIOConfig(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA ,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE); //使能SYSCFG, GPIO_PinAFConfig(GPIOA,GPIO_PinSource11 ,GPIO_AF_4); GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_4); //复用CAN功能 SYSCFG->CFGR1 |= PA11_PA12_RMP; //配置打开PA11_PA12功能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); } /**************************************************************************************** **函数信息(information):void CAN1_Config32BitFilter(u32 id1, u32 id2, u32 mid1, u32 mid2) **功能描述(description):CAN扩展帧滤波器设置 **输入参数(Arguments) :id1,id2 校验码 mid1,mid2 屏蔽码 **输出参数(Returns) :None **调用提示(reference) : *****************************************************************************************/ void CAN1_Config32BitFilter(u32 id1, u32 id2, u32 mid1, u32 mid2) { CAN_FilterInitTypeDef CAN_FilterInitStructure; NVIC_InitTypeDef NVIC_InitStructure; CAN_FilterInitStructure.CAN_FilterNumber = 0; CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; CAN_FilterInitStructure.CAN_FilterIdHigh = id1>>13; CAN_FilterInitStructure.CAN_FilterIdLow = (id113; CAN_FilterInitStructure.CAN_FilterMaskIdLow = (mid113; CAN_FilterInitStructure.CAN_FilterIdLow = (id213; CAN_FilterInitStructure.CAN_FilterMaskIdLow = (mid2 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |