完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们正在研究 flexcan1 ,能够使用 flexcan1 接收单个 id 帧,我们做了以下设置 我们配置 10 MB ****************************************************** ****************************************************** #define RX_MESSAGE_BUFFER_NUM (10) #define TX_MESSAGE_BUFFER_NUM (9) #定义 DLC (8) #define BUF_SIZE (13) ****************************************************** ****************************************************** flexcan_frame_t rxFrame; volatile bool rxComplete = false; uint8_t RX_BUF[BUF_SIZE]; ****************************************************** ****************************************************** /* * 这部分是中断服务程序的实现,当有新数据到达时调用 * 当调用 ISR 时,它首先检查指示新数据已到达 RX_MESSAGE_BUFFER_NUM 的标志的状态 * 如果设置了标志,则清除标志,然后从消息缓冲区中读取数据到 rxFrame * 设置 rxComplete 变量表示新消息已经收到 * 调用 SDK_ISR_EXIT_BARRIER 退出 ISR */ ****************************************************** ****************************************************** void CAN1_FLEXCAN_IRQHANDLER(void) { uint64_t 标志 = 1U; /* 如果有新数据到达。*/ 如果(0U!= FLEXCAN_GetMbStatusFlags(CAN1_PERIPHERAL,标志 << RX_MESSAGE_BUFFER_NUM)) { FLEXCAN_ClearMbStatusFlags(CAN1_PERIPHERAL,标志 << RX_MESSAGE_BUFFER_NUM); (void)FLEXCAN_ReadRxMb(CAN1_PERIPHERAL, RX_MESSAGE_BUFFER_NUM, &rxFrame); 接收完成 = 真; } SDK_ISR_EXIT_BARRIER; } ****************************************************** ****************************************************** int 主要(无效) { uint64_t 标志 = 1U; BOARD_ConfigMPU(); BOARD_InitBootPins(); BOARD_InitBootClocks(); BOARD_InitBootPeripherals(); #ifndef BOARD_INIT_DEBUG_CONSOLE_PERIPHERAL /* 初始化 FSL 调试控制台。*/ BOARD_InitDebugConsole(); #万一 ***************************************************配置API* ****************************************************** * NVIC_SetPriority(CAN1_FLEXCAN_IRQN, CAN1_FLEXCAN_IRQ_PRIORITY); 启用IRQ(CAN1_FLEXCAN_IRQN); FLEXCAN_Init(CAN1_PERIPHERAL, &CAN1_config, CAN1_CLOCK_SOURCE); /* 消息缓冲区 0 初始化 */ FLEXCAN_SetRxMbConfig(CAN1_PERIPHERAL, 10, &CAN1_rx_mb_config_0, true); /* 启用 Rx 消息缓冲区中断。*/ FLEXCAN_EnableMbInterrupts(CAN1_PERIPHERAL,标志 << RX_MESSAGE_BUFFER_NUM); 而(1) { 如果(rxComplete == 真) { RX_BUF[0] = ((rxFrame.id>>2) >> 24 & (0xFFU)); RX_BUF[1] = ((rxFrame.id>>2) >> 16 & (0xFFU)); RX_BUF[2] = (rxFrame.length & (0xFFU)) ; RX_BUF[3] = (rxFrame.dataWord0 >> 24 & (0xFFU)); RX_BUF[4] = (rxFrame.dataWord0 >> 16 & (0xFFU)); RX_BUF[5] = (rxFrame.dataWord0 >> 8 & (0xFFU)); RX_BUF[6] = ((rxFrame.dataWord0 >> 0) & (0xFFU)); RX_BUF[7] = (rxFrame.dataWord1 >> 24 & (0xFFU)); RX_BUF[8] = ((rxFrame.dataWord1 >> 16) & (0xFFU)); RX_BUF[9] = ((rxFrame.dataWord1 >>& (0xFFU)); RX_BUF[10] = ((rxFrame.dataWord1 >> 0 ) & (0xFFU)); LPUART_WriteBlocking(LPUART1_PERIPHERAL,RX_BUF,sizeof(RX_BUF)); rxComplete = false; } } } 上面的代码适用于我们代码中的单帧我们需要为我们配置多个 消息缓冲区配置多个ID /* 消息缓冲区 0 初始化 - 10 MB */ FLEXCAN_SetRxMbConfig(CAN1_PERIPHERAL, 10, &CAN1_rx_mb_config_0, true); /* 消息缓冲区1初始化-11 MB数 */ FLEXCAN_SetRxMbConfig(CAN1_PERIPHERAL, 11, &CAN1_rx_mb_config_1, true); /* Message buffer 2初始化-12个MB */ FLEXCAN_SetRxMbConfig(CAN1_PERIPHERAL, 12, &CAN1_rx_mb_config_2, true); 还启用 rx msg 缓冲区 中断 IMASK 寄存器 /* 为 10 MB 启用 Rx 消息缓冲区中断。*/ FLEXCAN_EnableMbInterrupts(CAN1_PERIPHERAL,标志 << 10); /* Enable Rx Message Buffer interrupt.for 11 MB 数量。*/ FLEXCAN_EnableMbInterrupts(CAN1_PERIPHERAL,标志 << 11); /* 为 12 MB 启用 Rx 消息缓冲区中断。*/ FLEXCAN_EnableMbInterrupts(CAN1_PERIPHERAL,标志 << 12); 这里我们使用不同的MB为不同的ID但不能接收多个帧,请协助如何接收多个ID帧?Flexcan1是否有多个ID的SDK示例代码 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1932个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36421 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4867 浏览 1 评论
6108 浏览 1 评论
6818 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4249 浏览 0 评论
645浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
643浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
645浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
729浏览 2评论
844浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 20:46 , Processed in 1.002847 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号