嵌入式技术项目教程-基于STM32F4CubeMX与HAL库 课件 项目5 多机通信系统的设计与实现_第1页
嵌入式技术项目教程-基于STM32F4CubeMX与HAL库 课件 项目5 多机通信系统的设计与实现_第2页
嵌入式技术项目教程-基于STM32F4CubeMX与HAL库 课件 项目5 多机通信系统的设计与实现_第3页
嵌入式技术项目教程-基于STM32F4CubeMX与HAL库 课件 项目5 多机通信系统的设计与实现_第4页
嵌入式技术项目教程-基于STM32F4CubeMX与HAL库 课件 项目5 多机通信系统的设计与实现_第5页
已阅读5页,还剩144页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目5多机通信系统的设计与实现概述485通信项目引导基于RS-485总线的多点温度监控系统广泛应用于:工业控制、仪器仪表、机电一体化产品。RS-485总线抗干扰能力强传输距离远多站传输能力部署便利成本较低概述485通信项目引导查阅Internet资料,说一说:RS-485在实际生活中的应用场景。概述485通信项目引导RS-485通信是一种常用的串行通信协议,常用于工业自动化、智能仪表、安防监控等领域。以下是一些常见的RS-485通信应用场合。(1)工业自动化:在工业自动化领域,RS-485通信被广泛应用于监控系统、控制系统、数据采集等应用场景。例如,在工厂生产线中,可以使用RS-485通信将多个传感器、控制器、执行器等设备连接起来,实现数据的实时传输和监控。(2)智能仪表:在智能仪表领域,RS-485通信被广泛应用于各种类型的仪表,如温度计、压力计、液位计等。通过RS-485通信,多个仪表可以连接在一起,实现数据的共享和互操作。(3)安防监控:在安防监控领域,RS-485通信被广泛应用于视频监控系统。通过RS-485通信,可以将摄像头、硬盘录像机、网络录像机等设备连接在一起,实现数据的实时传输和监控。(4)电力监控:在电力监控领域,RS-485通信被广泛应用于电力设备的数据采集和监控。例如,可以使用RS-485通信将电力设备的数据采集器、控制器等设备连接在一起,实现数据的实时传输和监控。(5)环境监测:在环境监测领域,RS-485通信被广泛应用于大气环境监测、水质监测等应用场景。通过RS-485通信,可以将多个传感器、数据采集器等设备连接在一起,实现数据的共享和互操作。总之,RS-485通信作为一种通用的串行通信协议,被广泛应用于各种类型的设备和系统之间进行数据传输和通信。任务描述485通信为了监测车间内各点的实时环境湿度数据,工厂需要建立一个RS-485网络,可用来实现多个节点之间数据的双向收发功能。任务描述任务要求(1)主节点和各个从节点之间通过RS-485总线进行连接。(2)节点每隔3s向从节点1发送“hello,node1”消息,从节点1收到后翻转其上的LED灯作为指示,同时回复“node1ack”消息给主节点,从节点2不参与上述流程。(3)主节点每隔3.8s向从节点2发送“hello,node2”消息,从节点2收到后翻转其上的LED灯作为指示,同时回复“node2ack”消息给主节点,从节点1不参与上述流程。(4)主节点不管收到任何节点发来的消息,都将其转发至上位机显示。任务5.1建立RS-485网络任务目标485通信职业能力目标(1)了解RS-485标准的电气特性。(2)掌握RS-485通信的收发器芯片功能及典型应用电路的工作原理。(1)会搭建RS-485总线通信网络。(2)会设计Cortex-M4微控制器的RS-485总线通信程序。知识目标技能目标485通信1.总线与串行通信知识链接按照传输速率分低速总线高速总线按照连接类型分系统总线外设总线扩展总线按照传输方式分并行总线串行总线总线的分类方式串行通信是指外设和计算机之间,通过数据信号线、地址线与控制线等,按位进行传输数据的一种通信方式。常见的串行通信RS-232RS-422RS-485几种常见的串行通信方式别忘了我们SPICANI2C……RS-485标准与RS-232/RS-422标准485通信知识链接在传输距离达到80米的工业控制应用场景,要实现现场PLC设备的数据采集,应选择哪种通信标准?标准RS-232RS-422RS-485工作方式单端(非平衡)差分(平衡)差分(平衡)节点数1收1发(点对点)1发10收1发32收最大传输电缆长度50英尺4000英尺4000英尺最大传输速率20Kbps10Mbps10Mbps连接方式点对点(全双工)一点对多点(四线制,全双工)多点对多点(两线制,半双工)电气特性逻辑1-3V~-15V两线间电压差+2V~+6V两线间电压差+2V~+6V逻辑0+3V~+15V两线间电压差-2V~-6V两线间电压差-2V~-6VRS485/422/232标准对比RS-485收发器介绍485通信知识链接RS-485收发器芯片的典型应用电路管脚编号名称功能描述1RO接收器输出(至MCU)2接收使能(低电平有效)3DE发送使能(高电平有效)4DI发送器输入(来自MCU)5GND接地6A发送器同相输出/接收器同相输入7B发送器反相输出/接收器反相输入8VCC电源电压RS-485收发器芯片的管脚功能描述RS-485通信中如何指定消息目的地485通信知识链接收件人地址发快递时如何定位收件人?设备地址广播设备匹配地址根据任务要求制定通信协议485通信知识链接地址域1Byte数据长度域1Byte数据载荷NBytes包尾1Byte0xFF(主节点)0x15例:nodetwoacknowledged0xDD0x01(节点1)0x0B例:HelloWorld.0xDD0x02(节点2)0x0B例:HelloWorld.0xDD地址域区分各节点(一个字节)数据长度域指明数据载荷实际长度数据载荷N个字节,有用的数据部分包尾固定值:0xDD(一个字节)485通信任务实施设备清单表任务实施前必须先准备好以下设备和资源。序号设备/资源名称数量是否准备到位(√)1M3主控模块3

2USB转RS-232线缆1

3各色香蕉线若干

4杜邦线若干

485通信任务导航基于STM32CubeMX建立工程编写代码搭建硬件环境编译下载程序结果验证实施纪要表项目名称项目五

多机通信系统的设计与实现任务名称5.1任务1建立RS-485网络序号分步纪要1

2

3

4

5

6

7

8

