STM8 LIN模式功能描述 在LIN模式下,LIN标准要求的数据格式是8位数据位加1位停止位。 完成这样的设置需要将UART_CR1的M位清0,同时把UART_CR3的STOP[1:0]位也清0。 主模式 UART初始化 步骤: 1.设置UART_BRR2和UART_BRR1来选择期望的波特率。 2.将UART_CR3的LINEN位置1来使能LIN模式。 3.将UART_CR2的TEN位和REN位置1来使能发送器和接收器。 LIN报文头(header)的发送 按照LIN协议,所有在LIN总线上的通讯都由主设备通过发送报文头(header)发起,报文头之后是响应。报文头由主任务(主节点)发送,而数据由节点(主节点或者从节点)的从任务发送。 不带错误侦测的步骤: 1.将UART_CR2的SBK位置1来请求发送断开符+分界符。 2.对UART_DR写入0x55来请求发送同步域。 3.等待UART_SR的标志位TC为1。 4.对UART_DR写入被保护识别符值来请求发送识别符域。 5.等待UART_SR的标志位TC为1。
带错误侦测的步骤: 1.将UART_CR2的SBK位置1来请求发送断开符+分界符。 2.等待UART_CR4的标志位LBDF为1。 3.对UART_DR写入0x55来请求发送同步域。 4.等待UART_SR的标志位RXNE为1,并读回UART_DR。 5.对UART_DR写入被保护识别符值来请求发送识别符域。 6.等待UART_SR的标志位RXNE为1,并读回UART_DR。 只有在UART_RX管脚上接收回有效的断开符和分界符以后,标志位LBDF才会置1。 LIN断开符和分界符侦测 当STM8的LIN模式被使能时,断开符号检测电路被激活。该检测完全独立于USART接收器。断开符只要一出现就能检测到,不管是在总线空闲时还是在发送某数据帧期间。
当接收器被激活时(USART_CR1的REN=1),电路监测RX上的起始信号。监测起始位的方法同检测断开符号或数据是一样的。当起始位被检测到后,电路对每个接下来位的第8,9,10个过采样时钟点上进行采样。如果10个(当USART_CR4的LBDL=0)或11个(当USART_CR4的LBDL=1)连续位都是'0',并且又跟着一个分界符,USART_SR的LBD标志被置1。如果LBDIEN位=1,会有中断产生。 如果在第10或11个采样点之前采样到了'1',检测电路取消当前检测并重新寻找起始位。如果LIN模式被禁止(LINEN=0),接收器继续如正常USART那样工作,不需要考虑检测断开符。
如果LIN模式被激活(LINEN=1),只要一发生帧错误(例如在发送断开帧时,停止位检测到'0'),接收器就停止,直到断开符号检测电路接收到一个'1'(这种情况发生于断开符没有完整的发出来),或一个定界符(这种情况发生于已经检测到一个完整的断开符号)。 图116说明了断开符检测器状态机的行为和断开符号标志的关系。 LBDF标志用于主模式,LHDF标志用于从模式。 图117给了一个断开帧的例子。 (图116:STM8_LIN模式下的断开符检测(11位断开长度–设置了LBDL位)) (图117:STM8_LIN模式下的断开符检测与帧错误的检测) 响应发送(主设备是响应的发布方) 响应由符合UART规范的字节组成:8位数据位,1位停止位,无校验位。