YTM32B1MD1 SENT解析EPS hella sent 1.65us信号
-
/* 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的,但是数据不再变化了。
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...
但是EPS的传感器信号时间小于3us 


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