在汽车电子领域,LIN是一个不可缺少的总线。由于其实现成本极低,在通信速度低的场合大量使用,比如组合开关、控制面板、电动座椅、后视镜以及光线雨量传感器等等。
可能是因为LIN-BUS数量问题,或者其他想省money的想法,不得不在UART2上实现LIN通信时,你会去查找AC7801x的参考手册,你会发现,what !! UART2不支持LIN。
好了,该想想办法解决了,毕竟软件的功力可以弥补硬件上的短处呀。大家都清楚,LIN通信是基于UART, 在UART的基础上增加了一个Break信号的发送(LIN主机)与检测(LIN丛机)。UART2就是缺少了硬件发送Break与检测Break信号。但是在7801X上,还是有很多种方案可以解决break信号的发送与检测,从而实现LIN通信。
UART2发送Break信号思路:
将UART2_TX引脚切换为GPIO,把引脚拉低,启动13bit break信号时长定时器,待定时结束后将UART2_TX引脚拉高,并将UART2_TX引脚设置为UART的TX功能。
shuiyi
UART2检测Break信号思路:
检测UART2_RX引脚每个低电平的时间宽度,只要宽度在10-20bit之间,就认为是接收到break。
在这里原谅作者的无知,将break信号认为是10-20bit,因为LIN规范中没有看到break宽度的上限,在此先认为20先。
BREAK信号的发送与检测,都使用到了定时器。所以目前可实现的方案有三:
一、UART2模块+PWM捕获+1个捕获引脚。
将UART2_RX链接至PWM的捕获引脚上。发送时使用PWM定时发送Break信号,接收时使用PWM检测RX引脚上的低电平信号宽度。
二、UART2模块+PWDT脉宽检测+1个PWDT监测引脚。
将UART2_RX链接至PWDT检测引脚上。发送时使用PWDT定时发送Break信号,接收时使用PWDT检测RX引脚上的低电平信号宽度。
三、UART2模块+PWDT脉宽检测+CTU模块。
将UART2_RX通过CTU模块内联至PWDT。发送时使用PWDT定时发送Break信号,接收时使用PWDT检测RX引脚上的低电平信号宽度。
三种方案各有自己的优缺点,大家可以根据自己的外设使用情况选择适合自己的方案。
|