跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. YTM32B1MD1 SENT解析EPS hella sent 1.65us信号

YTM32B1MD1 SENT解析EPS hella sent 1.65us信号

已定时 已固定 已锁定 已移动 已解决 YTM32B1M系列
can
9 帖子 3 发布者 2.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • YaojianyongY 离线
    YaojianyongY 离线
    YaoJianyong
    写于 最后由 编辑
    #1

    YTM32芯片手册SENT解析 的1TICK在3us到90us之间,但是EPS hella传感器sent有两路了是1.65us的,是不是就不能解析?cec8fb37fc6a2b9fd083fb0ea53960ef.png 但是EPS的传感器信号时间小于3us 6517d626f765e22ff5c9ab3e7cee6535.png

    1 条回复 最后回复
    0
    • DigaD 离线
      DigaD 离线
      Diga
      写于 最后由 编辑
      #4

      是的,MD1 只支持两路 SENT 通道,如果这三路 SENT 是同时发送数据,那 HA01 是更好的选择

      1 条回复 最后回复
      0
      • DigaD 离线
        DigaD 离线
        Diga
        写于 最后由 编辑
        #2

        可以支持,但是 SDK 不支持配置,需要自己手动修改寄存器来满足该 Tick 值,具体请参考 CH_CLK 寄存器描述
        1e0bbb86-1007-45a8-970a-366fe7eeb376-image.png

        1 条回复 最后回复
        0
        • YaojianyongY 离线
          YaojianyongY 离线
          YaoJianyong
          写于 最后由 编辑
          #3

          那YTM32B1MD1只有两个SENT通道,但传感器的SENT是3路,那么只有更换为YTM32B1HA01系列来采集嘛?

          1 条回复 最后回复
          0
          • DigaD 离线
            DigaD 离线
            Diga
            写于 最后由 编辑
            #4

            是的,MD1 只支持两路 SENT 通道,如果这三路 SENT 是同时发送数据,那 HA01 是更好的选择

            1 条回复 最后回复
            0
            • YaojianyongY 离线
              YaojianyongY 离线
              YaoJianyong
              写于 最后由 编辑
              #5

              测试SENT例程只运行一次,请问怎么周期性采集SENT信号呢?

              1 条回复 最后回复
              0
              • HAIYANGH 离线
                HAIYANGH 离线
                HAIYANG YunTu
                写于 最后由 编辑
                #6

                具体哪个demo,正常只要你SENT信号在发,中断就会一直进的,也能一直采集SENT信号的

                1 条回复 最后回复
                0
                • YaojianyongY 离线
                  YaojianyongY 离线
                  YaoJianyong
                  写于 最后由 编辑
                  #7

                  /* USER CODE BEGIN Header /
                  /
                  you can remove the copyright /
                  /

                  • Copyright 2020-2025 Yuntu Microelectronics Co., Ltd.
                  • All rights reserved.
                  • SPDX-License-Identifier: BSD-3-Clause
                  • @file main.c
                  • @brief

                  */

                  /* USER CODE END Header /
                  #include "sdk_project_config.h"
                  /
                  Includes ------------------------------------------------------------------*/

                  /* Private includes ----------------------------------------------------------/
                  /
                  USER CODE BEGIN Includes /
                  #include "printf.h"
                  /
                  USER CODE END Includes */

                  /* Private typedef -----------------------------------------------------------/
                  /
                  USER CODE BEGIN PTD /
                  /
                  USER CODE END PTD */

                  /* Private define ------------------------------------------------------------/
                  /
                  USER CODE BEGIN PD */
                  //#define INST_UART (0)

                  #define CAN1_INST (0U)

                  #define RX_STD_MSG_ID (0x03UL)
                  #define RX_STD_MAILBOX (0x00UL)

                  #define TX_MSG1_ID (0x133UL)
                  #define TX_MAILBOX1 (0x01UL)

                  #define TX_MSG2_ID (0x134UL)
                  #define TX_MAILBOX2 (0x02UL)

                  #define TX_MSG3_ID (0x135UL)
                  #define TX_MAILBOX3 (0x03UL)

                  #define LED_B_TOGGLE() (PINS_DRV_TogglePins(GPIOB, (pins_channel_type_t)1 << 4U))
                  #define LED_R_TOGGLE() (PINS_DRV_TogglePins(GPIOE, (pins_channel_type_t)1 << 8U))

                  /* USER CODE END PD */

                  /* Private macro -------------------------------------------------------------/
                  /
                  USER CODE BEGIN PM /
                  /
                  USER CODE END PM */

                  /* Private variables ---------------------------------------------------------/
                  /
                  USER CODE BEGIN PV */
                  sent_raw_msg_t fastMessageBuffer;
                  sent_raw_msg_t slowMessageBuffer;
                  sent_fast_msg_t fastMessage[SENT_CH_COUNT];
                  sent_slow_msg_t slowMessage[SENT_CH_COUNT];

                  uint32_t fastMsgCnt[SENT_CH_COUNT] = { 0, 0 };
                  uint32_t slowMsgCnt[SENT_CH_COUNT] = { 0, 0 };

                  uint16_t SENT_T1,SENT_T2,SUM_T;

                  flexcan_msgbuff_t rxStdMsg1;
                  flexcan_msgbuff_t rxExtMsg1;

                  //define can tx message
                  flexcan_msgbuff_t txMsg1 = {
                  .cs = 0U,
                  .msgId = TX_MSG1_ID,
                  .data[0] = 0x00,
                  .dataLen = 1U,
                  };

                  flexcan_msgbuff_t txMsg2 = {
                  .cs = 0U,
                  .msgId = TX_MSG2_ID,
                  .data[0] = 0x00,
                  .dataLen = 1U,
                  };

                  flexcan_msgbuff_t txMsg3 = {
                  .cs = 0U,
                  .msgId = TX_MSG3_ID,
                  .data[0] = 0x00,
                  .dataLen = 1U,
                  };

                  const flexcan_data_info_t txMbStdInfo1 = {
                  .msg_id_type = FLEXCAN_MSG_ID_STD,
                  .data_length = 8,
                  .fd_enable = false,
                  .fd_padding = 0,
                  .enable_brs = false,
                  .is_remote = false,
                  };

                  //define can rx message
                  const flexcan_data_info_t rxMbStdInfo1 = {
                  .msg_id_type = FLEXCAN_MSG_ID_STD,
                  .data_length = 8,
                  .fd_enable = false,
                  .fd_padding = 0,
                  .enable_brs = false,
                  .is_remote = false,
                  };

                  volatile bool canError = false;
                  /* USER CODE END PV */

                  /* Private function declare --------------------------------------------------/
                  /
                  USER CODE BEGIN PFDC /
                  /
                  USER CODE END PFDC */
                  static void Board_Init(void);

                  /* Private user code ---------------------------------------------------------/
                  /
                  USER CODE BEGIN 0 /
                  /
                  Callback for SENT handler */
                  void sentNotification(uint32_t instance, uint32_t channel, sent_callback_type_t type, void *param)
                  {
                  (void)param;
                  (void)instance;
                  (void)channel;
                  sent_fast_msg_t fastMsgDMA;
                  sent_slow_msg_t slowMsgDMA;
                  switch (type)
                  {
                  case SENT_CALLBACK_SLOW_DMA_RX_COMPLETE:
                  SENT_DRV_GetSlowMsgFromRaw(&slowMsgDMA, &slowMessageBuffer);
                  slowMessage[slowMsgDMA.channelNumber] = slowMsgDMA;
                  slowMsgCnt[slowMsgDMA.channelNumber]++;
                  break;

                      case SENT_CALLBACK_FAST_DMA_RX_COMPLETE:
                          SENT_DRV_GetFastMsgFromRaw(&fastMsgDMA, &fastMessageBuffer);
                          fastMessage[fastMsgDMA.channelNumber] = fastMsgDMA;
                          fastMsgCnt[fastMsgDMA.channelNumber]++;
                          break;
                  
                      case SENT_CALLBACK_SLOW_RX_COMPLETE:
                          break;
                  
                      case SENT_CALLBACK_FAST_RX_COMPLETE:
                          break;
                  
                      case SENT_CALLBACK_RX_ERROR:
                          break;
                  
                      default:
                          break;
                  }
                  

                  }

                  /* Printf current slow message and short message /
                  void sent_print_msg(uint8_t ch)
                  {
                  PRINTF("
                  ********* CH %d **********\n", ch);
                  if (SENT_SLOW_TYPE_SHORT == slowMessage[ch].type)
                  {
                  PRINTF("Short message cnt %d data = %x, TS = %x, crc = %x, id = %x\n",
                  slowMsgCnt[ch],
                  slowMessage[ch].data,
                  slowMessage[ch].timeStamp,
                  slowMessage[ch].crc,
                  slowMessage[ch].id);
                  }
                  else if (SENT_SLOW_TYPE_ENHANCED_4_BIT == slowMessage[ch].type)
                  {
                  PRINTF("Enhance message with 4-bit cnt %d data = %x, TS = %x, crc = %x, id = %x\n",
                  slowMsgCnt[ch],
                  slowMessage[ch].data,
                  slowMessage[ch].timeStamp,
                  slowMessage[ch].crc,
                  slowMessage[ch].id);
                  }
                  else if (SENT_SLOW_TYPE_ENHANCED_8_BIT == slowMessage[ch].type)
                  {
                  PRINTF("Enhance message with 8-bit cnt %d data = %x, TS = %x, crc = %x, id = %x\n",
                  slowMsgCnt[ch],
                  slowMessage[ch].data,
                  slowMessage[ch].timeStamp,
                  slowMessage[ch].crc,
                  slowMessage[ch].id);
                  }

                  PRINTF("Fast message cnt %d data = %x, TS = %x, crc = %x\n",
                         fastMsgCnt[ch],
                         fastMessage[ch].data,
                         fastMessage[ch].timeStamp,
                         fastMessage[ch].crc);
                  

                  }
                  /* USER CODE END 0 */

                  /**

                  • @brief The application entry point.

                  • @retval int
                    /
                    int main(void)
                    {
                    /
                    USER CODE BEGIN 1 */
                    status_t status = STATUS_SUCCESS;
                    uint8_t can1RxFrameCnt = 0;

                    /* USER CODE END 1 /
                    Board_Init();
                    /
                    USER CODE BEGIN 2 */
                    OSIF_TimeDelay(1000);

                    SENT_DRV_Deinit(0);

                    status |= FLEXCAN_DRV_ConfigRxMb(CAN1_INST, RX_STD_MAILBOX, &rxMbStdInfo1, RX_STD_MSG_ID);

                    /* Start receiving data in RX_STD_MAILBOX. */
                    status |= FLEXCAN_DRV_Receive(CAN1_INST, RX_STD_MAILBOX, &rxStdMsg1);

                    /* USER CODE END 2 */

                    /* Infinite loop /
                    /
                    USER CODE BEGIN WHILE */
                    while (1)
                    {
                    OSIF_TimeDelay(10);

                    SENT_DRV_Deinit(0);

                    txMsg1.data[0] = (fastMessage[0].data&0xff000000)>>24;
                    txMsg1.data[1] = (fastMessage[0].data&0xff0000)>>16;
                    txMsg1.data[2] = (fastMessage[0].data&0xff00)>>8;
                    txMsg1.data[3] = fastMessage[0].data&0xff;
                    txMsg1.data[4] = (fastMessage[1].data&0xff000000)>>24;
                    txMsg1.data[5] = (fastMessage[1].data&0xff0000)>>16;
                    txMsg1.data[6] = (fastMessage[1].data&0xff00)>>8;
                    txMsg1.data[7] = fastMessage[1].data&0xff;

                    //SENT_T1
                    txMsg2.data[0] = (fastMessage[0].data&0xff00)>>8;
                    txMsg2.data[1] = (fastMessage[0].data&0xf0)>>4;
                    SENT_T1 = (uint16_t)((uint16_t)txMsg2.data[0]+(((uint16_t)txMsg2.data[1])<<8));
                    //SENT_T2
                    txMsg2.data[2] = (fastMessage[1].data&0xff00)>>8;
                    txMsg2.data[3] = (fastMessage[1].data&0xf0)>>4;
                    SENT_T2 = (uint16_t)((uint16_t)txMsg2.data[2]+(((uint16_t)txMsg2.data[3])<<8));
                    SUM_T = SENT_T1+SENT_T2;
                    //SENT_P1
                    txMsg2.data[4] = (fastMessage[0].data&0xff00000)>>20;
                    txMsg2.data[5] = (fastMessage[0].data&0xf0000)>>16;
                    //SENT_P2
                    txMsg2.data[6] = (fastMessage[1].data&0xff00000)>>20;
                    txMsg2.data[7] = (fastMessage[1].data&0xf0000)>>16;

                    txMsg3.data[0] = SUM_T&0xff;
                    txMsg3.data[1] = (SUM_T&0xff00)>>8;
                    txMsg3.data[2] = 0;
                    txMsg3.data[3] = 0;
                    txMsg3.data[4] = 0;
                    txMsg3.data[5] = 0;
                    txMsg3.data[6] = 0;
                    txMsg3.data[7] = 0;

                    if (FLEXCAN_DRV_GetTransferStatus(CAN1_INST, TX_MAILBOX1) != STATUS_BUSY)
                    {
                    status |= FLEXCAN_DRV_Send(CAN1_INST, TX_MAILBOX1, &txMbStdInfo1, TX_MSG1_ID, txMsg1.data);
                    }

                    if (FLEXCAN_DRV_GetTransferStatus(CAN1_INST, TX_MAILBOX2) != STATUS_BUSY)
                    {
                    status |= FLEXCAN_DRV_Send(CAN1_INST, TX_MAILBOX2, &txMbStdInfo1, TX_MSG2_ID, txMsg2.data);
                    }

                    if (FLEXCAN_DRV_GetTransferStatus(CAN1_INST, TX_MAILBOX3) != STATUS_BUSY)
                    {
                    status |= FLEXCAN_DRV_Send(CAN1_INST, TX_MAILBOX3, &txMbStdInfo1, TX_MSG3_ID, txMsg3.data);
                    }

                    if (FLEXCAN_DRV_GetTransferStatus(CAN1_INST, RX_STD_MAILBOX) != STATUS_BUSY)
                    {
                    can1RxFrameCnt++;
                    LED_B_TOGGLE();

                       /* Start receiving data in RX_STD_MAILBOX. */
                       status |= FLEXCAN_DRV_Receive(CAN1_INST, RX_STD_MAILBOX, &rxStdMsg1);
                    

                    }

                     /* USER CODE END WHILE */
                     /* USER CODE BEGIN 3 */
                    

                    }
                    /* USER CODE END 3 */
                    }

                  static void Board_Init(void)
                  {
                  CLOCK_SYS_Init(g_clockManConfigsArr,CLOCK_MANAGER_CONFIG_CNT,g_clockManCallbacksArr,CLOCK_MANAGER_CALLBACK_CNT);
                  if(STATUS_SUCCESS != CLOCK_SYS_UpdateConfiguration(CLOCK_MANAGER_ACTIVE_INDEX,CLOCK_MANAGER_POLICY_AGREEMENT))
                  {
                  /* USER CODE BEGIN ERROR_HANDLER 1 /
                  SystemSoftwareReset();
                  /
                  USER CODE END ERROR_HANDLER 1 */
                  }
                  PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0,g_pin_mux_InitConfigArr0);

                  // LINFlexD_UART_DRV_Init(INST_UART,&linflexd_uart_config0_State,&linflexd_uart_config0);
                  // UTILITY_PRINT_Init();

                  DMA_DRV_Init(&dmaState,&dmaController_InitConfig,dmaChnState,dmaChnConfigArray,NUM_OF_CONFIGURED_DMA_CHANNEL);
                  SENT_DRV_Init(0,&sentUserConfig,&sentState);     
                  
                  FLEXCAN_DRV_Init(CAN1_INST,&flexcanInitConfig0_State,&flexcanInitConfig0); 
                  

                  }

                  /* USER CODE BEGIN 4 */

                  /* USER CODE END 4 */
                  我参考SENT_DMA_DEMO和CAN DEMO做的,上电后CAN发送OK的,但是数据不再变化了。

                  1 条回复 最后回复
                  0
                  • YaojianyongY 离线
                    YaojianyongY 离线
                    YaoJianyong
                    写于 最后由 编辑
                    #8

                    b2ad8db10e59645395fb869e704d944c.png

                    1 条回复 最后回复
                    0
                    • YaojianyongY 离线
                      YaojianyongY 离线
                      YaoJianyong
                      写于 最后由 编辑
                      #9

                      c2e07adb12c3efdb1ad70c69a4bf355a.png找到原因了,例程中这个函数是复位函数,不能去调用。解决了。

                      1 条回复 最后回复
                      0
                      • ,FrankieF Frankie 将这个主题转为问答主题
                      • ,FrankieF Frankie 将这个主题标记为已解决

                    • 云途开发生态介绍

                      快速上手云途开发生态

                    • 云途论坛规则/Yuntu Forum Rules

                      发帖前请查看

                    • YT CONFIG TOOL调查问卷

                      帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

                    • can
                      25
                      demo
                      22
                      lin stack
                      13
                      uds
                      13
                      md14
                      6
                      yt-link
                      6
                      fbl
                      5
                      adc模块
                      4
                      Online Users
                      Xdj1X
                      Xdj1
                      • 登录

                      • 登录或注册以进行搜索。
                      • 第一个帖子
                        最后一个帖子
                      0
                      • 版块
                      • 最新
                      • 标签
                      • 热门