【问题标题】:making OBD-II reader using STM32F3使用STM32F3制作OBD-II阅读器
【发布时间】:2019-10-21 07:10:29
【问题描述】:

我开始使用 stm32f303k8 和 MCP2551 收发器 CAN BUS 制作自己的 obd2 阅读器。 为此,我从 CubeMX 开始使用 Hal 函数进行配置和 Keil,但我仍然试图从汽车中获取数据.. 直到我找到替换 elm327 函数并使用 AT 命令但使用标准外围库创建的 stm32f10x 代码..

这里是代码https://github.com/ARoozitalab/ELM327-OBDII-STM32

现在我只想知道如何用 stm32f3 的 hal 库替换这段代码,因为 ST 删除了 stm32f3 的标准外设库

我可以在 CMSIS 库和 Hal 函数之间合并吗?

我尝试使用 hal 库重建项目并在我的代码中添加副本 OBD.C,但我认为我需要在 Config.h 中进行一些更改

【问题讨论】:

    标签: stm32 can-bus keil obd-ii


    【解决方案1】:

    我将帮助您学习 OBDII 协议

    首先您应该了解您汽车的ECU。 也许那个 ECU 不支持 CAN 端口(ISO 15765),所以你不能用 CAN 读取你的 ECU

    你的 ecu 型号是什么?

    我建议你先在cube mx中建一个项目,启用一个串口就可以了

    然后启用您的 CAN 协议中断

    在 CAN 中断处理程序中使用此示例代码:

        CanRxMsg RxMessage;
        CanTxMsg TxMessage;
      /* receive */
      CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
            printf("idv: %u ",RxMessage.IDE);
            printf("exID: %04X ",RxMessage.ExtId);
            printf("ID: %03X ",RxMessage.StdId);
            printf("DLC: %02X ",RxMessage.DLC);
    
            printf("DATA:");
      for(i=0;i<RxMessage.DLC;i++) 
         { 
    
            printf(" %02X ",RxMessage.Data[i]); 
    
         }
    
            printf("\r\n");
    

    此代码将 CAN 接收到的消息转换为串行(您的串行波特率应为 115200)(并且您的 CAN 波特率必须为 500k) 然后将开发板连接到 PC 上的串行监视器 您应该会看到内部汽车发送接收消息,例如:

    idv: 0 exID: 80012CC ID: 43F DLC: 08 DATA: 00  40  60  FF  68  48  09  00 
    idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
    idv: 0 exID: 80012CC ID: 440 DLC: 08 DATA: FF  00  00  00  FF  47  09  00 
    idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
    idv: 0 exID: 80012CC ID: 545 DLC: 08 DATA: 80  47  00  8B  00  00  00  00 
    idv: 0 exID: 80012CC ID: 690 DLC: 08 DATA: 00  00  00  00  00  00  0C  00 
    idv: 0 exID: 80012CC ID: 7DF DLC: 08 DATA: 02  01  0C  00  00  00  00  00 
    idv: 0 exID: 80012CC ID: 7E8 DLC: 08 DATA: 04  41  0C  09  C8  00  00  00 
    idv: 0 exID: 80012CC ID: 545 DLC: 08 DATA: 80  00  00  8A  00  00  00  00 
    idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
    idv: 0 exID: 80012CC ID: 440 DLC: 08 DATA: FF  00  00  00  FF  4D  09  00 
    idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
    idv: 0 exID: 80012CC ID: 545 DLC: 08 DATA: 80  00  00  8C  00  00  00  00 
    idv: 0 exID: 80012CC ID: 440 DLC: 08 DATA: FF  00  00  00  FF  4F  09  00 
    idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
    idv: 0 exID: 80012CC ID: 440 DLC: 08 DATA: FF  00  00  00  FF  52  09  00 
    idv: 0 exID: 80012CC ID: 545 DLC: 08 DATA: 80  00  00  8A  00  00  00  00 
    idv: 0 exID: 80012CC ID: 580 DLC: 08 DATA: 00  00  00  00  00  00  00  00 
    idv: 0 exID: 80012CC ID: 690 DLC: 08 DATA: 00  00  00  00  00  00  10  00 
    idv: 0 exID: 80012CC ID: 7DF DLC: 08 DATA: 02  01  0C  00  00  00  00  00 
    idv: 0 exID: 80012CC ID: 329 DLC: 08 DATA: 86  BD  6B  10  11  20  00  14 
    idv: 0 exID: 80012CC ID: 7E8 DLC: 08 DATA: 04  41  0C  09  DC  00  00  00 
     ...
    

    【讨论】:

      【解决方案2】:

      非常感谢您的回复!我确定我的车有 CAN-BUS .. 我会试试你的例子,看看串行中是否有数据 .. 我还想知道为什么在你的 Main.C 中你需要蓝牙和 K-Line 功能 ..但是你不调用 CAN 函数?

      【讨论】:

        【解决方案3】:

        您可以在 OBDII.C 上查看 CAN 功能 在第一个 src 检测 OBDII 协议并初始化端口 之后,当您要发送或接收OBDII数据时,src使用检测到的协议连接OBDII

        所以CAN功能在OBDII.C的低层

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多