在整理过程中进步,与君共勉!

J1850-PWM和J1850-VPW的通信协议底层时序可以参考:J1850-PWM和J1850-VPW协议底层时序

PWM和VPW的接收可以使用定时器的输入捕获功能,将总线收到的信号的脉冲宽度测出,可在中断中利用状态机实时解析数据(或者使用外部中断,上下沿触发,同时开启定时器,在外部中断函数中以定时器的计数值记录脉冲宽度)
PWM和VPW的发送可以使用定时器的比较输出功能,以STM32为例,根据发送数据的数据位脉宽改变CCR,到时间了触发中断可以在中断里利用状态机赋值下一个CCR,达到按协议输出信号的效果

部分配置如下:

void j1850_rxtimer_config(char *psel_Type)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_ICInitTypeDef TIM_ICInitStruct;switch (*psel_Type){case PSEL_TYPE_PWM:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_DeInit(TIM3);TIM_TimeBaseStructure.TIM_Prescaler = 72-1;TIM_TimeBaseStructure.TIM_Period = 0xFFFF;TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM_ICInitStruct.TIM_ICFilter = 0;TIM_ICInitStruct.TIM_Channel = TIM_Channel_4;TIM_ICInit(TIM3, &TIM_ICInitStruct);nvic_Init(TIM3_IRQn,1,0,ENABLE);break;case PSEL_TYPE_VPW:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); nvic_Init(TIM3_IRQn,1,0,DISABLE);TIM_DeInit(TIM3);TIM_TimeBaseStructure.TIM_Prescaler = 72-1;TIM_TimeBaseStructure.TIM_Period = 0xFFFF;TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);nvic_Init(TIM3_IRQn,1,0,ENABLE);break;}
}void j1850_txtimer_config(char *psel_Type)
{//TIM4_CH1TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStruct;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); nvic_Init(TIM4_IRQn,0,0,DISABLE);TIM_DeInit(TIM4);if (*psel_Type == PSEL_TYPE_PWM)j1850_txTimerIRQHandle = j1850_pwm_tx;else j1850_txTimerIRQHandle = j1850_vpw_tx;TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;TIM_TimeBaseStructure.TIM_Period = 0xFFFF;TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_Timing;TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Disable;TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;TIM_OC4Init(TIM4, &TIM_OCInitStruct);TIM_ITConfig(TIM4, TIM_IT_CC4, ENABLE);TIM_ClearITPendingBit(TIM4, TIM_IT_Update);nvic_Init(TIM4_IRQn,0,0,ENABLE);
}

这里还提供另一种实现思路:
发送部分:
1、开一个定时器TIM1,配置成PWM比较输出模式,
2、开启两个DMA通道,触发源为TIM1_DMA_update和TIM1_DMA_CC1
3、开2个同样大数组,一个是周期,一个是脉宽,大小为你要发送的最长数据的8倍,(一个数据为1个bit)
4、将你要发送的数据按顺序拆分为2bit一组,对照上面的关系图将周期和脉宽转换为定时器的pwm周期和脉宽值,填进表内,别忘了起始和结束脉冲
5、配置2个dma,发送数据量和数据源地址,地址为两个数组地址,打开dma的发送完成中断,打开TIM1 CC1,
6、剩下的事情就是让TIM和DMA自己嗨,等到程序自己进入了dma发送完成中断就是发送完成了

接收部分:
1、开一个定时器TIM4,配置成输入捕获模式,通道CC1和CC2
2、开启两个DMA通道,触发源为TIM_DMA_CC1和TIM_DMA_CC2
3、开启两个数组,同发送部分一样
4、启动tim的输入捕获和dma,等着vpw引脚信号到来,dma会自己将信号的周期和脉宽放入开好的数组内
5、将捕获到的脉宽和周期还原成原始数据,搞定收工!