建立工程添加串口收发功能修改代码编译下载程序搭建硬件环境结果验证485通信任务实施基于STM32CubeMX建立工程在桌面新建文件夹“Project_RS485\task1_rs485_networking”用于保存工程。新建STM32CubeMX工程参照之前的任务,新建STM32CubeMX工程,保存于task1_rs485_networking文件夹下。配置工程根据任务要求,需要配置的STM32F407ZET6外设包括USART1、USART2、LED0引脚(PF9)和RS-485接收/发送使能引脚(PG8)。另外,还需对STM32的时钟系统、调试端口系统内核组件进行配置。配置步骤如下。(1)配置调试端口,配置结果如图5-2所示。图5-2RCC&SYS配置建立工程存放的文件夹新建STM32CubeMX工程配置STM32外设485通信任务实施配置STM32外设(2)参照之前相关任务步骤,配置STM32的时钟系统,配置结果如图5-3所示。图5-3时钟系统配置485通信任务实施配置STM32外设(3)参照之前相关任务步骤,配置USART1和USART2的BaudRate(波特率)为115200bps;WordLength(字长):8Bits;Parity(奇偶校验):None(无);StopBits(停止位):1;DataDirection(方向):ReceiveandTransmit(允许发送和接收);USART1&USART2globalinterrupt(全局中断):enable(允许)。配置如图5-4所示。(4)配置PF9引脚为推挽输出,默认输出高电平使LED0灯灭,UserLabel配置为“LED0”。配置PG8引脚为推挽输出,默认输出低电平使RS-485为默认接收模式,UserLabel配置为“U2_485TX_EN”。配置结果如图5-5所示。图5-4图5-5485通信任务实施4)编写代码编写代码(1)编写RS-485总线数据发送程序(2)将USART1输出重定向至printf(3)编写主节点程序(4)编写从节点1程序(5)编写从节点2程序485通信任务实施4)编写代码(1)编写主节点RS-485总线发送数据程序在task1_rs485-networking文件夹下建立名为“RS485”的文件夹,新建“rs485.c”和“rs485.h”文件放入RS485文件夹。在rs485.c文件中输入如程序清单5-1所示的代码。485通信任务实施4)编写代码在rs485.h文件中输入如程序清单5-2所示代码。485通信任务实施4)编写代码(2)将USART1输出重定向到printf()函数。在usart.h文件中添加如下代码:/*USERCODEBEGINIncludes*/#include

"stdio.h"/*USERCODEENDIncludes*/在usart.c文件中添加如下代码:/*USERCODEBEGIN0*/intfputc(intch,FILE*fp){ HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,HAL_MAX_DELAY);

returnch;}/*USERCODEEND0*/485通信任务实施4)编写代码(3)添加USART2空闲中断调用打开stm32f4xx_it.c文件,添加如下代码:/*Privateincludes--------------------------------------------------------*//*USERCODEBEGINIncludes*/#include

