|
我的实验环境是主机为KEA128的demo板子;从机的MCU是KEA64,LIN收发器是TJA1021。
再先说下现象(不考虑校验场的数据结果):
现象1.主机数据场第0字节数据是0x00的时候,从机接收的数据场数据丢失0x00,其它数据正常;
现象2.主机数据场第0字节数据不是0x00且后面也没有0x00的时候,从机接收的数据从数据场开始全部异常;
现象3.主机数据场第0字节数据不是0x00且后面第i字节的数据是0x00的时候,从机接收的数据从第0字节到第i字节全都异常,从第i+1字节开始的数据全都正常。
以下是各现象的截图:
主机发送的数据格式第0字节是LIN的CMD,第1字节是数据场长度,其它是数据场数据;
从机接收的数据格式依次是:同步场、PID、8字节数据场、校验场。
由于我手上现在没有示波器,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);
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|