本帖最后由 糊糊糊锅 于 2024-10-15 08:55 编辑
#申请原创#@21小跑堂
本文接上一篇LIN Slave通信,基于APM32F003平台对LIN Master通信知识讲解和代码解析。
一、基础知识讲解
这里主要是对于LIN Master和LIN Slave的区别做讲解,其他相同部分基础知识就不多做赘诉,更多基础知识讲解请查阅上一篇基于APM32F003 LIN通信之LIN SLAVE通信。

主节点包含主机任务和从机任务,从节点只包含从机任务。
主机任务负责:
1.调度总线上帧的传输次序;
2.监测数据,处理错误;
3.作为标准时钟参考;
4.接收从机节点发出的总线唤醒命令。从机任务不能主动发送数据,需要根据接收到的主机的帧头信息进行判断。
5.LIN总线提供信号的配置、处理、识别和诊断功能。
根据以上LIN主节点主要负责的任务描述,可以将LIN消息ID类型分为以下三类:
1.发送同步间隔段;
2.主机写--发送帧头+响应
3.主机读--发送帧头,响应由其他从机节点发送
二、、APM32F003支持LIN Master的相关寄存器说明
通过以上的说明,可以了解到Master和Slave的主要操作区别在于是否需要发送同步间隔段,根据用户手册说明,我们可以看到通过设置USART_CTRL2寄存器的TXBRK位可以发送断开帧(即同步间隔段)。

三、代码实战
1.实验效果:50ms周期通过0x31 id主机写{0x00, 0x22,0x33,0x44,0x00,0x00,0x00,0x00}报文,通过0x32 id主机读的操作
2.代码解析
①设置LIN同步间隔段发送函数


②LIN字节发送函数

③LIN消息发送函数,这里主要是对上面描述的三种不同LIN消息ID类型的处理函数

④主函数50ms周期调用LIN主机读/写

3.代码运行效果

|