"rs485.h"/*USERCODEENDIncludes*/在USART2_IRQHandler()中断服务函数中,加粗显示语句“IDLE_UART_IRQHandler(&huart2);”,需要用户自行添加。代码如下:voidUSART2_IRQHandler(void){

/*USERCODEBEGINUSART2_IRQn0*/

/*USERCODEENDUSART2_IRQn0*/HAL_UART_IRQHandler(&huart2);

/*USERCODEBEGINUSART2_IRQn1*/IDLE_UART_IRQHandler(&huart2);//需要用户自己添加

/*USERCODEENDUSART2_IRQn1*/}485通信任务实施4)编写代码(4)编写主节点程序在main.c文件的相应位置输入程序清单5-3所示的代码,注意代码位置,确保输入位置正确。任务实施4)编写代码(4)编写主节点程序在main.c文件的相应位置输入程序清单5-3所示的代码,注意代码位置,确保输入位置正确。485通信任务实施编译主节点程序,并下载、运行在工程配置界面切换到“C/C++”标签,为“IncludePaths”增加“RS485”文件夹路径,然后编译程序,下载生成的HEX文件到核心板,运行程序。打开PC的串口调试助手软件,监视USART1、USART2显示如图5-6所示。图5-6在USART2中,十六进制字符串“010E68656C6C6F2C6E6F6465206F6E65DD”中,“01”表示地址,“0E”表示有效数据载荷的字节数为14,即“68656C6C6F2C6E6F6465206F6E65”这14个字符,其ASCII码为“hello,nodeone”,“DD”表示数据包包尾的特征字。同理,“020E68656C6C6F2C6E6F64652074776FDD”中,“02”表示地址,“0E”表示有效数据载荷的字节数为14,即“68656C6C6F2C6E6F64652074776F”这14个字符,其ASCII码为“hello,nodetwo”,“DD”为特征字。485通信任务实施5)编写RS-485从节点1程序只需更改main.c文件的代码即可,其余代码完全相同。现在先说从节点的硬件和主节点完全相同的情况:将main.c文件复制一份并更改为main_mode1.c,将其加入工程的“Application/User”组后修改其main()函数对应位置的代码如下。485通信任务实施5)编写RS-485从节点2程序只需更改main.c文件的代码即可,其余代码完全相同。现在先说从节点的硬件和主节点完全相同的情况:将main.c文件复制一份并更改为main_mode2.c,将其加入工程的“Application/User”组后修改其main()函数对应位置的代码如下。485通信任务实施7)搭建硬件环境1)取两个STM32F407核心板,把它们的“USART2RS-485”接线端子按同名端并联连接,即3个RS-485A端子相连,3个RS-485B端子相连。2)主节点的串口1通过USB转串口线连接PC的USB口。8)编译下载程序(1)建立节点编译配置选项单击工具栏上的“ManagerProjectItems”图标按钮(如图5-7①处),按图5-7④处修改“ProjectTargets(工程编译目标)”,方法:单击“ProjectItems”标签页,单击③处“”图标,建立“Pri-node-rs485”工程编译目标。用同样的步骤依次建立“node1-rs485”“node2-rs485”两个工程编译目标。“Pri-node-rs485”对应于主节点,“node1-rs485”对应于节点1,“node2-rs485”对应于节点2。485通信任务实施8)编译下载程序(1)建立节点编译配置选项图5-8建立好节点编译配置项后,可将不需要的源文件排除在编译范围外,操作步骤如图5-8所示。单击图5-8①处下拉列表并选中“Pri-node-rs485”(主节点)编译选项,将“main_node1.c”和“main_node2.c”排除在外。方法:右击“main_node1.c”,选择弹出菜单中的第一项“OptionsforFile‘main_node1.c’”,展开界面如图5-8所示,将③处复选框中的“√”取消,这时“main_node1.c”便排除在编译范围之外,用同样的方法将“main_node2.c”排除在编译范围之外,编译程序,下载此程序到主控节点。用上述介绍的方法,不难配置出“node1-rs485”即节点1的编译选项,将“main.c”和“main_node2”排除。“node1-rs485”即节点1的编译选项。同理,“node2-rs485”编译选项中,将“main.c”和“main_node1.c”两个文件排除。485通信任务实施8)编译下载程序(2)编译并下载程序选择“Pri-node-rs485(主节点)”编译选项,使用快捷键“F7”编译程序。若程序编译没有错误,接好ST-Link仿真器,使用快捷键“F8”即可将程序下载到主节点的核心板。选择“node1-rs485(从节点1)”编译选项,重复上述步骤完成从节点1程序的编译下载。同理选择“node2-rs485(从节点2)”编译选项,完成从节点2程序的下载。9)结果验证图5-9从图5-9中可以看到,主节点轮流收到节点1和节点2回复的消息。“节点1回复消息”的时间间隔大约为3s,“节点2回复消息”的时间间隔大约为4s。图5-9中节点2没有回复信息的原因是,此刻没有连接节点2主机。另外也能观察到各从节点模块上的LED灯在翻转,符合设计。485通信任务小结在主节点接收从节点的应答信息,或从节点接收主节点的广播消息,使用了串口空闲中断的技术,实现了不定长消息的收发(HAL库提供的串口收发函数是定长消息的收发)。串口空闲中断在一帧数据传输结束后,通信线路将会维持高电平,这个状态称为空闲状态。当CPU检测到通信线路处于空闲状态时,空闲状态标志IDLE将由硬件置1。如果串口控制寄存器CR1中的IDLEIE位为1,将会触发空闲中断(IDLE中断)。由于空闲标志是在一帧数据传输完成后才置位,在有效数据传输过程中不会置位,因此借助空闲中断,可以实现不定长数据的收发。假设一帧数据由2个字符构成,分别是0xAA、0x55,传输的时序图如图5-10所示。图5-10485通信任务小结串口空闲中断在程序设计中,在rs485.c中用户自定义了串口空闲中断的回调函数voidIDLE_UART_IRQHandler(UART_HandleTypeDef*huart),并在stm32f4xx_it.c中USART2中断服务函数voidUSART2_IRQHandler(void)中添加此空闲中断服务函数。在主程序的/*USERCODEBEGIN2*/和/*USERCODEEND2*/之间添加“__HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE);”,以开启USART2IDLE空闲中断。请读者仔细体会。本任务相关知识技能的思维导图如图5-11所示。图5-11项目5多机通信系统的设计与实现任务描述485通信为了让小区内的多个路灯保持正常运行,以便确保小区内老人小孩的夜间出行安全,物业需要监测小区内各点的路灯的使用情况,并通过监控室的PC对小区的所有路灯进行有效管理。任务描述任务要求任务5.2设计小区路灯管理功能各路灯监测点与监控机之间通过RS-485总线进行连接。各监测点与与监控机之间采用Modbus通信协议进行通信。监控机能实时管理各路灯的开启和关闭,能了解路灯是否有故障。任务分析485通信任务5.2设计小区路灯管理功能任务背景1)小区路灯管理:需要对小区内的路灯进行监控和控制,以保证路灯的正常运行和照明效果。2)RS-485:一种常用的串行通信协议,用于在设备之间进行远距离数据传输。3)Modbus协议:一种工业通信协议,可用于不同设备之间的数据通信。2.任务要求设计和实现一个基于RS-485的Modbus协议对小区路灯设备进行管理,能够实现对小区内路灯的监控和控制。该设备应具备以下功能。(1)实时监测路灯的工作状态(亮/灭)和位置信息。(2)支持远程控制路灯的开关和亮度调节。(3)具有报警功能,当路灯出现故障时能够及时报警并记录故障信息。(4)设备应通过RS-485接口与其他设备进行通信,并遵循Modbus协议的通信规范。任务分析485通信任务5.2设计小区路灯管理功能任务实施步骤任务关键点(1)设计电路:根据任务要求设计电路,包括RS-485接口电路。(2)选择芯片和模块:选择合适的芯片和模块,如微控制器、RS-485收发器芯片等。(3)编写程序:使用所选芯片和模块编写程序,实现实时监测和控制路灯的功能。(4)调试和测试:对设计进行调试和测试,确保设备能够正常工作并满足任务要求。(1)掌握RS-485通信协议的原理和实现方法。(2)熟悉Modbus协议的通信规范和数据传输流程。(3)理解串行通信的基本原理和数据传输方式。(4)能够编写基于RS-485Modbus协议的路灯管理程序,实现路灯的监控和控制功能。任务目标485通信职业能力目标(1)掌握Modbus通信协议的基础知识。(2)能根据项目需求自行规划通信协议。(3)会搭建RS-485总线网络并编程实现组网通信。(4)会开发基于Modbus协议的通信软件。(1)会搭建RS-485总线通信网络。(2)会设计Cortex-M4微控制器的RS-485总线通信程序。任务目标技能目标485通信Modbus概述知识链接1.什么是ModbusModicon莫迪康Modbus-IDA组织ModbusOrganization2004年发布国标485通信Modbus概述知识链接1.什么是Modbus为可编程控制器PLC通信而发布工业领域通信协议的业界标准工业电子设备之间常用的连接方式2.为什么要用ModbusRS-485是通信协议吗?NORS-485仅定义了接口的电气特性,未对电缆、接口和通信协议标准化应用层通信协议用户自定义行业:多功能电能表通信规约(DL/T645-1997)Modbus协议485通信Modbus概述知识链接485通信Modbus的基础知识知识链接1.Modbus的通信模型Modbus的通信模型设备地址:被选中的从设备地址功能码:告知从设备要执行的功能数据段:执行功能的附加信息差错检测区:数据校验方法单播/广播课堂上教师提问与学生回答的模式如何?单主/多从485通信Modbus的基础知识知识链接2.Modbus的通信模式同:数据模型与功能调用形式;异:传输报文的封装方式。基于不同的物理链路,Modbus通信协议存在不同的通信模式串行链路ModbusRTU模式ModbusASCII模式以太网链路ModbusTCP模式485通信Modbus的基础知识知识链接3.Modbus的寄存器寄存器种类特性说明实际应用线圈状态(Coil)输出端口(可读可写),相当于PLC的DO(数字量输出)LED显示、电磁阀输出等离散输入状态(DiscreteInput)输入端口(只读),相当于PLC的DI(数字量输入)接近开关、拨码开关等保持寄存器(HoldingRegister)输出参数或保持参数(可读可写),相当于PLC的AO(模拟量输出)模拟量输出设定值、PID运行参数、传感器报警阈值等输入寄存器(InputRegister)输入参数(只读),相当于PLC的AI(模拟量输入)模拟量输入值Modbus寄存器的分类与特性位操作位操作字操作字操作485通信Modbus的基础知识知识链接4.Modbus的消息帧格式起始位地址功能代码数据CRC校验结束符≥3.5字符8位8位n个8位16位≥3.5字符地址域0:广播地址1-247:单播地址功能码域消息帧功能数据域具体数据差错校验CRC16485通信Modbus的功能码知识链接1.功能码分类代码功能码名称位/字操作操作数量01读线圈状态位操作单个或多个02读离散输入状态位操作单个或多个03读保持寄存器字操作单个或多个04读输入寄存器字操作单个或多个05写单个线圈位操作单个06写单个保持寄存器字操作单个15写多个线圈位操作多个16写多个保持寄存器字操作多个功能码公共功能码用户自定义功能码保留功能码表5-7部分常用的Modbus功能码任务中使用的功能码485通信Modbus的功能码知识链接(1)读保持寄存器的功能码03该功能码用于读取从设备保持寄存器的二进制数据,不支持广播,使用案例如下。请求报文:060300D20004E587从表5-8可以看出,从设备地址为06,需要读取Modbus地址210(0x00D2)~213(0x00D5)共4个保持寄存器的内容。相应的响应报文如表5-9所示。从设备地址功能码起始地址寄存器个数CRC校验060300D20004E587②响应报文:060308026E01F3010659AB1E6A从设备地址功能码数据域字节数4个数据CRC校验060308026E01F3010659AB1E6A注意:Modbus的保持寄存器和输入寄存器以字为基本单位,即每个寄存器分别对应2个字节。485通信Modbus的功能码知识链接任务中使用的功能码(1)写单个保持寄存器值功能码06该功能码用于更新从设备单个保持寄存器的值,使用案例如下。请求报文:0306008202AB68DF从设备地址功能码起始地址变更数据CRC校验0306008202AB68DF从表可以看出,从设备的地址为03,要求设置从设备Modbus地址0x82的内容为683(0x02AB)。②响应报文:0306008202AB68DF从设备地址功能码起始地址变更数据CRC校验0306008202AB68DF根据任务要求制定Modbus通信协议485通信知识链接根据任务要求,Modbus主机向从机发请求帧获取路灯的状态。该值为可修改型数据,查阅表5-7可知,在各种寄存器类型中,读保持寄存器特性符合本任务的需求,应选择功能码“03”。要改变路灯的状态,查阅表5-7可知,在各种寄存器类型中,写单个保持寄存器特性符合本任务的需求,应选择功能码“06”。另外,在嵌入式微控制器作为主机的系统中,Modbus寄存器的地址可以用内存的地址代替,如数组中某个变量的存储地址。我们想开启1号路灯的指令如下表所示。从设备地址功能码起始地址变更数据CRC校验01069C420001C64E如能正常开启路灯,返回的响应报文应该和发送报文内容相同,即01069C420001C64E。同理,关闭1号路灯的指令如下表所示。从设备地址功能码起始地址变更数据CRC校验01069C420000078E如能正常关闭路灯,返回的响应报文应该和发送报文内容相同,即01069C420000078E。根据任务要求制定Modbus通信协议485通信知识链接查询1号路灯状态的指令如表5-14所示表5-14查询1号路灯状态的指令从设备地址功能码起始地址变更数据CRC校验01039C420002BA4F如果从设备的响应报文(十六进制)为01030200010066D9A3,表示的含义为02两个寄存器的内容,第一个字0001表示蜂鸣器打开,第二个字0066没有具体含义,D9A3为CRC码。如果读到第一个字为0000,表示蜂鸣器当前的状态是关闭的。CRC校验码是如何求得的呢?485通信知识链接CRC校验码由两个字节组成,附加在报文的最后。CRC的值由发送设备计算,接收设备在接收报文时重新计算CRC值,并将计算值与实际接收值做比较,如果不相等,则为错误。CRC计算过程如下。将一个16位CRC寄存器装入0xFFFF,即全1。将报文的第一个8位字节与16位CRC寄存器的低字节异或,结果置于CRC寄存器中。将CRC寄存器中的值右移1位(LSB),MSB补零,提取并检测LSB。如果LSB=0,重复步骤(3);如果LSB=1,CRC寄存器与0xA0001异或。重复步骤(3)和(4),直到完成8次移位。对报文中的下一个字节重复步骤(2)~(5),直到所有报文处理完毕。CRC寄存器中的最终值为CRC值。将CRC值的高低字节交换,附加在报文最后。将上述步骤写成C语言代码,如程序清单5-6所示。CRC校验码是如何求得的呢?485通信知识链接在C语言环境下运行此程序,可计算出数组元素为:0x01、0x03、0x61、0x00、0x00、0x02,它们的CRC码为0xF7DB,一般将低位排在前面,高位写在后面,故其CRC码为DBF7。485通信知识链接使用CRC计算器求得CRC校验码也可用Modbus-RTU计算器计算出CRC值,如图5-14所示图5-14Modbus-RTU计算器计算CRC值可从网上下载ModbusRTUCRC16计算器绿色版即可使用。如图所示。485通信任务实施实验器材为了教学方便,我们用蜂鸣器代替路灯,用PC运行串口调试助手程序,使用USB转RS-485接口,一端连接PC的USB口,另一端连接开发板的RS-485接口,同名端相连。使用串口发送Modbus指令,控制蜂鸣器的开启、关闭,查询蜂鸣器的状态等操作。序号设备/资源名称数量是否准备到位(√)1STM32F407核心板1

