CANOpen系列教程06_ 结合代码理解CAN底层收发数据

1写在前面
该教程前面讲述了许多关于can协议的一些概念,可能许多初学者看的云里雾里,那么本文将结合代码让大家理解之前讲述的内容。
因为关注我的人大部分都在学习stm32,我将结合stm32f103、标准外设库例程来让大家理解之前讲述的一些概念。
本文主要讲述内容:
1.传输数据相关参数
2.位时序及传输波特率
为方便大家理解,我将在最后提供对应例程「canopen系列教程06_can底层收发例程」。当然,本文只讲述代码中部分内容,某些配置参数放在后面讲述。
2
传输数据相关参数
传输数据相关参数其实主要就是前面《canopen系列教程04》讲述的“帧类型及格式说明”那一章节内容,建议先看下那些概念内容。
can总线传输的内容主要就是发送和接收,下面我将结合代码中发送和接收参数来让大家理解我们编程控制can总线上那些参数。
2.1 can总线数据帧
本文提供例程主要是can总线使用最多的数据帧为例,让大家理解数据帧传输由我们编程控制的参数。
先看下图回顾一下数据帧格式,其中有些字段内容由控制器自动完成,如:帧起始,crc校验。而有些就是由我们编程控制,如:id、数据等。
2.2 can发送代码
a.can发送数据结构
下图主要就是can发送由我们编程控制的参数。其实你会发现,主要就是上面帧格式中部分内容:id、ide、rtr、dlc、data。
b.发送配置参数
下图为实际发送配置的参数。
2.3 can接收代码
can接收其实和发送类似,can总线上的字段就那些,在接收端接收的那些参数无非就是发送端发送出来的那些参数。
针对stm32内部集成的can,接收数据结构多了一个fmi参数,大概意思就是接收消息邮箱筛选器索引。
接收操作
为方便初学者理解,这里这要就是使用中断接收can总线数据,在中断函数里面打印也主要是用于测试,一般实际项目打印不会出现在中断函数(打印相对耗时)。
3
位时序及传输波特率
同样,在前面《canopen系列教程04》中有讲述“位时序及传输波特率”的概念。其实,位时序间接决定了传输的波特率。换句话说,传输的波特率由位时序几个参数决定。
看下图,回顾一下波特率计算公式:
3.1 波特率配置代码
结合上图计算公式和下图代码,可以看出位时序中几个参数和波特率的关系。波特率为1m时,几个位时序参数可以配置为如下图值:
提示:
36m代表can时钟,具体要看时钟相关配置。
波特率固定,位时序参数可以不同。比如波特率固定为1m,位时序参数可以为上图配置;也可以修改其中的值,如修改位段1为can_bs1_5tq,位段2为can_bs2_3tq。只要遵循波特率计算公式即可。

施耐德PLC如何进行远程维护?
人工智能会如何影响未来生活
中兴天机Axon 10 Pro 5G版已获得进网许可证将于近期在国内发布
小型杀手励磁器制作图解
石墨烯电池和固态电池哪个好?
CANOpen系列教程06_ 结合代码理解CAN底层收发数据
一份图谱告诉你学习自动驾驶的路径就是这么简单
骁龙8Gen1怎么样,骁龙8Gen1评测来袭
浅谈单模光纤的多模光纤的区别
J2CN-SPK-30W外挂FLASH串口语音播放模块说明
人工智能如何帮助制造商提高生产效率
RS-485的数据介面可以让孤立的,全双工运作-RS-485
无人机与直升机之间有什么异同
农业种植自动水肥一体化精装灌溉的应用及效果
继人工智能OpenAI打败Dota2 玩家后,人工智能DeepMind又在雷神之锤3超越人类水准
“移动开放区块链倡议”联盟成立:专注区块链技术在汽车领域的应用
Type-C端口保护方案指南——就是更安全
5G带来了PCB需求的增长 促进了PCB产业的发展
Pyro开关:隐藏式红外检测
二氧化硫试验箱的技术参数