KEA128/64平台LIN总线的问题
我的实验环境是主机为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
* @paramNone
* @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
* @paramNone
* @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);
} KEA系列单片机调试LIN确实各种问题,要踩一些坑。方法:一边调试一边查看UART外设寄存器的值 adlkkang 发表于 2020-2-19 15:09
KEA系列单片机调试LIN确实各种问题,要踩一些坑。方法:一边调试一边查看UART外设寄存器的值 ...
太头疼了,数据场的这种变化没有示波器真的不知道啥情况……您所说的观察UART寄存器的值,在数据场里面能观察到寄存器UARTx_S1的FE(Framing Error Flag)的值是1,我感觉这个应该能指导我的数据场数据在传输的时候是有问题的
時鐘FEI、FEE?
结下帖子,问题已经找到。KEA64的芯片手册描述有误,出厂的IRC值应该为31.25kHz,不是32kHz 笔记本的自嘲 发表于 2020-2-26 14:19
结下帖子,问题已经找到。KEA64的芯片手册描述有误,出厂的IRC值应该为31.25kHz,不是32kHz ...
你有試過新的芯片燒錄時不設定IRC那個ICS_C3的值
程序還能跑嗎?
我最近遇到1k有3%的MCU設一樣的值跑出來的頻率會比其他顆少0.5~1MHz zxzx8059 发表于 2020-2-27 11:37
你有試過新的芯片燒錄時不設定IRC那個ICS_C3的值
程序還能跑嗎?
我这边都不操作C3寄存器的,直接用16M主频跑。
官方对于C3的操作有一个专门的帖子,我发不了链接,我发一下帖子名字,你自己搜一下吧,见下面:
使用CodeWarrior10.5软件的PE工具trim芯片内部慢速时钟
我自己测试了一下,总线设置成20M后误差在3.75%,偏差太大了,还是用16M算了。
页:
[1]