2USB转RS-485调试器1

3USB转RS-232线缆1

4蜂鸣器电路1

5串口调试助手1

6配书软件包1套

任务实施前必须先准备好以下设备和资源。实验器材清单表485通信任务实施硬件电路环境硬件电路环境:RS-485转换接口电路如图5-1所示,蜂鸣器接口电路如图5-15所示。图5-15中,PF8置高,Q1导通,蜂鸣器开启;PF8置低,Q1截止,蜂鸣器关闭。程序初始化配置GPIOF.8为低,推挽输出,不上拉/下拉。485通信任务实施任务实施导航&实施纪要修改任务1的STM32CubeMX工程配置添加代码包编写代码编译下载程序搭建硬件环境结果验证实施纪要表项目名称项目五

工厂环境监控系统任务名称5.2任务2设计小区路灯管理功能序号分步纪要1

2

3

4

5

6

7

8

修改工程配置添加代码包编写代码编译下载程序搭建硬件环境结果验证485通信任务实施1)

基于STM32CubeMX建立工程在桌面新建文件夹“task2_rs485_modbus”用于保存工程。2)新建STM32CubeMX工程参照任务5.1新建STM32CubeMX工程。3)配置工程参照任务5.1,完成配置的STM32F407ZET6外设,包括USART1、USART2、蜂鸣器引脚(PF8)和RS-485接收/发送使能引脚(PG8)。串口1不使能中断。另外,还需对STM32的时钟系统、调试端口等系统内核组件进行配置。串口2的配置,在任务5.1的基础上,增加DMA配置、引脚确认,如图5-16所示。串口2的中断配置,如图5-17所示。图5-16图5-17USART配置要点485通信任务实施实验中,USART2接收数据采用空闲中断触发,发送数据采用DMA发送,触发后完成发送中断。USART2总中断(USART2globalinterrupt)必须打开(为了发送完成中断实现)。UART_RX(DMA1stream5globalinterrupt)DMA接收中断不打开,取消对钩(这里对钩无法改变,后续解决)。UART_TX(DMA1stream6globalinterrupt)DMA发送中断打开。进行NVIC中断优先级配置,上述无法取消DMA接收中断,原因是选中了强制DMA中断,操作如图5-18所示,进入“NVIC”标签页:①取消“ForceDMAchannelsinterrupts”前的对钩;②取消“DMA1stream5globalinterrupt”后的对钩;③将“DMA1stream6globalinterrupt”后的抢占优先级(PreemptionPriority)从0改为2。RS-485使能端(PG8)及蜂鸣器输出端(PF8)的配置结果如图5-19所示。USART配置要点485通信任务实施添加代码完成上述配置后,生成基础工程,并用KeilMDK打开。(1)添加工程文件在task2_rs485_modbus文件夹下拷贝配套软件MyApplication包,MyApplication文件夹下有Inc和Src两个子文件夹。Src文件夹下为应用程序文件,Inc文件夹下为应用程序文件对应的头文件,添加后的文件结构如图5-20所示。485通信任务实施修改main.c代码(2)打开main.c文件,在/*USERCODEBEGINIncludes*/和/*USERCODEENDIncludes*/之间添加“#include"MyApplication.h";在/*USERCODEBEGIN2*/和/*USERCODEEND2*/之间添加“MyInit.Peripheral_Set();”;修改主函数while(1)的代码,代码如下:/*USERCODEBEGINIncludes*/#include