OBD技术速成——J1850协议解析软件实现相关推荐

  1. OBD技术速成——J1850协议概述

    在整理过程中进步,与君共勉! 目录 概述 J1850-PWM J1850-VPW 概述 J1850总线是1994年由汽车工程师协会(Society of Automotive Engineers:SA ...

  2. 公网传输技术之SRT协议解析(上)

     点击上方"LiveVideoStack"关注我们 作者:张博力 编辑:Alex ▼扫描下图二维码或点击阅读原文▼ 了解音视频技术大会更多信息 " 摘  要:SRT协议( ...

  3. 多层协议解析 c语言,基于DPI的应用层协议书解析.doc

    专业资料 精心整理 摘要 随着互联网在中国的迅速发展,全国各大网络运营商的网络规模都在不断扩张,网络结构日渐复杂,网络业务日趋丰富,网络流量高速增长,这使得网络管理的要求和难度都大大提高.因此,网络运 ...

  4. 新版思科CCNA认证1.0 零基础入门技术VTP协议解析-ielab网络实验室

     新版思科CCNA认证1.0 零基础入门技术VTP协议解析-ielab网络实验室 VTP(VLAN Trunking Protocol):VLAN中继协议,是Cisco专用协议.也被称为虚拟局域网干道 ...

  5. obd 与服务器 通讯协议,经典   OBD-2是什么及接口针脚定义和通信协议

    在车辆年检新标准的实施中,不仅增加了与排放相关部件的外观检查(如连接管路是否老化.龟裂.漏气等),还新增了OBD检测项目,并且要求在进行排放污染物检测的整个过程中,都不能断开OBD设备. 如此一来使得 ...

  6. 视音频数据处理入门:UDP-RTP协议解析

    ===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...

  7. 阿里巴巴开源技术汇总:115个软件(五)

    阿里巴巴开源技术汇总:115个软件(五) 摘要: 很高兴又和广大读者相见了!今天是第五期阿里巴巴开源技术汇总.在前面四期中我们带领大家浏览了许多阿里的开源项目,相信现在读者们跟我一样对阿里的很多优秀的 ...

  8. TFTP协议解析及C/C++代码实现

    TFTP 用于以非常简单的方式传输文件.与其他文件传输协议(如:FTP 或 HTTP)相比,TFTP 更简单,代码量也更小,因此更易于实现. 通常,TFTP 使用 UDP 作为其传输协议.众所周知的 ...

  9. 如何实现汇川PLC和工业机器人的协议解析与数据采集?

    汇川是一家专注于工业自动化的设备制造商,具备一整套完善的产品与服务,涉及变频器.伺服系统.PLC.HMI触摸屏.电动汽车电机控制器.光伏逆变器等等,在制造业.新能源.环保节能等等领域应用广泛,受到很多 ...

最新文章

  1. 今日 Paper | 模态平衡模型;组合语义分析;高表达性SQL查询;多人姿态估计模型等
  2. 港府拟修例禁止电子烟入口及销售 保障市民健康
  3. 线性回归损失函数为什么要用平方形式
  4. elif是不是java关键字_C# 中的#if、#elif、#else、#endif等条件编译符号 (转载)
  5. Linux 命令之 rcp -- 远程文件复制
  6. 正则表达式与html信息提取,基于正则表达式的HTML信息提取.pdf
  7. SAP License:PM常用表和字段
  8. 一文教你分清持续集成,持续交付,持续部署!
  9. docker java 中文乱码_记一次ubuntu docker 镜像 java 中文乱码问题查找
  10. 数字图像处理——图像的统计特征
  11. matlab gui图标,matlab GUI
  12. JAVA日期转换函数(包括:日期、周数的计算)
  13. 基于bing 搜索引擎和 Microsoft Academic Search 的高校申请指南的NABC分析
  14. CodeForces-1138A
  15. 【PythonPlanet】二手房产成交数据分析
  16. 国家战略下的技术自强,百度飞桨的时代之歌
  17. Rings(思维/贪心)
  18. 新南威尔士大学纯硅量子计算机,全球首款纯硅量子计算机芯片在新南威尔士大学诞生...
  19. 【Halcon学习之路】图像采集助手
  20. h3c虚拟刀片服务器,产品技术-H3C B16000-刀片服务器-新华三集团-H3C

热门文章

  1. 使用WebRTC开发Android Messenger:第1部分
  2. LiveVideoStackCon 2020 首届音视频线上峰会【优秀出品人与讲师】
  3. 开源编解码器 SOLO 源码解读:带宽扩展与窄带编码
  4. 腾讯云张贤国:北大将我从少年变成了技术研究者
  5. LiveVideoStack线上交流分享 ( 四 ) —— 面向QoE的感知视频编码
  6. sync.Map低层工作原理详解
  7. Java多线程之线程池7大参数、底层工作原理、拒绝策略详解
  8. 新一代海量数据搜索引擎 TurboSearch 来了!
  9. 来,和腾讯一起共建未来城市
  10. 揭秘华尔街人工智能真实水平:距离40%的金融民工被取代或只剩8年