在线时间20 小时
UID197370
注册时间2019-9-21
NXP金币0
TA的每日心情 | 开心 2021-5-17 17:00 |
---|
签到天数: 14 天 [LV.3]偶尔看看II
中级会员
- 积分
- 277
- 最后登录
- 2022-1-4
|
我从官网上修改引脚过来的程序初始化如下:
mcan_config_t mcanConfig;
mcan_frame_filter_config_t rxFilter;
mcan_ext_filter_element_config_t extFilter;
mcan_rx_fifo_config_t rxFifo0;
mcan_tx_buffer_config_t txBuffer;
uint8_t node_type;
uint8_t numMessage = 0;
uint8_t cnt = 0;
// Set MCAN clock 180/6=30MHz. /
// 引脚配置:
IOCON->PIO[1][2] = ((IOCON->PIO[1][2] &
// Mask bits to zero which are setting //
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
// Selects pin function.
// * : PORT12 (pin 117) is configured as CAN0_TD. //
| IOCON_PIO_FUNC(PIO12_FUNC_ALT1)
// Select Analog/Digital mode.
// : Digital mode. /
| IOCON_PIO_DIGIMODE(PIO12_DIGIMODE_DIGITAL));
IOCON->PIO[1][3] = ((IOCON->PIO[1][3] &
// Mask bits to zero which are setting //
(~(IOCON_PIO_FUNC_MASK | IOCON_PIO_DIGIMODE_MASK)))
// Selects pin function.
// * : PORT13 (pin 120) is configured as CAN0_RD. //
| IOCON_PIO_FUNC(PIO13_FUNC_ALT1)
// Select Analog/Digital mode.
// * : Digital mode. //
| IOCON_PIO_DIGIMODE(PIO13_DIGIMODE_DIGITAL));
// 时钟源配置
CLOCK_SetClkDiv(kCLOCK_DivCan0Clk, 6U, true);
MCAN_GetDefaultConfig(&mcanConfig);
#if (defined(USE_IMPROVED_TIMING_CONFIG) && USE_IMPROVED_TIMING_CONFIG)
mcan_timing_config_t timing_config;
memset(&timing_config, 0, sizeof(timing_config));
if (MCAN_CalculateImprovedTimingValues(mcanConfig.baudRateA, MCAN_CLK_FREQ, &timing_config))
{
/* Update the improved timing configuration*/
memcpy(&(mcanConfig.timingConfig), &timing_config, sizeof(mcan_timing_config_t));
}
else
{
// PRINTF("No found Improved Timing Configuration. Just used default configuration\r\n\r\n");
}
#endif
// 基础配置
MCAN_Init(EXAMPLE_MCAN, &mcanConfig, MCAN_CLK_FREQ);
// Create MCAN handle structure and set call back function. //
MCAN_TransferCreateHandle(EXAMPLE_MCAN, &mcanHandle, mcan_callback, NULL);
// Set Message RAM base address and clear to avoid BEU/BEC error. //
MCAN_SetMsgRAMBase(EXAMPLE_MCAN, MSG_RAM_BASE);
uint32_t *p = (uint32_t *)(MSG_RAM_BASE);
memset(p, 0, (8U + CAN_DATASIZE) * sizeof(uint8_t));
/* STD filter config. */
rxFilter.address = STD_FILTER_OFS;
rxFilter.idFormat = kMCAN_FrameIDExtend;
rxFilter.listSize = 0U;
rxFilter.nmFrame = kMCAN_acceptinFifo0;
rxFilter.remFrame = kMCAN_filterFrame;
MCAN_SetFilterConfig(EXAMPLE_MCAN, &rxFilter);
extFilter.efec=kMCAN_disable;
extFilter.eft=kMCAN_range;
extFilter.efid1=0; // : 29; /*!< Extended Filter ID 1. */
extFilter.efid2=0x1fffffff;// : 29; /*!< Extended Filter ID 2. */
MCAN_SetEXTFilterElement(EXAMPLE_MCAN, &rxFilter,&extFilter,0);
/* RX fifo0 config. */
rxFifo0.address = RX_FIFO0_OFS;
rxFifo0.elementSize = 1U;
rxFifo0.watermark = 0;
rxFifo0.opmode = kMCAN_FifoBlocking;
rxFifo0.datafieldSize = kMCAN_8ByteDatafield;
MCAN_SetRxFifo0Config(EXAMPLE_MCAN, &rxFifo0);
/* TX buffer config. */
memset(&txBuffer, 0, sizeof(txBuffer));
txBuffer.address = TX_BUFFER_OFS;
txBuffer.dedicatedSize = 1U;
txBuffer.fqSize = 0;
txBuffer.datafieldSize = kMCAN_8ByteDatafield;
MCAN_SetTxBufferConfig(EXAMPLE_MCAN, &txBuffer);
/* Finish software initialization and enter normal mode, synchronizes to
CAN bus, ready for communication */
MCAN_EnterNormalMode(EXAMPLE_MCAN);
// -------------------------------------------------------------------------------------------------------------------------------------------------------------
// 以下为发送 部分:
// ----------- 1秒计时 --------------
if(uiCAN0RunT<1000) return;
uiCAN0RunT=0;
// Test_LED_TOGGLE();
// Config TX frame data. //
txIdentifier=0x1826f456U;
tx_data[0] =0x01;
tx_data[1] =0x01;
tx_data[2] =0x00;
tx_data[3] =0xff;
tx_data[4] =0xff;
tx_data[5] =0xff;
tx_data[6] =0xff;
tx_data[7] =0xff;
txFrame.xtd = kMCAN_FrameIDExtend; // kMCAN_FrameIDStandard;
txFrame.rtr = kMCAN_FrameTypeData; // kMCAN_FrameTypeRemote; // kMCAN_FrameTypeData;
txFrame.fdf = 0;
txFrame.brs = 0;
txFrame.id =txIdentifier;// txIdentifier << STDID_OFFSET;
txFrame.data = tx_data;
txFrame.size = CAN_DATASIZE;
txFrame.fdf = 0; // 1;
txFrame.brs = 1;
txFrame.dlc = 6;
txXfer.frame = &txFrame;
txXfer.bufferIdx = 0;
MCAN_TransferSendNonBlocking(EXAMPLE_MCAN, &mcanHandle, &txXfer);
// ------------------------------------------------------------------------------------------------------------------------------------------------------
最佳答案
本帖最后由 zmh169 于 2020-7-2 10:21 编辑
问题描述不具体:是代码卡死在哪了?还是代码正常跑,但CAN总线收发不到数据?先确保CAN收发硬件没问题。排除硬件问题那估计是初始化问题,试试增加GPIO时钟使能看看。 ...
|
|