"MyApplication.h"/*USERCODEENDIncludes*/……

/*USERCODEBEGIN2*/ MyInit.Peripheral_Set();//外设初始化操作

/*USERCODEEND2*/……

/*USERCODEBEGIN3*/

……while(1){

/*USERCODEENDWHILE*/

/*USERCODEBEGIN3*/ System.Run();}

/*USERCODEEND3*/485通信任务实施修改main.c代码修改出错函数Error_Handler(void)为如下代码:修改出错函数assert_failed(uint8_t*file,uint32_tline)为如下代码:这样做的好处是,今后的main.c文件都可以写成这种格式,我们的重点工作是编写自己的函数,所有的函数都在MyApplication文件夹下,MyApplication/Inc下是函数的声明,MyApplication/Src下是函数的实现。这样实现了自定义函数和系统的基础工程代码的分离。(3)打开stm32f4xx_it.c文件,按如下修改voidUSART2_IRQHandler(void)函数:485通信任务实施修改stm32f4xx_it.c代码voidUSART2_IRQHandler(void){

/*USERCODEBEGINUSART2_IRQn0*/if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE))//判断空闲中断标志位{__HAL_UART_CLEAR_IDLEFLAG(&huart2);//清除中断标志位HAL_UART_IdleCallback(&huart2);//空闲中断回调函数}

/*USERCODEENDUSART2_IRQn0*/HAL_UART_IRQHandler(&huart2);

/*USERCODEBEGINUSART2_IRQn1*/

/*USERCODEENDUSART2_IRQn1*/}485通信任务实施修改stm32f4xx_it.c代码因为重构了一个UART2的空闲中断函数HAL_UART_IdleCallback(UART_HandleTypeDef*huart),需要在stm32f4xx_hal_uart.h文件中声明一下,打开stm32f4xx_hal_uart.h文件,在第722行位置添加如下语句:voidHAL_UART_IdleCallback(UART_HandleTypeDef*huart);/*自构空闲中断回调函数

*/该空闲中断回调函数在CallBack.c文件中定义,因此需要在CallBack.h文件中声明该函数。在CallBack.h文件中添加如下语句:externvoidHAL_UART_IdleCallback(UART_HandleTypeDef*huart);485通信任务实施设置系统编译器路径因为添加了工程文件夹MyApplication,需要告诉编译器添加工程文件的编译路径。按图5-21所示顺序,添加\task2_rs485_modbus\MyApplication\Inc的编译路径。485通信任务实施(5)程序测试编译程序,下载目标文件到核心板,核心板的USART1、USART2分别连接到串口,串口2发送Modbus的指令、接收响应报文,串口1接收调试信息。测试结果如图5-22所示串口2发送“01069C420001C64E”,开启蜂鸣器,串口2收到响应报文——01069C420001C64E,此时核心板的蜂鸣器开启,同时串口1显示调试信息,并计算得到的CRC校验码。经比较,发送的CRC校验码与接收信息经计算得到的CRC校验码相同。485通信任务实施(5)程序测试串口2发送“01069C420000078E”,关闭蜂鸣器,串口2收到应答报文——01069C420000078E,此时核心板的蜂鸣器关闭,同时串口1显示调试信息,并计算得到的CRC校验码。经比较,发送的CRC校验码与接收信息经计算得到的CRC校验码相同。测试结果如图5-23所示。485通信任务实施(5)程序测试当蜂鸣器状态是关闭的,串口2发送“01039C4200024A4F”,测试当前蜂鸣器的状态:01为设备地址,03为功能码,读保持寄存器的值,9C42为寄存器起始地址,0002表示读两寄存器内容,从设备的响应报文(十六进制)为“0103020000006619F2”,表示的含义为:02表示数据长度为2个字,第一个字0000表示蜂鸣器关闭,第二个字0066没有具体含义;19F2为CRC码。当蜂鸣器状态是开启的,串口2发送“01039C4200024A4F”,测试当前蜂鸣器的状态,从设备的响应报文(十六进制)为“01030200010066D9A3”表示的含义为:02表示数据长度为2个字,第一个字0001表示蜂鸣器开启,第二个字0066没有具体含义;D9A3为CRC码。请读者亲自测试,并给出测试结果截图。485通信任务实施代码分析本任务的程序设计采用了面向对象的软件设计方法,通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近实物的自然运行模式。嵌入式C语言的面向对象编程,是利用结构体,将变量、指针、函数进行封装,达到编程更加方便、程序可读性好、方便移植等目的。具体来说,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。常用的定义方法如下:typedef

