YTM32B1MD14GMLHT配置SENT检测不到报文
-
我配置代码如下所示
const sent_channel_config_t sentChannelConfig[2] = { /* sent_channel_config0 */ { .channelId = 0, .tickDuration = 1, .inputFilter = 2, .diagConfig = { .diagEvents = ( SENT_EV_CAL_RESYNC | SENT_EV_CAL_20_25 | SENT_EV_SMSG_OFLW | SENT_EV_FMSG_OFLW | SENT_EV_PP_DIAG_ERR | SENT_EV_CAL_LEN_ERR | SENT_EV_CAL_DIAG_ERR | SENT_EV_NIB_VAL_ERR | SENT_EV_SMSG_CRC_ERR | SENT_EV_FMSG_CRC_ERR | SENT_EV_NUM_EDGES_ERR | SENT_EV_NONE ), .idleCount = SENT_BUS_IDLE_DISABLED, .calibVar = SENT_CALIB_VAR_25_PERCENT, .diagPulse = SENT_PULSE_CHECK_BOTH, .pausePulse = SENT_PAUSE_PULSE_ENABLED, .succesiveCal = SENT_SUCC_CAL_CHK_LOW_LATENCY }, .fastMsgConfig = { .numberOfNibbles = 5, .dmaEnable = false, .crcIncludeStatus = false, .disableCrcCheck = false, .crcType = SENT_CRC_RECOMMENDED, }, .slowMsgConfig = { .dmaEnable = false, .crcType = SENT_CRC_RECOMMENDED, } }, /* sent_channel_config1 */ { .channelId = 1, .tickDuration = 1, .inputFilter = 2, .diagConfig = { .diagEvents = ( SENT_EV_CAL_RESYNC | SENT_EV_CAL_20_25 | SENT_EV_SMSG_OFLW | SENT_EV_FMSG_OFLW | SENT_EV_PP_DIAG_ERR | SENT_EV_CAL_LEN_ERR | SENT_EV_CAL_DIAG_ERR | SENT_EV_NIB_VAL_ERR | SENT_EV_SMSG_CRC_ERR | SENT_EV_FMSG_CRC_ERR | SENT_EV_NUM_EDGES_ERR | SENT_EV_NONE ), .idleCount = SENT_BUS_IDLE_DISABLED, .calibVar = SENT_CALIB_VAR_25_PERCENT, .diagPulse = SENT_PULSE_CHECK_BOTH, .pausePulse = SENT_PAUSE_PULSE_ENABLED, .succesiveCal = SENT_SUCC_CAL_CHK_LOW_LATENCY }, .fastMsgConfig = { .numberOfNibbles = 5, .dmaEnable = false, .crcIncludeStatus = false, .disableCrcCheck = false, .crcType = SENT_CRC_RECOMMENDED, }, .slowMsgConfig = { .dmaEnable = false, .crcType = SENT_CRC_RECOMMENDED, } }, }; /* SENT user configuration */ const sent_driver_user_config_t sentUserConfig = { .fastMsgDmaPtr = NULL, .slowMsgDmaPtr = NULL, .fastDmaChannel = 0, .slowDmaChannel = 0, .callbackFunc = { .function = sentNotification, .param = NULL, }, .fastDmaFIFOEnable = false, .fastDmaFIFOSize = 0, .channelConfig = (const sent_channel_config_t *)sentChannelConfig, .numOfConfigs = 2, }; sent_state_t sentState;
我使用tick为1us,Fast Message Nibbles为5的报文。
输入波形如图所示
我的单片机无法检测到sent报文的存在,并且无法定位错误。
测试主函数如下/* USER CODE BEGIN Header */ /* you can remove the copyright */ /* * Copyright 2020-2024 Yuntu Microelectronics co.,ltd * All rights reserved. * * YUNTU Confidential. This software is owned or controlled by YUNTU and may only be * used strictly in accordance with the applicable license terms. By expressly * accepting such terms or by downloading, installing, activating and/or otherwise * using the software, you are agreeing that you have read, and that you agree to * comply with and are bound by, such license terms. If you do not agree to be * bound by the applicable license terms, then you may not retain, install, * activate or otherwise use the software. The production use license in * Section 2.3 is expressly granted for this software. * * @file main.c * @brief * */ /* USER CODE END Header */ #include "sdk_project_config.h" /* Includes ------------------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ /* 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 */ /* Define receive buffer */ flexcan_msgbuff_t rxStdMsg; flexcan_msgbuff_t rxExtMsg; /* Prepare message to be sent */ #define RX_STD_MSG_ID (0x02UL) #define RX_STD_MAILBOX (0x00UL) #define RX_EXTMSG_ID (0x70012UL) #define RX_EXT_MAILBOX (0x02UL) #define TX_MSG_ID (0x03UL) #define TX_MAILBOX (0x01UL) flexcan_msgbuff_t txMsg = { .cs = 0U, .msgId = TX_MSG_ID, .data[0] = 0x00, .dataLen = 1U, }; const flexcan_data_info_t rxMbExtInfo = { .msg_id_type = FLEXCAN_MSG_ID_STD, .data_length = 8, .fd_enable = false, .fd_padding = 0, .enable_brs = false, .is_remote = false, }; const flexcan_data_info_t rxMbStdInfo = { .msg_id_type = FLEXCAN_MSG_ID_STD, .data_length = 8, .fd_enable = false, .fd_padding = 0, .enable_brs = false, .is_remote = false, }; const flexcan_data_info_t txMbStdInfo = { .msg_id_type = FLEXCAN_MSG_ID_STD, .data_length = 8, .fd_enable = false, .fd_padding = 0, .enable_brs = false, .is_remote = false, }; #define SENT_INST (0) sent_fast_msg_t fastMessage[SENT_CH_COUNT]; sent_slow_msg_t slowMessage[SENT_CH_COUNT]; sent_event_t activeEvents[SENT_CH_COUNT]; uint32_t fast_msg_cnt [SENT_CH_COUNT] = {0, 0}; uint32_t slow_msg_cnt [SENT_CH_COUNT] = {0, 0}; uint32_t error_msg_cnt[SENT_CH_COUNT] = {0, 0}; uint32_t error_msg_sts[SENT_CH_COUNT] = {0, 0}; /* Callback for SENT handler */ void sentNotification(uint32_t instance, uint32_t channel, sent_callback_type_t type, void * param) { (void)param; switch(type) { case SENT_CALLBACK_SLOW_DMA_RX_COMPLETE: break; case SENT_CALLBACK_FAST_DMA_RX_COMPLETE: break; case SENT_CALLBACK_SLOW_RX_COMPLETE: SENT_DRV_GetSlowMsg(instance, channel, &slowMessage[channel]); slow_msg_cnt[channel]++; break; case SENT_CALLBACK_FAST_RX_COMPLETE: SENT_DRV_GetFastMsg(instance, channel, &fastMessage[channel]); fast_msg_cnt[channel]++; break; case SENT_CALLBACK_RX_ERROR: SENT_DRV_GetEvents(instance, channel, &activeEvents[channel]); error_msg_cnt[channel]++; break; default: break; } } /* Printf current slow message and short message */ void sent_print_msg(uint8_t ch) { uint8_t A = 0; if (SENT_SLOW_TYPE_SHORT == slowMessage[ch].type) { A++; } else if (SENT_SLOW_TYPE_ENHANCED_4_BIT == slowMessage[ch].type) { A++; } else if (SENT_SLOW_TYPE_ENHANCED_8_BIT == slowMessage[ch].type) { A++; } } /* 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 canRxFrameCnt = 0; /* Initialize clocks*/ status |= CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT); status |= CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT); if (status != STATUS_SUCCESS) { return STATUS_ERROR; } /* USER CODE END 1 */ Board_Init(); /* USER CODE BEGIN 2 */ PINS_DRV_WritePin(GPIOE,2,0); /* Initialize pins */ status |= PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0); PINS_DRV_WritePin(GPIOE,2,0); status |= FLEXCAN_DRV_Init(flexcanInitConfig0_INST, &flexcanInitConfig0_State, &flexcanInitConfig0); status |= FLEXCAN_DRV_ConfigRxMb(flexcanInitConfig0_INST, RX_STD_MAILBOX, &rxMbStdInfo, RX_STD_MSG_ID); status |= FLEXCAN_DRV_ConfigRxMb(flexcanInitConfig0_INST, RX_EXT_MAILBOX, &rxMbExtInfo, RX_EXTMSG_ID); // /* Start receiving data in RX_STD_MAILBOX. */ status |= FLEXCAN_DRV_Receive(flexcanInitConfig0_INST, RX_STD_MAILBOX, &rxStdMsg); status |= FLEXCAN_DRV_Receive(flexcanInitConfig0_INST, RX_EXT_MAILBOX, &rxExtMsg); /* Initialize SENT */ status |= SENT_DRV_Init(SENT_INST, &sentUserConfig, &sentState); OSIF_TimeDelay(1000); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ txMsg.data[0]++; if (FLEXCAN_DRV_GetTransferStatus(flexcanInitConfig0_INST, TX_MAILBOX) != STATUS_BUSY) { status |= FLEXCAN_DRV_Send(flexcanInitConfig0_INST, TX_MAILBOX, &txMbStdInfo, TX_MSG_ID, txMsg.data); } if (FLEXCAN_DRV_GetTransferStatus(flexcanInitConfig0_INST, RX_STD_MAILBOX) != STATUS_BUSY) { canRxFrameCnt++; /* Start receiving data in RX_STD_MAILBOX. */ status |= FLEXCAN_DRV_Receive(flexcanInitConfig0_INST, RX_STD_MAILBOX, &rxStdMsg); } if (FLEXCAN_DRV_GetTransferStatus(flexcanInitConfig0_INST, RX_EXT_MAILBOX) != STATUS_BUSY) { canRxFrameCnt++; /* Start receiving data in RX_STD_MAILBOX. */ status |= FLEXCAN_DRV_Receive(flexcanInitConfig0_INST, RX_EXT_MAILBOX, &rxExtMsg); } if (canRxFrameCnt >= 10) { break; } sent_print_msg(0); sent_print_msg(1); OSIF_TimeDelay(100); } for (;;) { if (status != STATUS_SUCCESS) { break; } } return status; /* USER CODE END 3 */ } static void Board_Init(void) { } /* USER CODE BEGIN 4 */ /* USER CODE END 4 */
能否提供更详细的说明文档,感谢。
-
Diga 在 YTM32B1MD14GMLHT配置SENT检测不到报文 中说:
不是
你可以把你的 SENT 波形发一下,.dsl
非常感谢您的回复,抓取的波形如下,我的sent协议是SPC带触发的触发为17个tick的低电平,tick = 1us,数据段为4个字节。
[f2c5ca14-0980-454a-8db1-767fefe53432-DSLogic-la-250521-092604.dsl](无效文件格式,允许的格式有:.png, .jpg, .bmp, .txt, .webp, .webm, .mp4, .gif, .hex, .bin, .s19, .elf, .zip, .patch, .pdf, .yct, .jpeg)
.dsl格式文件好像无法上传,所以我压缩了下。DSLogic-la-250521-092604.zip -
你把 SENT 的配置中的 Tick Duration 改为 1,Nibble 个数改为 4 再试试
https://forum.ytmicro.com/topic/365/使用-ytm32b1ha01-实现-spc-通信
-
Diga 在 YTM32B1MD14GMLHT配置SENT检测不到报文 中说:
你把 SENT 的配置中的 Tick Duration 改为 1,Nibble 个数改为 4 再试试
https://forum.ytmicro.com/topic/365/使用-ytm32b1ha01-实现-spc-通信
非常感谢您的帮助,我解决了我的问题,我犯了一个非常愚蠢的问题,我的配置都没有什么问题,只是因为忘了配置sent的引脚。
发帖前请查看
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...