概要
CAN测试源码:
https://download.csdn.net/download/qq_35671135/89425377
根据fsl_flexcan.h
文件从文件末尾往前面梳理,总共30个基础CAN函数;
该文章只梳理常规CAN,增强型CAN后面再单独梳理。
使用的是RT1064开发板进行测试。
21、设置FlexCAN接收消息缓冲区的全局掩码
函 数 :void FLEXCAN_SetRxMbGlobalMask(CAN_Type *base, uint32_t mask);
说 明 :这个函数在匹配过程中为FlexCAN消息缓冲区设置全局掩码。该配置仅在FLEXCAN_Init()中禁用Rx个人掩码时有效。
参 数 :base FlexCAN外设基地址
参 数 :mask Rx Fifo全局掩码值。
返回值:无
22、设置FlexCAN经典CAN帧或CAN FD帧标称相位的比特率
函 数 :status_t FLEXCAN_SetBitRate(CAN_Type *base, uint32_t sourceClock_Hz, uint32_t bitRate_Bps);
说 明 :该函数基于FLEXCAN_CalculateImprovedTimingValues() API计算的定时值来设置经典CAN帧或CAN FD帧标称相位的比特率。
参 数 :base FlexCAN外设基地址
参 数 :sourceClock_Hz 时钟源(Hz)
参 数 :bitRate_Bps 比特率,单位为Bps
返回值:kStatus_Success 设置CAN波特率(仅标称相位)成功。
23、设置FlexCAN经典CAN协议定时特性
函 数 :void FLEXCAN_SetTimingConfig(CAN_Type *base, const flexcan_timing_config_t *pConfig);
说 明 :该功能为用户提供经典CAN或CAN FD标称相位定时特性的设置。该功能适用于有经验的用户。对于经验不足的用户,调用FLEXCAN_SetBitRate()代替。
调用FLEXCAN_SetTimingConfig()会覆盖在FLEXCAN_Init()或FLEXCAN_SetBitRate()中设置的比特率。
参 数 :base FlexCAN外设基地址
参 数 :pConfig 指向定时配置结构的指针
返回值:无
24、获取默认配置结构
函 数 :FLEXCAN_GetDefaultConfig(flexcan_config_t *pConfig);
说 明 :这个函数初始化FlexCAN配置结构为默认值。默认值如下:
* flexcanConfig->clkSrc = kFLEXCAN_ClkSrc0;* flexcanConfig->bitRate = 1000000U;* flexcanConfig->bitRateFD = 2000000U;* flexcanConfig->maxMbNum = 16;* flexcanConfig->enableLoopBack = false;* flexcanConfig->enableSelfWakeup = false;* flexcanConfig->enableIndividMask = false;* flexcanConfig->disableSelfReception = false;* flexcanConfig->enableListenOnlyMode = false;* flexcanConfig->enableDoze = false;* flexcanConfig->enableMemoryErrorControl = true;* flexcanConfig->enableNonCorrectableErrorEnterFreeze = true;* flexcanConfig.timingConfig = timingConfig;
参 数 :mask Rx Fifo全局掩码值。
返回值:无
25、取消初始化FlexCAN。
函 数 :void FLEXCAN_Deinit(CAN_Type *base);
说 明 :该函数禁用FlexCAN模块时钟,并将所有寄存器值设置为重置值。
参 数 :base FlexCAN外设基地址
返回值:无
26、初始化FlexCAN
函 数 :void FLEXCAN_Init(CAN_Type *base, const flexcan_config_t *pConfig, uint32_t sourceClock_Hz);
说 明 :这个函数用用户定义的设置初始化FlexCAN模块。这个例子展示了如何设置flexcan_config_t参数,以及如何通过传递这些参数来调用FLEXCAN_Init函数。
* @code* flexcan_config_t flexcanConfig;* flexcanConfig.clkSrc = kFLEXCAN_ClkSrc0;* flexcanConfig.bitRate = 1000000U;* flexcanConfig.maxMbNum = 16;* flexcanConfig.enableLoopBack = false;* flexcanConfig.enableSelfWakeup = false;* flexcanConfig.enableIndividMask = false;* flexcanConfig.enableDoze = false;* flexcanConfig.disableSelfReception = false;* flexcanConfig.enableListenOnlyMode = false;* flexcanConfig.timingConfig = timingConfig;* FLEXCAN_Init(CAN0, &flexcanConfig, 40000000UL);* @endcode
参 数 :base FlexCAN外设基地址
参 数 :pConfig 指向用户定义的配置结构的指针
参 数 :sourceClock_Hz FlexCAN协议设置时钟源频率,单位为Hz。
返回值:无
27、根据经典CAN的特定比特率计算改进的定时值
函 数 :bool FLEXCAN_CalculateImprovedTimingValues(CAN_Type *base, uint32_t bitRate, uint32_t sourceClock_Hz, flexcan_timing_config_t *pTimingConfig);
说 明 :这个函数用于根据给定的比特率计算经典CAN定时值。计算的计时值将在CTRL1/CBT/ENCBT寄存器中设置。该计算基于CiA 301 v4.2.0和以前版本文档的建议。
参 数 :base FlexCAN外设基地址
参 数 :bitRate 用户定义的经典CAN速度(以bps为单位)应小于或等于1Mbps。
参 数 :sourceClock_Hz 时钟源频率,单位为Hz。
参 数 :pTimingConfig 指向FlexCAN定时配置结构的指针。
返回值:如果找到时序配置,则为TRUE,如果没有找到配置,则为FALSE。
28、从外设基址获取FlexCAN实例
函 数 :uint32_t FLEXCAN_GetInstance(CAN_Type *base);
说 明 :
参 数 :base FlexCAN外设基地址
返回值:无
29、退出FlexCAN冻结模式
函 数 :void FLEXCAN_ExitFreezeMode(CAN_Type *base);
说 明 :这个函数使FlexCAN退出冻结模式。
参 数 :base FlexCAN外设基地址
返回值:无
30、进入FlexCAN冻结模式
函 数 :void FLEXCAN_EnterFreezeMode(CAN_Type *base);
说 明 :这个功能使FlexCAN进入冻结模式。
参 数 :base FlexCAN外设基地址
返回值:无
结束