struct{

变量;

指针;

函数指针;}结构体名称_t;指针即地址,指向内存中的变量。常用的定义方法为:数据类型*指针名;函数指针,就是指向函数的指针变量。485通信任务实施代码分析在本例中,在System.h文件中做了如下定义:485通信任务实施代码分析在本例中,在System.c文件中做了如下定义:使用结构体的函数指针调用函数,函数的声明为static类型,安全性更好。在主函数main.c文件中调用:System.Run();485通信任务实施代码分析RS-485结构体定义及函数实现如程序清单5-7所示(UART.h文件)。485通信任务实施代码分析(UART2.c)Modebus结构体定义及函数实现如程序清单5-8所示485通信任务实施代码分析(Modbus.h)485通信任务实施代码分析(Modbus.c)485通信任务小结代码分析(Modbus.h)通过本任务的学习,可掌握基于RS-485串行通信链路的Modbus通信应用开发的技能。本任务相关的知识技能的思维导图如图5-24所示。--

南昌大学“卓越”辅导员培养工程建设本节结束本节结束74任务5.3基于CAN总线的多机通信应用开发引导案例CAN通信任务5.3基于CAN总线的多机通信应用开发CAN(ControllerAreaNetwork)总线是一种用于在工业自动化系统中传输数据的通信协议。它具有实时性、可靠性和灵活性等特点,广泛应用于汽车、航空、能源、医疗和物联网等领域。(1)汽车电子:发动机控制单元、刹车系统、仪表盘等。通过CAN总线,这些节点可以实现数据的传输和命令的发送,从而实现汽车电子系统的高效协同工作。(2)工业自动化:在工业领域中,PLC(可编程逻辑控制器)和传感器。CAN总线能够提供稳定的数据传输,使得工业系统的监测和控制更加可靠和高效。(3)无人机:用于接收和发送飞行状态信息、控制指令等。通过CAN总线,无人机可以传感器和其他装备之间进行实时数据交换,从而实现高度精确的飞行控制。(4)能源管理:在太阳能或风能发电系统中,利用CAN总线与电池管理系统(BMS)进行通信。通过CAN总线,可以实现对充电、放电过程的监测和控制,从而提高能源利用效率和安全性。任务描述CAN通信为了给汽车传感系统设计发动机温度监测和倒车雷达功能,同时让用户可在中控台上查看实时的监测结果,我们需要借助MCU与CAN收发器建立一个CAN通信网络。任务描述任务要求任务5.3基于CAN总线的多机通信应用开发主节点和各个从节点之间通过CAN总线进行连接。主节点每隔2s向从节点1发送“Hi,Node1”消息,从节点1收到后翻转其上的LED灯作为提示,同时回复“Node1Ack”消息给主节点。主节点每隔3s向从节点2发送“Hi,Node2”消息,从节点2收到后翻转其上的LED灯作为提示,同时回复“Node2Ack”消息给主节点。。任务目标CAN通信职业能力目标(1)了解CAN总线相关的基础知识。(2)掌握CAN控制器的工作原理。(3)掌握CAN收发器芯片的功能及典型应用电路的工作原理。(1)会设计Cortex-M4微控制器与CAN收发器芯片的接口程序。(2)会搭建基于CAN总线的通信网络并编程实现组网通信。任务目标技能目标任务分析CAN通信任务5.3基于CAN总线的多机通信应用开发基于STM32F407MCU建立CAN通信网络是一项常见的任务,适用于很多实时控制系统和汽车电子应用。下面是对该任务的分析。硬件设置(1)要使用CAN通信,需要确定STM32F407上的CAN硬件模块。STM32F407具有两个CAN控制器,可以配置为CAN1和CAN2。(2)确保正确连接CAN总线,包括电源、地线和数据线。初始化CAN控制器(1)使用STM32的HAL库或标准外设库初始化CAN控制器,包括设置CAN时钟、引脚、波特率等。(2)配置接收和发送缓冲区以及过滤器来管理消息的接收和发送。

编写CAN消息发送代码(1)创建一个CAN消息结构体,并填充所需的标识符(ID)和数据。(2)将消息发送到CAN总线上。编写CAN消息接收代码(1)监听CAN总线并检测是否有新的消息到达。(2)如果有消息到达,读取消息的标识符和数据。任务分析CAN通信任务5.3基于CAN总线的多机通信应用开发基于STM32F407MCU建立CAN通信网络是一项常见的任务,适用于很多实时控制系统和汽车电子应用。下面是对该任务的分析。处理接收到的消息根据接收到的消息做出相应的动作。这可能涉及控制输出、修改内部状态或触发其他操作。错误处理可能会出现一些通信错误,如位错误、组帧错误等。在代码中实现错误处理机制,以确保可靠的通信。控制任务优先级在一个实时系统中,对CAN通信任务的处理可能需要和其他任务进行优先级管理,以确保及时响应通信需求。CAN通信CAN介绍知识链接CAN总线定义了更为优秀的物理层、数据链路层,并且拥有种类丰富、简繁不一的上层协议。CAN是控制器局域网络(ControllerAreaNetwork)的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。由德国电气商博世公司在1986年率先提出。用于应对汽车上日益庞大的电子控制系统的需求,其最大的特点是可拓展性好,可承受大量数据的高速通信,并且高度稳定可靠。广泛应用于:汽车电子、工业自动化、安防监控、楼宇自动化、船舶、医疗设备、工业设备等方面。CAN总线属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。01数据传输距离远(最远10Km);

