LPC55S16的Classical CAN 测试

发布时间:2024-08-19  

拿到LPC55S16的板卡好几天了,本来目标是测试CANFD和USB转换通信的,发现板卡上接的外设还挺多,话说可以玩一段时间了。在测试CANFD通信之前,先测试一下Classical CAN。,关于这两者的不同,网上说的比较详细。主要的就是通信速率,数据比特率提高到了8Mbps和最大数据帧提高到了64个字节。当前只在应用层面来考虑。官方的SDK提供了MCAN例程,考虑到NXP的IDE还在熟悉当中,还是移植到keil里调试比较方便,如图1所示。

这次测试的目的就是完成Classical CAN每隔2s完成8字节发送,中断接收。

连接图如图2所示:

官方原理图如如3所示:

将demo移植到keil后,就是读程序,然后为目的修改程序测试。

2S延时使用的是SYSTick,如下:

  1. /* Set systick reload value to generate 1ms interrupt */

  2.     if (SysTick_Config(SystemCoreClock / 1000U))

  3.     {

  4.         while (1)

  5.         {

  6.         }

  7.     }

  8. SysTick_DelayTicks(2000U);


按照以往的定义,初始化时钟,引脚,CAN定义,主要是字节数,ID和波特率。

整个过程的思路是先测试CAN的发送,如果没问题,再测试CAN的接收,最后整合一下。

波特率的使用:

  1. if (MCAN_CalculateImprovedTimingValues(mcanConfig.baudRateA, MCAN_CLK_FREQ, &timing_config))

  2.     {

  3.         /* Update the improved timing configuration*/

  4.         memcpy(&(mcanConfig.timingConfig), &timing_config, sizeof(mcan_timing_config_t));

  5.     }


可以追到波特率的定义上,demo使用的baudRateA 500Kbps,当然也可以选1Mbps.

发送配置:

  1. /* TX buffer config. */

  2.     memset(&txBuffer, 0, sizeof(txBuffer));

  3.     txBuffer.address       = TX_BUFFER_OFS;

  4.     txBuffer.dedicatedSize = 1U;

  5.     txBuffer.fqSize        = 0;

  6.     txBuffer.datafieldSize = kMCAN_8ByteDatafield;

  7. MCAN_SetTxBufferConfig(EXAMPLE_MCAN, &txBuffer);


模式选择:

  1. /* Finish software initialization and enter normal mode, synchronizes to

  2.        CAN bus, ready for communication */

  3.     MCAN_EnterNormalMode(EXAMPLE_MCAN);


接收配置:

  1. /* STD filter config. */

  2.     rxFilter.address  = STD_FILTER_OFS;

  3.     rxFilter.idFormat = kMCAN_FrameIDStandard;

  4.     rxFilter.listSize = 1U;

  5.     rxFilter.nmFrame  = kMCAN_reject0;

  6.     rxFilter.remFrame = kMCAN_rejectFrame;

  7.     MCAN_SetFilterConfig(EXAMPLE_MCAN, &rxFilter);


  8.     stdFilter.sfec = kMCAN_storeinFifo0;

  9.     /* Classic filter mode, only filter matching ID. */

  10.     stdFilter.sft   = kMCAN_classic;

  11.     stdFilter.sfid1 = rxIdentifier;

  12.     stdFilter.sfid2 = 0x7FFU;

  13.     MCAN_SetSTDFilterElement(EXAMPLE_MCAN, &rxFilter, &stdFilter, 0);


  14.     /* RX fifo0 config. */

  15.     rxFifo0.address       = RX_FIFO0_OFS;

  16.     rxFifo0.elementSize   = 1U;

  17.     rxFifo0.watermark     = 0;

  18.     rxFifo0.opmode        = kMCAN_FifoBlocking;

  19.     rxFifo0.datafieldSize = kMCAN_8ByteDatafield;


发送帧格式并完成发送:

  1. txIdentifier = 0x123U;

  2. txFrame.xtd  = kMCAN_FrameIDStandard;

  3.             txFrame.rtr  = kMCAN_FrameTypeData;

  4.             txFrame.fdf  = 0;

  5.             txFrame.brs  = 0;

  6.             txFrame.dlc  = 8U;

  7.             txFrame.id   = txIdentifier << STDID_OFFSET;

  8.             txFrame.data = tx_datac;

  9.             txFrame.size = CAN_DATASIZE;

  10. txXfer.frame     = &txFrame;

  11.             txXfer.bufferIdx = 0;

  12.             MCAN_TransferSendNonBlocking(EXAMPLE_MCAN, &mcanHandle, &txXfer);


接收帧格式并完成数据接收:

  1. rxIdentifier = 0x321U;


在测试的时候demo上有这么一段:

  1.            while (!rxComplete)

  2.            {

  3.         }

  4.             rxComplete = false;


就是用了一个while语句,接收完才会继续发送,屏蔽到就不影响按时发送了。

发送和接收数据如图4和图5所示:

在《How to Use CAN-FD to Transfer Data on LPC5500 Series 》文档中也有对Timing config的解释,在深入学习中还需要继续理解。测试完CAN,就是继续CANFD。

顺便吐个槽,官方文档很多明面上没有,需要找,这会多花费一些时间。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    .EFFECT:是话筒效果电平旋钮。也就是所说的效果音量。   7.DEL:话筒效果的延时。   8.REP:回声次数。   先驱860功放按键说明如下:   功放机的性能指标   功放......
    STM32库函数开发&按键库函数开发源码篇;LED流水灯 led.h #ifndef __LED_H #define __LED_H #include "stm32f4xx.h......
    使电路更加简单,通常采用软件消抖。 一般来说一个简单的按键消抖就是先读取按键的状态, 如果得到按键按下之后, 延时 10ms, 再次读取按键的状态,如果按键还是按下状态,那么说明按键已经按下。 其中......
    不同红外遥控器所发出的红外码值进行解码、学习、存储,实现集多个红外遥控器为一体。智能网关的液晶屏上的按钮和智能遥控器的键盘在位置上一一对应,用户在智能遥控器的按钮上定义不同的按键说明,绑定具有不同控制功能的红外线编码。智能......
    是行列扫描。 原理图: 逐行扫描 通过在矩阵按键的每一条行线上轮流输出低电平,检测矩阵按键的列线,当检测到的列线不全为高电平的时候,说明有按键按下。然后,根据......
    基于STM32F407库函数开发按键控制LED灯;按键控制灯的亮与灭的效果图: 一、寄存器开发与库函数开发的优缺点 1、寄存器开发 缺点: (1)开发难度大,查阅相关手册比较多 (2)开发......
    电路 说明: PC6 为低时 LED 亮。 2.12. 按键扫描电路 说明:按下按键时 PC13 为低,松开则为高。按键的功能故名思义。 2.13. AD 测试电路 说明: R58 为 10K 精密......
    里的判断条件显然是队尾索引为9。 好了这就是FIFO的基本原理,下面来看一下按键FIFO是怎么操作的。 我们这里以5个字节的FIFO空间进行说明。Write变量表示写位置,Read 变量表示读位置。初始状态时,Read......
    51单片机学习:独立按键实验;实验名称:独立按键实验接线说明:实验现象:下载程序后,按下“独立按键”模块中K1键,控制D1指示......
    例中温度是一个控制变量,不过若用温度计量测温度,决定是否加热,温度也同时是输入变量。 目前大部分电子设备都会配备说明书,刚收到产品时我们都会看看说明书,但是很多功能不常用到,特别是过一段时间之后,说明......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>