S32K148-CAN收发
最近在搞一个转换板开发,大概意思把CAN信号转换成SPI信号,方案有两种:1)通过硬件电路直接把信号的bit位一位一位移给两个集成芯片;2)通过MCU接收CAN信号,再把信号变量转换成SPI信号发送给其他集成芯片,从而主MCU通过转换板与其他芯片进行信息交互。目前我们采用的第二种方案,第二种方案实施较为简单,但是成本稍高。
因为涉及到CAN的收发问题,刚好最近又在学习S32K148的芯片,顺便记录一下用SDK配置驱动和裸机配置的方法,有问题,欢迎大家指正。
SDK配置步骤:
1)CAN0初始化;
主要包括一些外设时钟初始化
2)配置RXBUFF;
主要是RX_Message的标准帧,扩展帧,远程帧属性结构体
3)配置TXBUFF;
主要是TX_Message的标准帧,扩展帧,远程帧属性结构体
4)配置接收Message的ID滤波掩码;
主要是报文接收ID的全局掩码设置,0标志对所有bit位不关心,1表示需要关注相应bit位
5)注册接收中断回调函数;
6)配置接收函数;
can_buff_config_t CAN0Tx_buffCfg =
{
.enableFD = false,
.enableBRS = false,
.fdPadding = 0U,
.idType = CAN_MSG_ID_EXT,
.isRemote = false
};
//国标枪充CAN0接收BUFFER配置
can_buff_config_t CAN0Rx_buffCfg =
{
.enableFD = false,
.enableBRS = false,
.fdPadding = 0U,
.idType = CAN_MSG_ID_EXT,
.isRemote = false
};
调试过程中,一定要注意RXBUFF和TXBUFF配置结构体放在全局变量,如果放在函数体内,CAN的发送和接收会出问题
void CAN0_init(void)
{
CAN_Init(&can_pal1_instance, &can_pal1_Config0);
CAN_ConfigRxBuff(&can_pal1_instance, CAN0_RevMailBox, &CAN0Rx_buffCfg, CAN0_RxFilter);
CAN_ConfigTxBuff(&can_pal1_instance, CAN0_TxMailBox, &CAN0Tx_buffCfg);
//掩码设置为0 就接收全部Msg_ID的报文
CAN_SetRxFilter(&can_pal1_instance, CAN_MSG_ID_EXT, CAN0_RevMailBox, 0);
//配置接收中断
CAN_InstallEventCallback(&can_pal1_instance, &CAN0_Callback_Func, (void*)0);
//CAN接收配置
CAN_Receive(&can_pal1_instance, CAN0_RevMailBox, &CAN0_RecMsg);
}
中断接收回调函数,在中断函数里接收CAN发来的数据
void CAN0_Callback_Func (uint32_t instance,can_event_t event,uint32_t buffIdx,void *flexcanState)
{
(void)flexcanState;
(void)instance;
(void)buffIdx;
CAN_Receive(&can_pal1_instance, CAN0_RevMailBox, &CAN0_RecMsg);
switch(event)
{
case CAN_EVENT_RX_COMPLETE:
break;
case CAN_EVENT_TX_COMPLETE: break;
default:
break;
}
}
发送数据
can_message_t CAN01_TxMsg;
CAN01_TxMsg.id = 0x181056F4;
CAN01_TxMsg.length = 8;
CAN01_TxMsg.data[0] = 0xFF;
CAN01_TxMsg.data[1] = 0xFF;
CAN01_TxMsg.data[2] = 0xFF;
CAN01_TxMsg.data[3] = 0xFF;
CAN01_TxMsg.data[4] = 0x02;
CAN01_TxMsg.data[5] = 0xFF;
CAN01_TxMsg.data[6] = 0xFF;
CAN01_TxMsg.data[7] = 0xFF;
CAN_SendBlocking(&can_pal1_instance, CAN0_TxMailBox, &CAN01_TxMsg, TIMEOUT);
最后,在main()函数里初始化,在任务周期里就可以进行发送,中断里进行接收。
下一章节,我在记录裸机配置CAN的收发。
谢谢
S32K148-CAN收发的更多相关文章
- java socket收发http协议内容
来自:https://www.oschina.net/code/snippet_2009881_48232 import java.io.BufferedReader; import java.io. ...
- Apple Watch版微信来了 收发微信刷朋友圈不在话下
昨晚果粉守了一夜的Apple Watch发布会,意料中的惊喜不少,最让人兴奋的是微信成为首批支持的应用.是的,在全球拥有4.68亿月活跃用户的微信怎么可能不第一时间入驻呢?之前我们就有聊过Apple ...
- dm9000网口收发控制以及mac地址过滤设置
目的 :完成网口收发调试 过程 : 1.网口初始化,根据芯片数据手册配置 2.网口发数,先向DM9000中的TX FIFO存入数据,然后出发发送寄存器完成发送: 3.网口接收 . ...
- dsp28377控制DM9000收发数据——第三版程序,通过外部引脚触发来实现中断接受数据,优化掉帧现象
//-------------------------------------------------------------------------------------------- - //D ...
- dsp28377控制DM9000收发数据——第二版程序,能够实现手术功能,但是容易掉帧;使用读取中断寄存器的方式判断中断
G:\controlSUITE\device_support\F2837xD\v180\F2837xD_examples_Cpu1\emif1_16bit_asram\cpu01\emif1_16bi ...
- dsp28377控制DM9000收发数据
首先感谢上一篇转载文章的作者给出的参考,下面是一些自己在调试过程中的一些步骤: 首先把代码贴上来: //------------------------------------------------ ...
- boost.asio与boost.log同时使用导致socket不能正常收发数据
现象: 1. 没有使用boost.log前能正常收发数据 2.加入boost.log后async_connect没有回调 fix过程: 1. gdb调试发现程序block在pthread_timed_ ...
- PHP 通过Socket收发16进制数据
最近在php下做关于Socket通讯的相关内容,发现网络上好多人在了解如何进行16进制收发,研究了下,代码如下,欢迎拍砖. <?php $sendStr = '30 32 30 3 ...
- UDP收发buffer尺寸对收发包流量的影响
下午验证一个高流量发包问题时,发现了一个值得记录的问题:socket的收发buffer尺寸是会影响收发包的效率的,高流量通讯时,若socket的收发buffer尺寸过小会一定程度降低收发包效率. 自己 ...
随机推荐
- 半导体行业如何保持高效远程办公?因果集群(Causal Clustering)了解一下!
什么是因果集群?因果集群是下一代多站点复制技术.它支持数据中心的分布式系统集群模型.借助于因果集群技术,可以让远程工作团队成员体验到更卓越的性能和更健壮的复制功能,确保您的团队始终以高效状态工作. 因 ...
- WIN10 使用注册表设置单应用KIOSK模式(不限win10版本)
注意事项 下载安装Autologon.exe. 以下示例采用账号:- 账户:'KIOSK'- 密码:'KIOSK' 设置步骤 新建用户 1.进入windows设置->账户->其他用户,点击 ...
- vue - vue基础/vue核心内容(终结篇)
今天是vue基础.vue核心内容第三天,也是最后一天,后面开始进入组件化学习,整个基础内容以生命周期的结束而结束,不得不说,张天禹把这节课讲活了,开始觉得vue是一个有生命的东西,包括前面所说的很多脏 ...
- Linux系统常用命令速查手册
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 系统信息 arch #显示机器的处理器架构(1 ...
- Nvidia Triton使用教程:从青铜到王者
1 相关预备知识 模型:包含了大量参数的一个网络(参数+结构),体积10MB-10GB不等 模型格式:相同的模型可以有不同的存储格式(可类比音视频文件),目前主流有torch.tf.onnx和trt, ...
- 6. ZigZag Conversion - LeetCode
Question 6. ZigZag Conversion Solution 题目大意:将字符串按Z字型排列,然后再一行一行按字符输出 思路:按题目中的第一个例子,画出如下图,通过n的不同值,可以找出 ...
- 846. Hand of Straights - LeetCode
Question 846. Hand of Straights Solution 题目大意:打牌,判断牌是否能全部按顺子出 思路:构造一个list,存储1,2,3,4,5,6,7,8并排序,构造一个m ...
- 好客租房42-react组件基础综合案例-渲染列表无数据并优化
渲染列表评论 1判断列表数据的长度是否为0 2如果为0 则渲染暂无评论 //导入react import React from 'react' import ReactDOM from 'react- ...
- 关于JNPF3.4版本的三大改变,你真的了解了吗?
- 小白excel初步使用2022.06.02
1.添加 对表格数据相加求和:在表示数据的那一列黄色表格下输入=SUM(D1:D5)或者alt+=或者SUMIF(D1:D5,">50")或者SUMIF(D1,D3:D7,1 ...