具有实时性强、传输距离较远、抗电磁干扰能力强、成本低数据传输速率高;通信介质可以是双绞线、同轴电缆或光导纤维,通信速率可达1mb/s。具备优秀的仲裁机制(ID识别);具有优先权和仲裁功能,多个控制模块通过CAN控制器挂到CAN-bus上,形成多主机局部网络。CAN总线主要特性CAN通信CAN介绍知识链接02使用筛选器实现多地址的数据帧传递;借助遥控帧实现远程数据请求;具备错误检测与处理功能,保证了数据通信的可靠性。;具备数据自动重发功能;发送的信息遭到破坏后,可自动重发;故障节点可自动脱离总线且不影响总线上其他节点的正常工作。CAN是一种多主总线,即每个节点机均可成为主机,且节点机之间也可进行通信。CAN总线主要特性CAN通信CAN介绍知识链接CAN通信CAN技术规范与标准知识链接ISO未对此部分进行标准化CAN的再发送控制功能未在ISO11898/11519-2中标准化ISO对此部分进行了标准化对于数据链路层,ISO11898和11519-2定义的内容相同;对于物理层,ISO11898和11519-2定义的内容不相同;美国汽车工程师学会等组织针对不同应用领域对CAN技术规范进行了标准化,常见的标准见下表:CAN通信CAN技术规范与标准知识链接ISO11898标准高速CAN总线网络(500Kbps)闭环网络应用在汽车动力与传动系统总线最大长度为40米两端各有一个120Ω的电阻ISO11519标准低速CAN总线网络(125Kbps)应用在汽车车身系统两根总线是独立的,不形成闭环要求每根总线上各串联一个2.2KΩ的电阻终端电阻用来做阻抗匹配,以减少回波反射CAN通信CAN总线的报文信号电平知识链接CAN总线有ISO11898和ISO11519两个通信标准对物理层的定义不同,两者的信号电平特性也不相同,CAN总线上的报文信号使用差分电压传送。差动信号放大器将CAN-H线上的电压(UCAN-High)减去CAN-L线上的电压(UCAN-Low)得出输出电压;CAN-H为3.5V,Can-L为1.5V时,差值为2V时判定为逻辑0;静态时均为2.5左右,差值为0V时判定为逻辑1。CAN通信CAN总线的网络拓扑结构知识链接CAN总线的物理连接只需要两根线,CAN_H和CAN_L,通过差分信号进行数据的传输.CAN总线有两种电平,分别为隐性电平和显性电平,这两种电平有着“与”的关系:·若隐性电平相遇,则总线表现为隐性电平;·若显性电平相遇,则总线表现为显性电平;·若隐性电平和显性电平相遇,则总线表现为显性电平。CAN通信CAN总线的传输介质知识链接CAN总线上的报文信号使用差分电压传送,分别为显性电平和隐性电平。传输介质选择注意事项:物理介质必须支持显性、隐性状态,总线仲裁时,显性状态可支配隐性状态双线结构的总线必须使用终端电阻抑制信号反射,并且采用差分信号以减弱电磁干扰使用光学介质时,隐性电平-状态“暗”,显性电平—状态“亮”同一段CAN总线网络必须采用相同的传输介质CAN通信CAN总线的传输介质——双绞线知识链接双绞线目前在汽车电子、电力系统、电梯控制系统和远程传输系统得到广泛应用双绞线构成CAN网络时的注意事项1.网络两端必须各有一个120欧左右的终端电阻2.支线尽可能短3.确保不在干扰源附近4.电缆电阻越小越好,避免电路压降过大5.CAN总线的波特率取决于传输线延时,通信距离随波特率减小而增加CAN通信知识链接CAN总线的传输介质——双绞线CAN通信知识链接CAN总线的传输介质——光纤拓扑结构的类型总线型环型星型CAN通信知识链接CAN收发器芯片介绍D:CAN发送引脚RS:高速/静音模式选择(低电平为高速)Vref:参考电压输出R:CAN接收引脚CANH:高电位CAN电压输入输出端CANL:低电位CAN电压输入输出端跳线帽选择用于阻抗匹配,减少回波反射CAN收发器芯片TJA1050、TJA1042、SIT1050TSIT1050T支持高速CAN,传输速率可达1MbpsCAN通信知识链接CAN协议层 CAN总线以“帧”形式进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧,其中数据帧最为常用。帧类型帧作用数据帧(DataFrame)用于发送单元向接收单元传输数据的帧遥控帧(RemoteFrame)用于接收单元向具有相同ID的发送单元请求数据的帧错误帧(ErrorFrame)用于当检测出错误时向其他单元通知错误的帧过载帧(OverloadFrame)用于接收单元通知其尚未做好接收准备的帧间隔帧(InterFrameSpace)用于将数据帧及遥控帧与前面的帧分离开来的帧重点常用CAN通信知识链接数据帧介绍标准数据帧扩展数据帧数据帧由7段组成。数据帧又分为标准帧(CAN2.0A)和扩展帧(CAN2.0B),主要体现在仲裁段和控制段。帧起始:表示数据帧开始的段,显性信号仲裁段:表示该帧优先级的段,优先级控制段:表示数据的字节数及保留位的段数据段:数据的内容,一帧可发送0~8字节数据CRC段:检查帧的传输错误的段ACK段:表示确认正常接收的段帧结束:表示数据帧结束的段,7个隐性信号标识符位远程发送请求位0数据帧1遥控帧扩展标识符位数据长度编码位循环校验序列界定符确认位用在扩展格式,替代RTRCAN通信知识链接CAN位时序介绍 CAN总线以“位同步”机制,实现对电平的正确采样。位数据都由四段组成:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每段又由多个位时序Tq组成。采样点是指读取总线电平,并将读到的电平作为位值的点。根据位时序,就可以计算CAN通信的波特率。(1Tq)(8~25)(1~8Tq)(1~8Tq)(2~8Tq)注意:节点监测到总线上信号的跳变在SS段范围内,表示节点与总线的时序是同步,此时采样点的电平即该位的电平。CAN通信知识链接数据同步过程CAN为了实现对总线电平信号的正确采样,数据同步分为硬件同步和再同步。硬件同步节点通过CAN总线发送数据,一开始发送帧起始信号。总线上其他节点会检测帧起始信号在不在位数据的SS段内,判断内部时序与总线是否同步。假如不在SS段内,这种情况下,采样点获得的电平状态是不正确的。所以,节点会使用硬件同步方式调整,把自己的SS段平移到检测到边沿的地方,获得同步,同步情况下,采样点获得的电平状态才是正确的。时钟频率误差、传输上的相位延迟引起偏差CAN通信知识链接数据再同步再同步再同步利用普通数据位的边沿信号(帧起始信号是特殊的边沿信号)进行同步。再同步的方式分为两种情况:超前和滞后,即边沿信号与SS段的相对位置。再同步时,PSB1和PSB2中增加或者减少的时间被称为“再同步补偿宽度(SJW)”,其范围:1~4Tq。限定了SJW值后,再同步时,不能增加限定长度的SJW值。SJW值较大时,吸收误差能力更强,但是通讯速度会下降。CAN通信知识链接CAN总线仲裁——优先级决定CAN总线处于空闲状态,最先开始发送消息的单元获得发送权。多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐性电平的单元失去对总线的占有权变为接收。竞争失败单元,会自动检测总线空闲,在第一时间再次尝试发送。CAN通信知识链接STM32CAN控制器介绍STM32CAN控制器(bxCAN),支持CAN2.0A和CAN2.0BActive版本协议。CAN2.0A只能处理标准数据帧且扩展帧的内容会识别错误,而CAN2.0BActive可以处理标准数据帧和扩展数据帧。CAN2.0BPassive只能处理标准数据帧且扩展帧的内容会忽略。bxCAN主要特点:

