69.6.7. UART LIN从机波特率自适应示例
69.6.7.1. 概述
本示例展示了如何使用UART外设和PLB外设实现LIN从机的波特率自适应功能。主要演示:
使用PLB检测LIN总线波特率
LIN从机根据检测结果自动调整波特率
LIN从机接收主机发送的数据
LIN从机响应主机的数据请求
69.6.7.2. 工作原理
本示例实现了以下功能:
波特率自适应:
使用PLB测量LIN break和同步字段的时序
计算实际的波特率
动态调整UART波特率以匹配主机
接收主机数据:
接收LIN帧(ID: 0x31,数据:0x0-0x7)
校验数据正确性
响应主机请求:
发送LIN帧(ID: 0x30,数据:0x7-0x0)
使用增强型校验和
69.6.7.3. 工作流程
初始化流程:
PLB初始化:
配置PLB通道用于时序测量
配置DMA用于数据采集
设置波特率容差和过滤参数
UART初始化:
配置初始波特率(19200)
使能line status中断检测break信号
配置帧格式为8位数据位,无校验位
波特率检测流程:
Break和同步字段检测:
PLB捕获LIN总线信号
测量break和同步字段的时序
计算实际波特率
波特率调整:
验证计算得到的波特率是否在支持范围内
动态更新UART波特率配置
准备接收PID
数据处理流程:
接收数据(ID: 0x31):
配置RX FIFO触发等级大于剩余数据帧长度
使能RX超时中断
在中断中接收和校验数据
发送数据(ID: 0x30):
准备发送数据(0x7-0x0)
使能TX FIFO中断
在中断中确认数据发送完成
中断处理流程:
DMA中断:
处理PLB采集的数据
计算波特率并更新UART配置
UART RX数据中断:
接收PID并校验
配置后续操作
UART TX FIFO中断:
检测发送数据完成
注意:uart_intr_tx_slot_avail中断发生时尚有最后一个字节数据在发送FIFO中,可以添加状态查询或者依据版本使用新特性TXIDLE中断
UART RX超时中断:
接收完整数据帧
校验数据正确性
关闭RX超时中断
注意:RX timeout方式需要数据帧之间间隔大于等于4个UART字节的传输时间
69.6.7.4. 注意事项
不支持从机自动休眠,无需主机唤醒
波特率检测需要额外的硬件连接(UART_RX到PLB输入)
波特率调整有一定的容差范围(默认±5%)
69.6.7.5. 使用说明
69.6.7.5.1. 硬件要求
开发板一块
USB转LIN调试器一个
LIN收发器(如果开发板未集成)
69.6.7.5.2. 硬件设置
根据开发板类型选择相应的连接方式:
带板载LIN收发器的开发板:
将USB转LIN调试器的LIN信号线连接到开发板的LIN信号引脚
连接GND
将UART_RX引脚与PLB LIN时钟检测引脚相连
不带板载LIN收发器的开发板:
将开发板的UART TX和RX引脚连接到LIN收发器的MCU端
将USB转LIN调试器连接到LIN收发器的LIN总线端
连接GND
将UART_RX引脚与PLB LIN时钟检测引脚相连
具体引脚连接请参考开发板 引脚描述 部分。
69.6.7.5.3. 运行步骤
配置USB转LIN调试器:
选择正确的串口和初始波特率(可以是任意支持的波特率)
点击”设置到调试器”按钮
配置主机发送功能和主机接收功能:
设置发送ID为0x31,配置发送数据为:0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7和增强型校验和
设置接收ID为0x30
勾选使能选项
点击”配置到调试器”按钮
编译下载程序到开发板并运行
可以尝试调整USB转LIN调试器的波特率,验证自适应功能
69.6.7.6. 运行现象
串口终端输出信息:
Test uart lin slave baudrate adaptive example uart lin receive ID: 0x31 uart receive 8 data: 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 uart lin receive ID: 0x30 uart send 8 data: 0x7 0x6 0x5 0x4 0x3 0x2 0x1 0x0
USB转LIN调试器显示通信数据:
69.6.7.7. 调试建议
硬件连接检查
使用逻辑分析仪观察LIN总线信号,确认break、sync、数据段和检验和的信号波形是否正确
检查中断是否按照预期产生,PLB的中断和计算出的波特率以及UART的中断是否正确