# can通信学习记录 **Repository Path**: mirioer/can-Study-notes ## Basic Information - **Project Name**: can通信学习记录 - **Description**: can通信作为单片机四大通信方式之一(串口,can,spi,IIC),学习的重要性不多言说。我将自己对can通信的学习笔记记录在这个仓库。 - **Primary Language**: C - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2024-01-19 - **Last Updated**: 2024-04-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # can通信学习记录 #### 介绍 - can通信作为单片机四大通信方式之一(串口,can,spi,IIC),学习的重要性不多言说。我将自己对can通信的学习笔记记录在这个仓库。 #### 软件架构 - keil5 #### can通信和其他通信方式的比较 - 串口和can通信一般用于单片机和单片机之间的通信,而spi和IIC通信多数用于单片机和模块之间的通信。 - 串口和can通信相比,串口只能让两个单片机之间相互通信。can通信**拥有通信总线**,可以多个设备之间连在一个总线上实现**多个设备之间相互通信,设备理论无上限**。 - 串口和can是我们画板的时候**能设计出来的两种通信电路**,spi和IIC只能用别的厂家生产的模块。 - can通信比其他通信**都要稳定**,使用的是差分信号。 - can通信在stm32上**不支持DMA**(不清楚其他芯片是否支持),**这点我觉得很可惜。** #### can通信的形象理解 - can通信这么多个主机连在一根线上实现多个主机相互通信的原理是在报文(消息)上下功夫,**发送的信息会带上ID**,打个比方,商场或者机场的广播,请**XXX**来前台一下。很明显这个广播谁都能听见,但是这个信息只会传递给指定的人,其他不相关的人都会忽略。 #### can通信的内容组成形式 1. 发送的ID 2. 要发送的数据长度(1~8) 3. 数据data 4. 校验码CRC - 根据以上形式按类型,方式填入STM32的外设寄存器,然后再操作相关的库函数就可以实现发送了 #### can在stm32上的操作 1. 初始化GPIO结构体 2. 初始化can结构体 3. 初始化发送接收结构体 4. 初始化筛选器结构体 #### can的学习重点 1. 波特率(通信频率)的计算方式,can初始化时要用。 ![波特率计算](./杂项文件/波特率计算.png) 2. 筛选器的原理,标识符模式和掩码模式的区别,什么是掩码,以及在stm32如何设置 3. can通信各种模式的区别,以及如何设置(正常模式,回环模式,静默模式,静默回环模式) #### 相关链接 - can通信介绍视频https://www.bilibili.com/video/BV14k4y187e6/?spm_id_from=333.337.search-card.all.click&vd_source=60499a4850284be9bc949c4ca866b892 - ESP32can通信视频https://www.bilibili.com/video/BV1Bk4y1J7J6/?vd_source=60499a4850284be9bc949c4ca866b892 - 野火视频https://www.bilibili.com/video/BV1yW411Y7Gw?p=117&vd_source=60499a4850284be9bc949c4ca866b892 - (野火的视频很详细,已经足够了,但是听着会困,要注意边听边做笔记。不要去看正点原子的视频,讲的一坨屑) - CSDN文章https://blog.csdn.net/weixin_44793491/article/details/107298426 #### 一些关于can通信的注意要点 - can通信是分为can控制器和can收发器组成的,讲人话就是一个stm32和一个can芯片组成的。我这么说很明显stm32的开发板一般是不带有can收发器的,需要自己够买(但是如果你只是想单个板子测试一下can通信是否正常可以不用买,直接can的发送引脚接上can的接收引脚然后选择回环模式即可) - can模块淘宝链接1https://item.taobao.com/item.htm?abbucket=16&id=670373587265&ns=1&spm=a21n57.1.0.0.4fce523cLEEI0c&skuId=4822234405201 - can模块淘宝链接2https://detail.tmall.com/item.htm?abbucket=16&id=675049525950&ns=1&spm=a21n57.1.0.0.4fce523cLEEI0c&skuId=4853247128531 - can通信总线上是有两个120Ω的电阻的,两边各一个。设计板子的时候要注意,总线上电阻貌似只能保持240Ω,假设有第三方设备加入进来,那么他是不用带电阻的。板子设计时的can总线最好设计成差分线。 ![can总线示意图](./杂项文件/can总线示意图.png)