波特率最高可达1Mbps

支持时间触发通信(CAN的硬件内部定时器可以在TX/RX的帧起始位的采样点位置生成时间戳)

具有3级发送邮箱

具有3级深度的2个接收FIFO

可变的过滤器组(最多28个)CAN通信知识链接CAN控制器模式CAN控制器的工作模式有三种:初始化模式、正常模式和睡眠模式。降低功耗进行软件初始化CAN总线同步,开始接收和发送对寄存器配置需进入到初始化模式CAN通信知识链接CAN控制器模式CAN控制器的测试模式有三种:静默模式、环回模式和环回静默模式。静默模式环回模式环回静默模式只向总线发送1不能发送0,可从总线接收数据发送的数据直接到输入(总线可监测数据),不能从总线接收数据发送的数据直接到输入(总线不可监测到数据),不能从总线接收数据正常模式可向总线发送或接收数据可统计总线的流量自检自检(不影响总线)总线的正常节点初始化模式下进行配置CAN通信知识链接CAN控制器框图①②③④注意:F1中互联型产品才有2个CAN控制器 F4/F7产品都有2个CAN控制器1)CAN内核2)发送邮箱包含各种控制/状态/配置寄存器,可以配置模式、波特率等用来缓存待发送的报文,最多可以缓存3个报文3)接收FIFO缓存接收到的有效报文4)接收过滤器筛选有效报文CAN通信知识链接CAN收发处理流程发送优先级由邮箱中报文的标识符决定。标识符数值越低有最高优先级。如果标识符值相同,邮箱小的先被发送。选择空置邮箱邮箱退出空状态挂号状态预定发送状态发送状态空置状态等待成为最高优先级的邮箱等待总线进入空闲状态报文被成功发送接收处理空置FIFO挂号_1挂号_2挂号_3溢出状态空置状态收到有效报文有效报文指的是(数据帧直到EOF段的最后一位都没有错误),且通过过滤器组对标识符过滤。有效报文数量可从FMP位得知读取FIFO输出邮箱读出邮箱中的报文收到有效报文收到有效报文收到有效报文FIFO已满出现报文丢失问题取决FIFO锁定功能放入优先级最高的邮箱请求数据发送发送处理CAN通信知识链接接收过滤器位宽可设置32位或16位,寄存器存储的内容就有所区别。当总线上报文数据量很大时,总线上的设备会频繁获取报文,占用CPU。过滤器的存在,选择性接收有效报文,减轻系统负担。每个过滤器组都有两个32位寄存器CAN_FxR1和CAN_FxR2。根据过滤器组的工作模式不同,寄存器的作用不尽相同。位宽和选择模式过滤器组Reg32位16位(寄存器由两部分组成)CAN_FxR1STDID[10:0]、EXTID[17:0]、IDE、RTRSTDID[10:0]、EXTID[17:15]、IDE、RTRCAN_FxR2STDID[10:0]、EXTID[17:0]、IDE、RTRSTDID[10:0]、EXTID[17:15]、IDE、RTR选择模式可设置屏蔽位模式或标识符列表模式,寄存器内容的功能就有所区别。屏蔽位模式,可以选择出一组符合条件的报文。寄存器内容功能相当于是否符合条件。标识符列表模式,可以选择出几个特定ID的报文。寄存器内容功能就是标识符本身。REG中bit值代表的是匹配与否:1必须匹配0不用关心CAN通信知识链接CAN控制器位时序CAN控制器位时序STM32F103,设TS1=8、TS2=7、BRP=3,波特率=36000/[(9+8+1)*4]=500Kbps。STM32F407,设TS1=6、TS2=5、BRP=5,波特率=42000/[(7+6+1)*6]=500Kbps。STM32的CAN外设位时序分为三段:

同步段SYNC_SEG

时间段1BS1

时间段2BS2PTS

+PBS1

注意:通信双方波特率需要一致才能通信成功。CAN通信知识链接CAN相关寄存器介绍寄存器名称作用CAN_MCRCAN主控制寄存器主要负责CAN工作模式的配置CAN_BTR位时序寄存器用来设置分频/TBS1/TBS2/TSWJ等参数,设置测试模式CAN_(T/R)IxR标识符寄存器存放(待发送/接收)的报文ID、扩展ID、IDE位及RTR位CAN_(T/R)DTxR数据长度和时间戳寄存器存放(待发送/接收)报文的DLC段CAN_(T/R)DLxR低位数据寄存器存放(待发送/接收)报文数据段的Data0~Data3的内容CAN_(T/R)DHxR高位数据寄存器存放(待发送/接收)报文数据段的Data4~Data7的内容CAN_FM1R过滤器模式寄存器用于设置各过滤器组的工作模式CAN_FS1R过滤器位宽寄存器用于设置各过滤器组的位宽CAN_FFA1RFIFO关联寄存器用于设置报文通过过滤器后,被存入的FIFOCAN_FA1R过滤器激活寄存器用于开启对应的过滤器组CAN_FxR(1/2)过滤器组x寄存器根据位宽和模式设置不同,CAN_FxR1和FxR2功能不同CAN通信知识链接CAN相关HAL库驱动介绍(掌握)驱动函数关联寄存器功能描述__HAL_RCC_CANx_CLK_ENABLE(…)使能CAN时钟HAL_CAN_Init(…)MCR/

BTR初始化CANHAL_CAN_ConfigFilter(…)过滤器寄存器配置CAN接收过滤器HAL_CAN_Start(…)MCR/MSR启动CAN设备HAL_CAN_ActivateN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论