我的实验环境是主机为KEA128的demo板子;从机的MCU是KEA64,LIN收发器是TJA1021。 先说下现象:主机数据场第0字节数据是0x00的时候,从机接收的数据丢失0x00,其它数据正常;主机数据场第0字节数据不是0x00的时候,从机接收的数据从数据场开始全部异常。 现在出现的问题是这样的: 1、主机发送13位显性1位隐形的间隔场、1字节同步场0x55、1字节标识符场0xF0、8字节数据场00,11,22,33,44,55,66,77,1字节校验和;从机这边能正常接收到0x55、0xF0、数据场的11,22,33,44,55,66,77,但是无法接受到00。 2、主机发送13位显性1位隐形的间隔场、1字节同步场0x55、1字节标识符场0xF0、8字节数据场42(或者其他不为0x00的数据),11,22,33,44,55,66,77,1字节校验和;从机这边能正常接收到0x55、0xF0,但是无法接收到正常的数据场数据,接收到数据类似于a8,24,9a,22,55,99,dd这种完全莫名其妙的数据。 由于我手上现在没有示波器,LIN的波形需要在复工后才能测量了,想问下大家有哪些可能会导致我这个现象呢? 然后附上LIN的初始化代码 - /**
- * @brief 初始化主机LIN总线,波特率设置为9600
- * @param None
- * @retval None
- */
- void lin_init(void)
- {
- UART_ConfigType Config = {{0}};
- Config.u32SysClkHz = SystemCoreClock;
- Config.u32Baudrate = 9600;
- Config.bSbns = 0;
- Config.sctrl2settings.bits.bRe = 1;
- Config.sctrl2settings.bits.bTe = 1;
- Config.sctrl2settings.bits.bRie = 1;
- Config.sctrl3settings.bits.bBrk13 = 1; //间隔信号长度为13位
- CONFIG_PIN_AS_GPIO(PTB, PTB2, OUTPUT); //EN引脚给高电平
- GPIO_SetBits(PTB, PTB2);
- CONFIG_PIN_AS_GPIO(PTB, PTB3, OUTPUT); //WAKE引脚给低电平
- GPIO_ResetBits(PTB, PTB3);
- SIM_PINSEL0 &= ~SIM_PINSEL_UART0PS_MASK; //强制选择UART0的通信脚为PTB0/1
- UART_Init(LIN_UART_NUM, &Config);
- UART_SetCallback(LIN_UART_NUM, lin_rcv);
- }
复制代码- /**
- * @brief 初始化从机LIN总线,波特率设置为9600
- * @param None
- * @retval None
- */
- void lin_init(void)
- {
- UART_ConfigType Config = {{0}};
- Config.u32SysClkHz = SystemCoreClock;
- Config.u32Baudrate = 9600;
- Config.bSbns = 0;
- Config.sctrl2settings.bits.bRe = 1;
- Config.sctrl2settings.bits.bTe = 1;
- Config.sctrl2settings.bits.bRie = 1;
- Config.sctrl3settings.bits.bBrk13 = 1; //间隔信号发送长度为13位
- CONFIG_PIN_AS_GPIO(PTD, PTD5, OUTPUT); //不让TJA1021进入休眠模式(下降沿有效)
- GPIO_SetBits(PTD, PTD5);
- UART_Init(LIN_UART_NUM, &Config);
- UART_SetCallback(LIN_UART_NUM, lin_rcv);
- }
复制代码
最佳答案
楼主你好!
你的代码是否使用的是官方的lin驱动:
http://www.nxp.com/webapp/swlice ... id=SW-LIN2X-J2602-D
如果接收数据异常,查看下波特率的配置,是否误差率在1.5%范围内。 ...
|